机器人URDF碰撞模型优化:自动将STL Mesh Collision转换为Box Collision(支持MuJoCo/Gazebo/Isaac Lab)

在使用 ROS、Gazebo、MuJoCo、Isaac Lab进行机器人仿真时,经常会遇到一个问题:
机器人模型能够正常导入,但是仿真速度比较慢。
尤其是从 SolidWorks、Creo 等CAD软件导出的机器人URDF模型,很多情况下会直接使用STL作为Collision模型。
例如:
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<mesh filename="Link_1.STL"/>
</geometry>
</collision>
视觉模型使用高精度STL没有问题,但是如果Collision也直接使用高面数STL,在物理仿真过程中可能增加碰撞检测的计算量。
一、URDF中的Visual和Collision有什么区别?
一个典型的机器人Link通常包含:
<link name="Link_1">
<visual>
...
</visual>
<collision>
...
</collision>
<inertial>
...
</inertial>
</link>
简单理解:
Visual:
负责“看起来是什么样”。
Collision:
负责“物理上碰到哪里”。
Inertial:
负责质量、质心和惯量。
因此:
Visual不一定需要简化,但是Collision通常没有必要使用非常高精度的CAD网格。
二、为什么STL Collision可能影响仿真?
例如一个机械臂Link:
Visual
└── 高精度STL
└── 数万三角面
如果Collision也使用同一个STL:
Collision
└── 高精度STL
└── 数万三角面
物理引擎需要不断进行碰撞检测。
尤其在强化学习中:
机器人
↓
MuJoCo
↓
数十万~数百万Simulation Steps
↓
大量碰撞检测
Collision模型越复杂,计算负担通常越大。
因此机器人仿真中经常会对Collision模型进行简化。
三、最简单的优化方法:Box Collision
例如原来的Collision:
<collision>
<geometry>
<mesh filename="Link_1.STL"/>
</geometry>
</collision>
可以替换成:
<collision>
<origin xyz="0.02 0.01 0.05" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.05 0.2"/>
</geometry>
</collision>
原来的:
STL Mesh
↓
大量三角面
变成:
Box
↓
简单几何体
这样可以显著降低Collision几何复杂度。
四、但是手动修改URDF比较麻烦
假设一个机器人有:
base_link
Link_1
Link_2
Link_3
...
Link_20
如果每个Link都需要手动:
- 找到对应STL
- 查看STL尺寸
- 计算中心位置
- 设置Collision origin
- 设置Box尺寸
- 修改URDF
处理几十个Link会比较麻烦。
因此我自己做了一个小工具:
URDF Collision Box自动生成工具
基本工作流程:
URDF
│
↓
解析Link
│
↓
自动寻找STL
│
↓
Trimesh读取STL
│
↓
计算几何包围盒
│
┌───────┴───────┐
↓ ↓
中心坐标 尺寸
│ │
└───────┬───────┘
↓
自动生成Box
│
↓
输出新的URDF
五、软件目前可以做什么?
目前主要实现:
1. 自动读取URDF
选择:
robot.urdf
程序自动解析Link。
2. 自动识别STL
例如:
<mesh filename="Link_3.STL"/>
自动找到:
meshes/Link_3.STL
3. 自动计算STL包围盒
通过Python trimesh读取STL。
计算:
Bounding Box
得到:
中心坐标
X/Y/Z尺寸
4. 自动生成Collision Box
例如:
<collision>
<origin xyz="0.025 -0.037 0.01" rpy="0 0 0"/>
<geometry>
<box size="0.08 0.04 0.12"/>
</geometry>
</collision>
5. 自动替换原Collision
原来:
<collision>
<geometry>
<mesh filename="Link_3.STL"/>
</geometry>
</collision>
自动替换成:
<collision>
<origin xyz="..."/>
<geometry>
<box size="..."/>
</geometry>
</collision>
同时不会修改:
Visual
Inertial
Joint
等其他模型信息。
六、适合哪些机器人仿真平台?
目前主要针对:
ROS
│
├── Gazebo
│
├── MuJoCo
│
└── Isaac Lab / Isaac Sim
特别是进行机器人强化学习训练时,可以先对Collision进行简化。
例如:
CAD模型
↓
URDF
↓
Collision优化
↓
MuJoCo
↓
强化学习
或者:
CAD模型
↓
URDF
↓
Collision优化
↓
Isaac Lab
↓
机器人强化学习
七、Box Collision并不是所有模型都适合
需要注意:
Box只是最简单的一种碰撞模型。
例如:
机械臂大臂
使用Box通常比较合适。
但是对于:
复杂夹爪
复杂轮毂
不规则机械结构
单个Box可能会造成比较大的几何误差。
因此更高级的方法是:
STL
↓
Convex Hull
↓
多个凸包
或者:
STL
↓
VHACD
↓
多个Convex Hull
↓
Collision
后续计划继续增加:
- Convex Hull自动生成
- VHACD自动凸分解
- 多Box自动生成
- URDF批量处理
- URDF → MuJoCo XML
- URDF → Isaac模型
八、Windows直接运行
目前提供Windows版本。
不需要安装:
Python
ROS
MuJoCo
Gazebo
也不需要配置Python环境。
基本使用流程:
① 选择URDF
② 选择Mesh/STL目录
③ 点击生成
④ 获得优化后的URDF
例如:
Jibot3.urdf
↓
URDF Collision优化
↓
Jibot3_box_collision.urdf
九、适合哪些人?
主要适合:
- ROS开发者
- MuJoCo用户
- Isaac Lab用户
- 机器人强化学习研究人员
- 机械臂仿真开发人员
- 移动机器人开发人员
- 四足机器人开发人员
- 高校机器人实验室
- 机器人数字孪生开发人员
十、工具获取
目前提供Windows版本。
如果你在做:
ROS / URDF / MuJoCo / Isaac Lab机器人仿真
,并且需要批量简化Collision模型,可以尝试这个工具。
工具获取:
👉 【工具地址】
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)