ReBot 内部手册
机器人与仿真

RSReBot MuJoCo 轨迹控制复现

使用 DeDeUrdf 导出的 RSReBot 模型,在 MuJoCo 中补齐控制参数、执行位置控制轨迹并录制视频。

查看 MDXGitHub 源文件

目标

这一页说明如何把 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.zipDeDeUrdf 可继续编辑项目下载
RSReBot.f3zFusion 360 原始项目归档下载
RSReBot.step通用 CAD 交换格式下载

示例效果:

RSReBot 轨迹控制截图

控制策略概览

当前示例使用的是 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.stl

RSReBot_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-dirbuild/rsrebot-assets输出目录
--base-urlhttps://dedeurdf.vercel.app/examples/rsrebot-mujoco示例资产 URL
--zip-nameRSReBot_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 的力矩范围
actuator6 个 position actuator 的 kp/kv/ctrlrange/forcerange

它不会自动推导真实惯量。如果你的实物机械臂和 DMReBot 不完全一致,应在 CAD 或实测后替换这些参数。

run_rsrebot_control_demo.py

这个脚本负责生成轨迹、写入 data.ctrl、推进 MuJoCo 仿真并录制视频。

关键参数:

参数默认值说明
--motionall-joints-lift-extend-return轨迹类型
--duration16轨迹总时长,单位秒
--dt0.04控制目标更新间隔
--demo-controldamped为视频演示生成无重力/阻尼版本
--record-video关闭打开后输出 MP4
--width960渲染宽度
--height720渲染高度

--demo-control damped 会生成一个视频演示用 XML:

RSReBot_fluxweave_dm_control_video_damped.xml

它会把重力设为 0 0 0,并给关节加一点 damping。这样做是为了让演示视频更稳定、更容易看清楚轨迹。真实动力学评估时,应回到原始 RSReBot_fluxweave_dm_control.xml,并使用正确质量、惯量、重力和控制器参数。

当前 MuJoCo 控制 XML 参数

示例 XML 中的位置执行器:

actuatorjointkpkvctrlrangeforcerange
joint1_positionjoint115024-2.8 2.8-180 180
joint2_positionjoint218028-3.14 0-220 220
joint3_positionjoint316024-3.14 0-180 180
joint4_positionjoint48012-1.87 1.57-90 90
joint5_positionjoint57010-1.57 1.57-80 80
joint6_positionjoint6608-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 foundZIP 不是 DeDeUrdf MuJoCo ZIP,或结构不对确认 ZIP 内有 urdf/*.urdf
missing meshZIP 里缺 STL,或文件名不一致确认 meshes/base.stlmeshes/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

On this page