RMPflow 运动生成扩展
2026/1/3大约 2 分钟
Isaac Sim 扩展架构学习笔记
—— 以 RMPflow 运动生成扩展为例
核心概念
Isaac Sim 扩展通常采用**“双心驱动”**架构:
scenario.py:机械臂的大脑。负责算法逻辑、物理计算与运动策略生成。ui_builder.py:机械臂的操作面板。负责按钮交互、场景搭建逻辑与用户反馈。
scenario.py:运动生成大脑
实现 RMPflow 算法,生成平滑轨迹并处理动态避障。
1. 资源初始化 (load_example_assets)
- 机器人加载:从 Nucleus 服务器引入机器人 USD 模型,封装为
Articulation对象。 - 目标物 (Target):定义末端执行器(End Effector)需要跟随的视觉参考点。
- 障碍物 (Obstacle):创建
FixedCuboid(方块)等几何体,作为算法避障的输入。
2. 控制逻辑配置 (setup)
- RMPflow 实例化:加载 Lula 描述文件(包含机器人运动学信息)。
- 碰撞感知:调用
add_obstacle()将场景中的物体注册到算法中。 - 转换层:使用
ArticulationMotionPolicy将算法生成的位姿动作转化为物理引擎的关节指令。
3. 每帧更新循环 (update)
- 实时跟踪:每一帧读取目标位置并传递给 RmpFlow。
- 环境同步:调用
update_world()。若障碍物移动,算法会自动重新规划。 - 驱动执行:获取计算出的关节角度,通过
apply_action驱动物理模型。
ui_builder.py:交互设计逻辑
负责 Isaac Sim 右侧面板的 UI 生成,并将用户点击转化为逻辑指令。
1. 生命周期与场景管理
- 初始化:在扩展加载时创建
Scenario实例。 - 场景监听:监控 Stage 事件(如新建文件),确保 UI 状态与场景内容同步。
2. 功能按钮链条
LOAD加载按钮:负责创建新 Stage、设置光照/相机,并调用scenario加载资产。RUN/STOP状态按钮:- 点击 RUN:启动时间线,订阅物理步回调,开始调用算法更新。
- 点击 STOP:暂停时间线,切断算法指令流。
