RSReBot MuJoCo 轨迹控制复现
使用 DeDeUrdf 导出的 RSReBot 模型,在 MuJoCo 中补齐控制参数、执行位置控制轨迹并录制视频。
目标
这一页说明如何把 DeDeUrdf 导出的 RSReBot MuJoCo URDF ZIP,转成可执行位置控制的 MuJoCo 模型,并跑一个“抬起、伸展到较远、再回到初始位”的六关节轨迹。
RSReBot 控制示例推荐直接使用这个 MuJoCo URDF ZIP:
| 文件 | 用途 | 下载 |
|---|---|---|
RSReBot_fluxweave_dm_mujoco_urdf.zip | 包含 urdf/ 和 meshes/,可用于生成 MuJoCo 控制 XML 并跑轨迹 | 下载 |
如果要回到 DeDeUrdf 或 CAD 检查模型来源,可以下载完整资产:
| 文件 | 用途 | 下载 |
|---|---|---|
RSReBot_accurate_web_project.zip | DeDeUrdf 可继续编辑项目 | 下载 |
RSReBot.f3z | Fusion 360 原始项目归档 | 下载 |
RSReBot.step | 通用 CAD 交换格式 | 下载 |
示例效果:

控制策略概览
当前示例使用的是 MuJoCo 的位置控制模式:
<actuator>
<position name="joint1_position" joint="joint1" kp="150" kv="24" ctrlrange="-2.8 2.8" forcerange="-180 180" />
...
</actuator>轨迹脚本每隔固定时间给 data.ctrl 写入一个目标关节角:
data.ctrl[:6] = q_target
mujoco.mj_step(model, data)MuJoCo 的 position actuator 会根据当前关节角和目标关节角之间的误差产生力矩,让关节跟踪目标。
这里不是逆运动学,也不是笛卡尔空间控制,而是关节空间位置控制:
| 层级 | 当前示例是否包含 |
|---|---|
| 关节空间轨迹 | 包含 |
| 最小加加速度插值 | 包含 |
| 位置执行器 | 包含 |
| 惯量和关节限位 | 从 DMReBot 参考模型补齐 |
| 逆运动学 | 不包含 |
| 碰撞接触控制 | 示例里关闭接触 |
| 真实电机通信 | 不包含 |
为什么所有电机会同时到达
脚本不是让某个电机先动完再动下一个,而是给每个关节都生成同样时间长度的轨迹。
例如一个 16 秒轨迹,joint1 到 joint6 都会在 0 秒、3.2 秒、6.4 秒、9.6 秒、12.8 秒、16 秒这些时间点经过各自的 waypoint。
每个关节的角度变化量可以不同,但归一化进度相同:
第 0 秒:所有关节在起点
第 8 秒:所有关节都完成 50% 的插值进度
第 16 秒:所有关节都到终点插值函数使用 minimum jerk:
s(t) = 10t^3 - 15t^4 + 6t^5这个函数在段首和段尾速度、加速度都比较平滑,适合做演示轨迹。
运行环境
建议 Python 3.10 或更新版本。
安装依赖:
python -m pip install mujoco numpy imageio[ffmpeg]如果你使用 uv:
uv venv
source .venv/bin/activate
uv pip install mujoco numpy imageio[ffmpeg]第 1 步:下载 RSReBot 示例资产
在 ReBotMono 仓库根目录执行:
python examples/rsrebot-mujoco-control/scripts/download_rsrebot_assets.py \
--output-dir build/rsrebot-assets输出:
build/rsrebot-assets/
RSReBot_fluxweave_dm_mujoco_urdf.zip
source/
project.fluxweave.json
urdf/RSReBot_fluxweave_dm_mujoco.urdf
meshes/base.stl
meshes/link1.stl
...如果你已经有网页端导出的 ZIP,例如 ~/Downloads/RSReBot_fluxweave_dm_mujoco_urdf.zip,可以跳过下载脚本,后续直接把 --source-zip 指到自己的 ZIP。也可以直接下载公开 MuJoCo ZIP:
mkdir -p build/rsrebot-assets
curl -L -o build/rsrebot-assets/RSReBot_fluxweave_dm_mujoco_urdf.zip \
https://pub-6c1e280a27614b05891bfd818585735e.r2.dev/RSReBot/RSReBot_fluxweave_dm_mujoco_urdf.zip第 2 步:生成 MuJoCo 控制模型
执行:
python examples/rsrebot-mujoco-control/scripts/build_rsrebot_control_model.py \
--source-zip build/rsrebot-assets/RSReBot_fluxweave_dm_mujoco_urdf.zip \
--output-dir build/rsrebot-mujoco-control生成结果:
build/rsrebot-mujoco-control/
RSReBot_fluxweave_dm_control.xml
RSReBot_fluxweave_dm_control.mjb
urdf/
RSReBot_fluxweave_dm_mujoco.urdf
meshes/
base.stl
link1.stl
link2.stl
link3.stl
link4.stl
link5.stl
link6.stl
end.stlRSReBot_fluxweave_dm_control.xml 是后续控制脚本真正加载的模型。
第 3 步:跑轨迹并录视频
执行:
python examples/rsrebot-mujoco-control/scripts/run_rsrebot_control_demo.py \
--source-zip build/rsrebot-assets/RSReBot_fluxweave_dm_mujoco_urdf.zip \
--output-dir build/rsrebot-mujoco-control \
--motion all-joints-lift-extend-return \
--duration 16 \
--dt 0.04 \
--record-video输出:
build/rsrebot-mujoco-control/
RSReBot_all-joints-lift-extend-return.png
RSReBot_all-joints-lift-extend-return.mp4脚本会打印类似信息:
RSReBot MuJoCo trajectory demo
model: .../RSReBot_fluxweave_dm_control_video_damped.xml
motion: all-joints-lift-extend-return
samples: 401
time range: 0.000s -> 16.000s
final q target: [0.0, -0.66, -0.92, 0.18, 0.04, 0.0]
final qpos: [...]
final tracking error: ... rad
max tracking error: ... rad
render: .../RSReBot_all-joints-lift-extend-return.png
video: .../RSReBot_all-joints-lift-extend-return.mp4可选轨迹
脚本内置三种轨迹:
--motion | 效果 |
|---|---|
all-joints-lift-extend-return | 推荐演示,六个关节都会动,抬起、伸展、返回 |
lift-extend-return | 小范围抬起、伸展、返回,主要动肩肘 |
wide | 较大范围扫动,适合检查关节限位和模型稳定性 |
如果想做更小幅度轨迹,可以编辑 run_rsrebot_control_demo.py 里的 waypoint 数组,把每个关节角变化量减小。
关键脚本说明
download_rsrebot_assets.py
这个脚本从 DeDeUrdf 线上示例下载项目 JSON 和 STL,并重新打包成 MuJoCo URDF ZIP。
常用参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--output-dir | build/rsrebot-assets | 输出目录 |
--base-url | https://dedeurdf.vercel.app/examples/rsrebot-mujoco | 示例资产 URL |
--zip-name | RSReBot_fluxweave_dm_mujoco_urdf.zip | 输出 ZIP 文件名 |
build_rsrebot_control_model.py
这个脚本把 DeDeUrdf ZIP 转成 MuJoCo 控制 XML。
它会从 reference/reBot-DevArm_fixend_control.xml 复制这些参数:
| 参数 | 说明 |
|---|---|
| inertial | 每个 body 的质量、质心和惯量 |
| joint range | 每个 joint 的运动范围 |
| actuatorfrcrange | 每个 joint 的力矩范围 |
| actuator | 6 个 position actuator 的 kp/kv/ctrlrange/forcerange |
它不会自动推导真实惯量。如果你的实物机械臂和 DMReBot 不完全一致,应在 CAD 或实测后替换这些参数。
run_rsrebot_control_demo.py
这个脚本负责生成轨迹、写入 data.ctrl、推进 MuJoCo 仿真并录制视频。
关键参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--motion | all-joints-lift-extend-return | 轨迹类型 |
--duration | 16 | 轨迹总时长,单位秒 |
--dt | 0.04 | 控制目标更新间隔 |
--demo-control | damped | 为视频演示生成无重力/阻尼版本 |
--record-video | 关闭 | 打开后输出 MP4 |
--width | 960 | 渲染宽度 |
--height | 720 | 渲染高度 |
--demo-control damped 会生成一个视频演示用 XML:
RSReBot_fluxweave_dm_control_video_damped.xml它会把重力设为 0 0 0,并给关节加一点 damping。这样做是为了让演示视频更稳定、更容易看清楚轨迹。真实动力学评估时,应回到原始 RSReBot_fluxweave_dm_control.xml,并使用正确质量、惯量、重力和控制器参数。
当前 MuJoCo 控制 XML 参数
示例 XML 中的位置执行器:
| actuator | joint | kp | kv | ctrlrange | forcerange |
|---|---|---|---|---|---|
joint1_position | joint1 | 150 | 24 | -2.8 2.8 | -180 180 |
joint2_position | joint2 | 180 | 28 | -3.14 0 | -220 220 |
joint3_position | joint3 | 160 | 24 | -3.14 0 | -180 180 |
joint4_position | joint4 | 80 | 12 | -1.87 1.57 | -90 90 |
joint5_position | joint5 | 70 | 10 | -1.57 1.57 | -80 80 |
joint6_position | joint6 | 60 | 8 | -3.14 3.14 | -70 70 |
这些参数是演示级位置控制参数,用于让仿真模型能稳定跟踪关节角。它们不是实机电机参数。
和 reBotArm_control_py 的关系
之前 vectorBH6/reBotArm_control_py 项目里的控制逻辑,本质上也是给多个关节同时规划目标位置,让每个电机在同一个总时长内走完自己的角度变化。
本仓库这个 MuJoCo 示例做了一个简化版:
| 对比项 | reBotArm_control_py | 本示例 |
|---|---|---|
| 控制对象 | 实机/SDK 或项目里的机械臂控制接口 | MuJoCo 仿真模型 |
| 控制模式 | 位置目标为主 | MuJoCo position actuator |
| 同步方式 | 同一时间轴内插值 | 同一时间轴内 minimum jerk 插值 |
| 反馈 | 取决于 SDK/硬件接口 | MuJoCo qpos |
| 输出 | 实机运动或项目可视化 | PNG/MP4/仿真状态 |
因此,它适合作为“URDF 是否正确、关节方向是否正确、基本控制是否能跑”的验证环节。
给 Codex 的复制任务块
下面这段可以直接复制给 Codex,让它自动完成下载、生成、仿真和结果汇报。
请在 ReBotMono 仓库根目录复现 RSReBot MuJoCo 轨迹控制:
1. 确认当前目录是 ReBotMono。
2. 安装依赖:`python -m pip install mujoco numpy imageio[ffmpeg]`。
3. 下载公开 MuJoCo URDF ZIP:
`mkdir -p build/rsrebot-assets && curl -L -o build/rsrebot-assets/RSReBot_fluxweave_dm_mujoco_urdf.zip https://pub-6c1e280a27614b05891bfd818585735e.r2.dev/RSReBot/RSReBot_fluxweave_dm_mujoco_urdf.zip`
4. 生成控制模型:
`python examples/rsrebot-mujoco-control/scripts/build_rsrebot_control_model.py --source-zip build/rsrebot-assets/RSReBot_fluxweave_dm_mujoco_urdf.zip --output-dir build/rsrebot-mujoco-control`
5. 跑轨迹并录视频:
`python examples/rsrebot-mujoco-control/scripts/run_rsrebot_control_demo.py --source-zip build/rsrebot-assets/RSReBot_fluxweave_dm_mujoco_urdf.zip --output-dir build/rsrebot-mujoco-control --motion all-joints-lift-extend-return --duration 16 --dt 0.04 --record-video`
6. 汇报生成的 XML、MJB、PNG、MP4 路径。
7. 汇报最终 `final tracking error` 和 `max tracking error`。
8. 如果有报错,不要跳过,把完整报错贴出来,并先检查 mesh 路径、STL 是否下载完整、MuJoCo 是否安装成功。排错
| 报错或现象 | 常见原因 | 处理方式 |
|---|---|---|
Missing dependency: install MuJoCo | 没安装 mujoco Python 包 | 运行 python -m pip install mujoco |
No URDF file found | ZIP 不是 DeDeUrdf MuJoCo ZIP,或结构不对 | 确认 ZIP 内有 urdf/*.urdf |
missing mesh | ZIP 里缺 STL,或文件名不一致 | 确认 meshes/base.stl 到 meshes/end.stl 都存在 |
| MuJoCo mesh 加载失败 | STL 编码或 mesh 路径问题 | 使用 build_rsrebot_control_model.py 重新整理和转换 |
| 视频无法写出 | 缺少 imageio[ffmpeg] | 运行 python -m pip install imageio[ffmpeg] |
| 模型突然散开 | 关节原点、rpy 或 axis 错误 | 回 DeDeUrdf 和 CAD 检查相邻坐标系 |
| 跟踪误差很大 | kp/kv、惯量、重力或轨迹过快 | 减小轨迹幅度、增加时长、调大阻尼或重新调 actuator |