主要参考:https://github.com/jpata/gym-so100/tree/integration/gym_so100/assets/trs_so_arm100
参考:(八)lerobot开源项目扩展so100的仿真操控(操作记录)_so100机械臂 仿真-CSDN博客
下载:lerobot_so100_sim: lerobot_so100_sim - Gitee.com背景
URDF是Unified Robot Description Format,主要用于ROS中描述机器人的结构、关节、连杆、传感器等。
MJCF是MuJoCo(Multi-Joint dynamics with Contact)的模型格式,用于物理仿真,更注重动力学和接触计算。
so100模型来源(在solidword画好后导出):https://github.com/TheRobotStudio/SO-ARM100/blob/4e9c5588d8a8415b6a6c2142a0ce8c32207cf3e9/URDF/SO_5DOF_ARM100_8j_URDF.SLDASM/urdf/SO_5DOF_ARM100_8j_URDF.SLDASM.urdf
下载so100的xml,并拖入MuJoCo
git clone https://gitee.com/mrqiguan/lerobot_so100_sim.git
调节右侧的参数可以动
完整界面
为什么不能直接将 URDF 导入 MuJoCo?
虽然 MuJoCo 支持导入 URDF,但 URDF 格式与 MuJoCo 的仿真需求存在显著差异,直接导入可能导致以下问题:
-
视觉与碰撞模型分离
URDF 的<visual>
和<collision>
标签通常使用不同的几何体(例如高精度网格与简化凸包)。MuJoCo 默认会丢弃<visual>
几何体(通过discardvisual="true"
),导致模型不可见。因此需要通过<compiler discardvisual="false">
显式保留视觉模型。 -
物理参数缺失
URDF 缺乏对摩擦、执行器动态特性(如impratio
、cone="elliptic"
)等仿真关键参数的描述,这些需手动添加以确保逼真的物理交互。 -
碰撞优化不足
URDF 的碰撞模型可能过于复杂或缺少必要优化。例如:- 需要手动提取 凸包碰撞网格(如夹爪的凸包化)以提高计算效率。
- 添加 额外碰撞几何体(如夹爪的辅助碰撞盒)以增强接触检测。
-
关节与执行器配置
URDF 不定义关节的阻尼、执行器控制模式(如位置/速度控制)等,需在 MJCF 中通过<default>
和<actuator>
明确指定。 -
模型层级与命名冲突
URDF 的复杂嵌套结构可能导致 MuJoCo 解析时的路径错误(例如材质或网格引用失效),需通过strippath="false"
保留完整路径。
转换步骤的必要性
-
保留视觉模型
<mujoco><compiler discardvisual="false" strippath="false"/></mujoco>
强制保留视觉网格,避免模型在仿真中不可见。
-
统一默认属性
将重复的材质、关节属性提取到<default>
中,简化模型并确保一致性。 -
优化碰撞模型
- 将伺服电机网格分离为独立文件,减少内存占用。
- 为夹爪创建 凸包碰撞网格(例如
gripper_collision.stl
),替代原始非凸网格以加速碰撞检测。
-
增强物理交互
- 添加
impratio="10"
提高接触力的各向异性,模拟非弹性碰撞。 - 使用
cone="elliptic"
替代默认的圆锥摩擦模型,更贴近真实摩擦行为。
- 添加
-
避免自碰撞干扰
通过<exclude>
阻止基座(Base
)与俯仰关节(Rotation_Pitch
)的错误接触检测。 -
执行器与控制
添加<position>
执行器并设置kp
(刚度系数),使关节能响应位置控制指令。
总结
URDF 是面向机器人描述的标准格式,而 MJCF 是专为物理仿真优化的格式。直接导入 URDF 可能导致模型在 MuJoCo 中表现异常(如穿透、抖动、控制失效)。通过上述转换步骤,可确保:
- 视觉与碰撞模型的完整性
- 物理参数符合仿真需求
- 计算效率与稳定性提升
最终生成的 MJCF 模型在 MuJoCo 中能实现逼真的动态行为,而未经处理的 URDF 可能仅适用于可视化,无法满足仿真精度要求。