尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Qt与OpenCASCADE工业机器人仿真系统:碰撞检测与RRT路径规划实战
简介这份资源是一套面向工业机器人研发与仿真方向学习者的完整工程源码基于Qt框架与OpenCASCADE几何内核构建支持ABB和ROKAE两大品牌机器人建模并集成碰撞检测、RRT路径规划算法以及TCPIP通讯控制真实机器人功能适合从事机器人仿真、路径规划或自动化产线调试的中高级开发者参考。压缩包共约2000个文件以1175个C头文件与728个cpp源文件为主体辅以少量txt说明、json配置、md文档及sh脚本整体约169.61MB工程结构完整便于按模块阅读与二次开发。目前已有177人学习下载。通过该资源读者可获取机器人三维建模、碰撞检测与RRT路径规划的实现思路理解仿真结果经TCPIP协议下发至真实设备的完整链路并借助Qt界面与OpenCASCADE可视化模块搭建自己的仿真验证环境对缩短研发调试周期具有实际参考价值。1. 工业机器人仿真系统从 Qt 界面到 OpenCASCADE 几何内核的完整落地路径很多做机器人上位机的工程师都遇到过这种局面算法在 MATLAB 里跑得挺好一放到实际产线就翻车——要么是模型导入后坐标系对不上要么是路径规划出来的轨迹直接穿过工件要么是仿真和真机动作差了几毫米导致撞机。这套基于 Qt 框架和 OpenCASCADE 几何内核开发的工业机器人仿真与路径规划系统要解决的就是从「算法验证」到「真机控制」之间那段最容易被忽视的工程化距离。它支持 ABB 和 ROKAE 两类机器人的运动学建模内置碰撞检测和 RRT 路径规划算法还能通过 TCP/IP 通讯把规划好的轨迹下发到真实控制器。适合已经懂机器人学基础、但被几何处理和工程集成卡住的开发者也适合想从零搭一套仿真验证平台的团队。2. 为什么选 Qt OpenCASCADE 这套组合选型逻辑与最小环境搭建2.1 工业机器人仿真对几何内核的真实需求工业机器人仿真和游戏引擎里的角色动画完全是两码事。游戏里穿模了顶多难看机器人仿真里穿模意味着碰撞检测失效真机跑起来就是撞刀、撞夹具、撞围栏。所以几何内核必须满足三个硬条件第一支持精确的 B-Rep 边界表示能算清楚两个实体之间的最小距离第二能处理 STEP、IGES 这类工业标准格式因为工件模型通常来自 SolidWorks 或 UG第三要有成熟的布尔运算和截面计算能力用于碰撞检测中的干涉判断。OpenCASCADE 在这三点上都是开源方案里的第一梯队。它的 BRepExtrema 包可以直接算两个拓扑形状之间的极值距离BRepAlgoAPI 提供布尔运算STEPControl_Reader 和 IGESControl_Reader 负责格式导入。相比之下一些轻量级几何库只支持三角网格碰撞检测精度受网格密度影响做路径规划时容易在曲面上出现误判。Qt 的角色则是把这一切串起来。工业软件对界面的要求不是好看而是稳定、可扩展、能嵌入 3D 视图。Qt 的 QOpenGLWidget 可以直接把 OpenCASCADE 的 V3d_View 嵌进去信号槽机制让算法线程和界面线程解耦避免规划算法跑起来界面卡死。Qt 5.15.2 是最后一个提供离线安装包的 LTS 版本对工业场景来说比追新更重要。2.2 环境搭建Qt 5.15.2 OpenCASCADE 7.6 VS2022 的编译配置这套组合在 Windows 下的坑主要集中在编译器和 CMake 配置上。Qt 5.15.2 官方离线包自带 MinGW 和 MSVC 两套工具链但 OpenCASCADE 7.6 的预编译库是用 MSVC 2019/2022 编译的所以必须选 MSVC 套件。如果你装完 Qt 只看到 MinGW需要单独装 Visual Studio 2022 的 C 桌面开发工作负载然后在 Qt Creator 里手动添加 MSVC 编译器。# CMakeLists.txt 关键片段 cmake_minimum_required(VERSION 3.16) project(RobotSim) # OpenCASCADE 路径按实际安装位置改 set(OCC_DIR C:/OpenCASCADE-7.6.0) find_package(OpenCASCADE REQUIRED) # Qt 5.15.2 组件 find_package(Qt5 COMPONENTS Core Gui Widgets OpenGL REQUIRED) # 头文件路径 include_directories( ${OpenCASCADE_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ) # 源文件 file(GLOB SOURCES src/*.cpp) file(GLOB HEADERS include/*.h) add_executable(RobotSim ${SOURCES} ${HEADERS}) # 链接 OpenCASCADE 库TKernel 是基础TKBO 做布尔运算TKBRep 管拓扑 target_link_libraries(RobotSim Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL ${OpenCASCADE_LIBRARIES} TKernel TKMath TKBRep TKTopAlgo TKBO TKBool TKPrim TKGeomBase TKG3d TKG2d TKSTEP TKIGES TKSTL TKV3d TKOpenGl )这段 CMake 配置里find_package(OpenCASCADE)会自动找到安装目录下的 OpenCASCADEConfig.cmake。如果报Could not find OpenCASCADE检查环境变量CASROOT是否指向安装根目录。链接库列表里 TKSTEP 和 TKIGES 是格式导入必须的TKV3d 和 TKOpenGl 负责可视化漏掉任何一个都会在链接阶段报cannot find -lTKxxx。注意OpenCASCADE 7.6 的预编译库分 Release 和 Debug 两套Debug 库文件名带d后缀。CMake 里用target_link_libraries时如果混用会出现LNK2038运行库不匹配的错误。建议在 CMake 里根据CMAKE_BUILD_TYPE自动切换。2.3 把 OpenCASCADE 视图嵌入 Qt 窗口的最小可运行代码很多教程只讲概念不给能跑的代码。下面这段是能直接编译运行的最小示例把 OpenCASCADE 的 3D 视图嵌到 Qt 的 QWidget 里并显示一个立方体。// OccView.h #ifndef OCCVIEW_H #define OCCVIEW_H #include QOpenGLWidget #include AIS_InteractiveContext.hxx #include V3d_View.hxx #include V3d_Viewer.hxx #include OpenGl_GraphicDriver.hxx class OccView : public QOpenGLWidget { Q_OBJECT public: explicit OccView(QWidget *parent nullptr); ~OccView(); protected: void initializeGL() override; void paintGL() override; void resizeGL(int w, int h) override; private: Handle(AIS_InteractiveContext) m_context; Handle(V3d_View) m_view; }; #endif// OccView.cpp #include OccView.h #include BRepPrimAPI_MakeBox.hxx #include AIS_Shape.hxx OccView::OccView(QWidget *parent) : QOpenGLWidget(parent) {} void OccView::initializeGL() { // 创建 OpenGL 驱动必须用 Aspect_DisplayConnection Handle(Aspect_DisplayConnection) displayConn new Aspect_DisplayConnection(); Handle(OpenGl_GraphicDriver) driver new OpenGl_GraphicDriver(displayConn); // 创建查看器关联驱动 Handle(V3d_Viewer) viewer new V3d_Viewer(driver); viewer-SetDefaultLights(); viewer-SetLightOn(); // 创建视图并关联当前窗口 m_view viewer-CreateView(); m_context new AIS_InteractiveContext(viewer); // 关键把 OpenCASCADE 的窗口句柄指向 QOpenGLWidget 的 winId m_view-SetWindow(reinterpret_castAspect_Handle(winId())); if (!m_view-IsWindow()) m_view-MustBeResized(); // 创建一个 100x100x100 的立方体并显示 TopoDS_Shape box BRepPrimAPI_MakeBox(100.0, 100.0, 100.0); Handle(AIS_Shape) aisBox new AIS_Shape(box); m_context-Display(aisBox, Standard_True); m_view-FitAll(); } void OccView::paintGL() { if (!m_view.IsNull()) m_view-Redraw(); } void OccView::resizeGL(int w, int h) { if (!m_view.IsNull()) m_view-MustBeResized(); }这段代码的核心逻辑是initializeGL里创建 OpenCASCADE 的图形驱动和查看器然后通过winId()把 Qt 窗口句柄交给 OpenCASCADE 的视图。paintGL里调用Redraw()触发重绘resizeGL里调用MustBeResized()让视图跟随窗口大小变化。参数上BRepPrimAPI_MakeBox的三个参数是长宽高单位是毫米和工业机器人常用的单位一致。提示如果运行后窗口全黑先检查winId()是否在initializeGL之前已经有效。某些 Qt 版本下需要在构造函数里调用setAttribute(Qt::WA_NativeWindow)强制生成原生窗口句柄。3. ABB 与 ROKAE 机器人建模DH 参数到 OpenCASCADE 实体的映射方法3.1 用 DH 参数表驱动机器人连杆建模工业机器人建模的核心是把 DH 参数表转成 OpenCASCADE 里的实体和变换矩阵。ABB 的 IRB 系列和 ROKAE 的 xMate 系列在 DH 参数约定上略有差异但都可以用标准 DH 或改进 DH 描述。下面以 ABB IRB 1200 为例给出参数表和对应的建模代码。关节a (mm)d (mm)alpha (deg)theta 偏移 (deg)J10399-900J235000-90J3420900J40351-900J500900J608200这张表里 a 是连杆长度d 是连杆偏距alpha 是连杆扭转角theta 偏移是关节零位对应的角度。建模时每个连杆用一个BRepPrimAPI_MakeCylinder或BRepPrimAPI_MakeBox表示然后按 DH 参数计算相邻连杆的变换矩阵。// 根据 DH 参数构建变换矩阵 gp_Trsf BuildDHMatrix(double a, double d, double alpha, double theta) { gp_Trsf T; // 绕 Z 轴旋转 theta T.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), theta); // 沿 Z 轴平移 d gp_Trsf Tz; Tz.SetTranslation(gp_Vec(0, 0, d)); T T * Tz; // 沿 X 轴平移 a gp_Trsf Tx; Tx.SetTranslation(gp_Vec(a, 0, 0)); T T * Tx; // 绕 X 轴旋转 alpha gp_Trsf Rx; Rx.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(1,0,0)), alpha); T T * Rx; return T; }这段代码按标准 DH 的变换顺序先绕 Z 转 theta再沿 Z 移 d再沿 X 移 a最后绕 X 转 alpha。注意gp_Trsf的乘法顺序是从右往左作用所以代码里T T * Tz表示先做 Tz 再做 T。如果顺序搞反机器人姿态会完全错乱这是血泪经验里最常见的一类翻车。3.2 关节坐标系可视化与 TCP 标定建完连杆实体后需要把每个关节的坐标系画出来方便检查 DH 参数是否正确。OpenCASCADE 里可以用AIS_Trihedron显示坐标系或者自己用BRepPrimAPI_MakeCylinder画短轴线。// 在每个关节位置显示坐标系 void ShowJointFrames(const Handle(AIS_InteractiveContext) context, const std::vectorgp_Trsf jointTransforms) { for (size_t i 0; i jointTransforms.size(); i) { // 提取变换矩阵中的位置和姿态 gp_Pnt origin jointTransforms[i].TranslationPart(); gp_Ax2 axes(origin, gp_Dir(0,0,1), gp_Dir(1,0,0)); // 创建三色坐标系长度 50mm Handle(AIS_Trihedron) trihedron new AIS_Trihedron( new Geom_Axis2Placement(axes)); trihedron-SetSize(50.0); context-Display(trihedron, Standard_False); } context-UpdateCurrentViewer(); }TCP 标定是另一个容易出问题的地方。ABB 的 TCP 默认在第六轴法兰中心沿 Z 轴偏移一个工具长度ROKAE 的默认 TCP 定义可能不同。实际做法是在机器人末端装一个标定针用四点法或六点法测出 TCP 相对于法兰坐标系的位置然后把这个偏移量加到 DH 模型的末端变换里。如果跳过这一步路径规划出来的轨迹在真机上会整体偏移一个工具长度轻则加工位置不对重则撞机。注意ROKAE 机器人的关节零位和 ABB 不同导入模型后如果发现 J2 和 J3 的角度方向反了检查 DH 参数里 alpha 的符号。ROKAE 部分型号使用改进 DHalpha 和 a 的定义顺序与标准 DH 有差异。4. 碰撞检测与 RRT 路径规划从算法到可运行代码4.1 基于 OpenCASCADE 的碰撞检测实现碰撞检测的本质是判断两个 TopoDS_Shape 之间的最小距离是否小于安全阈值。OpenCASCADE 的BRepExtrema_DistShapeShape可以直接算这个距离精度到浮点级别。// 碰撞检测返回两个形状之间的最小距离 double CheckCollision(const TopoDS_Shape shape1, const TopoDS_Shape shape2) { BRepExtrema_DistShapeShape distCalc(shape1, shape2); if (!distCalc.Perform()) return -1.0; // 计算失败 return distCalc.Value(); } // 批量检测机器人连杆与环境的碰撞 bool IsCollisionFree(const std::vectorTopoDS_Shape robotLinks, const std::vectorTopoDS_Shape environment, double safeDistance) { for (const auto link : robotLinks) { for (const auto env : environment) { double dist CheckCollision(link, env); if (dist 0 dist safeDistance) return false; // 发生碰撞 } } return true; }BRepExtrema_DistShapeShape的Value()返回两个形状之间的最小距离单位是毫米。safeDistance一般设 5 到 10 毫米太小容易误判太大则规划空间被过度压缩。如果Perform()返回 false通常是形状本身有问题比如 STEP 导入时出现了退化面需要用ShapeFix_Shape修复。性能上每次调用BRepExtrema_DistShapeShape都要做一次完整的距离计算对于复杂工件可能耗时几十毫秒。实际系统里会先用包围盒做粗筛只有包围盒相交的连杆才做精确距离计算。包围盒用Bnd_Box和BRepBndLib::Add生成粗筛能把检测次数降低一个数量级。4.2 RRT 路径规划从随机采样到轨迹平滑RRT 的核心是在关节空间里随机采样逐步扩展一棵搜索树直到找到从起点到终点的可行路径。下面是一个简化但可运行的 RRT 实现规划空间是六维关节空间。// RRT 节点 struct RRTNode { std::vectordouble joints; // 六个关节角单位弧度 int parent; }; // 在关节限位内随机采样 std::vectordouble RandomSample(const std::vectorstd::pairdouble,double limits) { std::vectordouble sample(6); for (int i 0; i 6; i) { double lo limits[i].first, hi limits[i].second; sample[i] lo (hi - lo) * (rand() / (double)RAND_MAX); } return sample; } // 向目标方向扩展一步 std::vectordouble Steer(const std::vectordouble from, const std::vectordouble to, double stepSize) { std::vectordouble dir(6); double norm 0; for (int i 0; i 6; i) { dir[i] to[i] - from[i]; norm dir[i] * dir[i]; } norm sqrt(norm); if (norm stepSize) return to; std::vectordouble next(6); for (int i 0; i 6; i) next[i] from[i] dir[i] / norm * stepSize; return next; } // RRT 主循环 std::vectorstd::vectordouble RRTPlan( const std::vectordouble start, const std::vectordouble goal, const std::vectorstd::pairdouble,double limits, int maxIter, double stepSize) { std::vectorRRTNode tree; tree.push_back({start, -1}); for (int iter 0; iter maxIter; iter) { auto sample RandomSample(limits); // 找最近节点 int nearest 0; double minDist 1e9; for (size_t i 0; i tree.size(); i) { double d 0; for (int j 0; j 6; j) { double diff tree[i].joints[j] - sample[j]; d diff * diff; } if (d minDist) { minDist d; nearest i; } } auto newNode Steer(tree[nearest].joints, sample, stepSize); // 碰撞检测把关节角转成连杆形状后检测 if (!IsJointConfigCollisionFree(newNode)) continue; tree.push_back({newNode, nearest}); // 检查是否到达目标 double dGoal 0; for (int j 0; j 6; j) { double diff newNode[j] - goal[j]; dGoal diff * diff; } if (sqrt(dGoal) stepSize) { // 回溯路径 std::vectorstd::vectordouble path; int idx tree.size() - 1; while (idx ! -1) { path.push_back(tree[idx].joints); idx tree[idx].parent; } std::reverse(path.begin(), path.end()); path.push_back(goal); return path; } } return {}; // 规划失败 }这段代码里maxIter一般设 5000 到 20000stepSize设 0.05 到 0.1 弧度。IsJointConfigCollisionFree需要把关节角代入正运动学生成每个连杆的 TopoDS_Shape再调用前面的碰撞检测函数。RRT 的缺点是路径随机性大、不平滑实际用的时候会在后面接一个轨迹优化比如用 B 样条拟合或者做短距离的随机优化。双向 RRT 是常见的改进方向从起点和终点同时生长两棵树相遇时拼接路径收敛速度比单向快不少。如果规划环境里障碍物密集还可以加目标偏置采样以一定概率直接采样终点附近加速收敛。提示RRT 规划出来的路径在关节空间里是折线直接下发到控制器会导致每个路径点都停顿。实际系统里会用Geom_BSplineCurve对关节轨迹做拟合或者用时间最优的梯形速度规划生成连续轨迹。5. TCP/IP 通讯与真机控制避坑与排查清单5.1 与 ABB 和 ROKAE 控制器通讯的协议差异ABB 机器人控制器支持 TCP/IP 上的多种协议常见的是基于 socket 的字符串指令或者用 ABB 的 PC SDK。ROKAE 的控制器通常提供类似的 socket 接口但指令格式和端口号不同。实际做法是抽象一个通讯接口把协议差异封装在底层。// 通讯接口抽象 class RobotCommInterface { public: virtual bool Connect(const std::string ip, int port) 0; virtual bool SendJointTarget(const std::vectordouble joints) 0; virtual bool SendCartesianTarget(double x, double y, double z, double rx, double ry, double rz) 0; virtual void Disconnect() 0; virtual ~RobotCommInterface() default; }; // ABB 实现通过 socket 发送字符串指令 class ABBComm : public RobotCommInterface { int m_sock -1; public: bool Connect(const std::string ip, int port) override { m_sock socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr{}; addr.sin_family AF_INET; addr.sin_port htons(port); inet_pton(AF_INET, ip.c_str(), addr.sin_addr); return connect(m_sock, (sockaddr*)addr, sizeof(addr)) 0; } bool SendJointTarget(const std::vectordouble joints) override { char buf[256]; snprintf(buf, sizeof(buf), MoveAbsJ %.4f,%.4f,%.4f,%.4f,%.4f,%.4f\n, joints[0], joints[1], joints[2], joints[3], joints[4], joints[5]); return send(m_sock, buf, strlen(buf), 0) 0; } // ... 其他方法 };ABB 的MoveAbsJ指令接收六个关节角单位是度。ROKAE 的指令格式可能是 JSON 或者自定义二进制协议需要查对应型号的通讯手册。关键点是仿真里算出来的关节角是弧度下发前必须转成度而且要考虑关节零位偏移。5.2 通讯延迟与轨迹下发的节奏控制真机控制最容易被忽视的是通讯延迟。仿真里路径规划出来几百个点如果一次性全发下去控制器缓冲区可能溢出或者因为网络延迟导致动作不连贯。实际做法是维护一个发送队列根据控制器的缓冲深度和网络往返时间动态调整发送速率。问题现象可能原因排查方法连接超时IP 或端口错误防火墙拦截先用 telnet 测端口连通性指令无响应控制器未使能或处于手动模式检查示教器状态和使能信号动作抖动发送频率过高缓冲区溢出降低发送频率加确认机制位置偏差关节角单位错误或零位偏移对比仿真和示教器读数连接断开心跳超时控制器主动断开加定时心跳包间隔小于超时时间注意真机调试时一定要先低速、单步运行确认每个路径点的姿态正确后再切自动模式。我见过太多因为跳过单步验证直接跑自动导致撞机的案例修一次撞坏的夹具够买好几台示教器。6. 让仿真结果可信验证方法与一个实用技巧仿真系统做完之后怎么确认它算出来的结果和真机一致我一般用三步验证法。第一步在仿真里把机器人移动到几个已知关节角记录 TCP 位置然后在真机示教器上输入同样的关节角对比 TCP 读数。误差在 1 毫米以内说明 DH 模型和 TCP 标定没问题。第二步规划一条简单的直线轨迹仿真里看末端走的是不是直线真机上低速跑一遍用百分表打末端偏移。第三步跑一个带避障的 RRT 路径仿真里确认无碰撞真机上先空跑一遍确认姿态没有奇异。一个实用技巧是在仿真系统里加一个「轨迹回放」功能把真机实际走过的关节角录下来导入仿真里和规划轨迹叠在一起显示。这样一眼就能看出哪里偏差大、哪里速度规划不合理。实现上就是把真机录制的关节角序列存成 CSV仿真里读进来生成一条Geom_BSplineCurve用不同颜色显示。// 读取真机录制的关节角 CSV生成对比曲线 void LoadRecordedTrajectory(const std::string csvPath, const Handle(AIS_InteractiveContext) context) { std::ifstream file(csvPath); std::string line; TColgp_Array1OfPnt points(1, 1000); // 假设最多 1000 个点 int idx 1; while (std::getline(file, line) idx 1000) { std::stringstream ss(line); std::string val; std::vectordouble joints; while (std::getline(ss, val, ,)) joints.push_back(std::stod(val)); // 正运动学算 TCP 位置 gp_Pnt tcp ForwardKinematics(joints); points.SetValue(idx, tcp); } // 用 B 样条拟合 Handle(Geom_BSplineCurve) curve GeomAPI_PointsToBSpline(points).Curve(); Handle(AIS_Shape) aisCurve new AIS_Shape( BRepBuilderAPI_MakeEdge(curve).Edge()); context-Display(aisCurve, Standard_False); context-UpdateCurrentViewer(); }这个回放对比的习惯帮我省了很多后悔药。有一次规划出来的路径在仿真里看着没问题回放真机数据才发现 J4 轴在某个区间来回抖动原因是 RRT 路径在那个位置有密集的折返点控制器插补时产生了振荡。后来在轨迹后处理里加了滑动平均滤波问题就消失了。这套系统从 Qt 界面到 OpenCASCADE 几何处理再到 RRT 规划和 TCP/IP 通讯每一层都有各自的坑。我的习惯是每加一个新功能先在仿真里用已知结果验证再上真机低速跑确认无误后才放开速度。工业机器人这东西谨慎永远不亏。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

机修钳工职业技能鉴定题库,初中高级考点全解析附答案

机修钳工职业技能鉴定题库,初中高级考点全解析附答案

机修钳工职业技能鉴定,考的是实打实的手上功夫和判断能力。不少考生跟我们反馈:理论题背了不少,实操也练了,可一进考场还是心里没底。问题往往不在努力程度,而在刷题方向——初、中、高三个等级考什么、怎么考、易错点…

📅 2026/10/31 0:51:57
工业控制系统深度解析:30 执行器为什么让PID失效

工业控制系统深度解析:30 执行器为什么让PID失效

第30章 执行器为什么让PID失效 30.1 PID控制的最后一公里 前面章节一直围绕PID如何计算控制量。完整模型: SP → Error → PID → MV → Process → PV → Feedback理论上,PID计算出MV(例如MV=60%),控制器认为“我已经输出60%的控制作用”。但工业现场还有一个关键问题…

📅 2026/10/31 0:51:57
verl RL-Insight:如何实时监控大规模强化学习训练状态与高效调试

verl RL-Insight:如何实时监控大规模强化学习训练状态与高效调试

【免费下载链接】verl verl/HybridFlow: A Flexible and Efficient RL Post-Training Framework 项目地址: https://gitcode.com/gh_mirrors/verl2/verl 点击查看 免费下载 verl RL-Insight 是 verl 官方推出的强化学习训练实时监控工具,它把训练器标量…

📅 2026/10/31 0:46:57
MORE NEWS

更多资讯

📰

告别手写前端:Infinite Monitor自然语言生成Widget的5大核心场景与上手教程

【免费下载链接】infinite-monitor Monitor anything in real time 项目地址: https://gitcode.com/gh_mirrors/in/infinite-monitor 点击查看 免费下载 Infinite Monitor 是一款 AI 驱动的仪表盘构建工具:用自然语言描述你想要的 Widget,AI…

📰

10分钟跑通Polymarket Copy Trading Bot:新手快速开始指南(钱包+USDC+MongoDB全配置)

【免费下载链接】polymarket-copy-trading-bot 项目地址: https://gitcode.com/gh_mirrors/mar/polymarket-copy-trading-bot 点击查看 免费下载 本文带你 10 分钟从零跑通 Polymarket Copy Trading Bot(Polymarket 跟单机器人):…

📰

Sealos 集群部署与应用交付实战指南:一条命令拉起 K8s,再十分钟上线一个应用

Sealos 集群部署与应用交付实战指南:一条命令拉起 K8s,再十分钟上线一个应用 【免费下载链接】Sealos 以应用为中心的智能云操作系统 项目地址: https://gitcode.com/labring/Sealos 搭建一个能跑业务的 Kubernetes 集群,传统做法是把…

📰

Dolphin模拟器RVZ压缩指南:3步为存储优化省下空间

Dolphin模拟器RVZ压缩指南:3步为存储优化省下空间 【免费下载链接】dolphin Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements. 项目地址: https://gitcode.com/GitHub_Trending/do/dolphin …

📰

Win11Debloat:十分钟精简 Windows 11,每项改动都能一键退回

Win11Debloat:十分钟精简 Windows 11,每项改动都能一键退回 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to …

📰

从方差性质到不确定度传播律:不确定度就是求标准差!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬