机器人开发中,运动规划与控制始终是核心难题。MoveIt 作为集成了运动规划、操纵、3D感知、运动学、控制和导航最新技术的平台,已成为行业标配。而 PickNik Robotics 作为 MoveIt 的主要维护者,正在探索将其与 NVIDIA Isaac Sim 结合,目标是提升操纵感知能力,并通过商业平台 MoveIt Studio 赋予机器人更自主的行为。这套组合拳,恰好解决了从仿真到真实部署的鸿沟问题。

本文展示如何将 MoveIt 2 与 Isaac Sim 中模拟的机器人进行集成。准备工作:一台安装了 Isaac Sim 2022.2.0 的电脑,并满足以下系统配置。安装细节可参考 NVIDIA Isaac Sim documentation(https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/overview.html)。
1. NVIDIA Isaac Sim 2022.2.0 安装在 Ubuntu 20.04 主机上,默认位置是 $HOME/.local/share/ov/pkg/isaac_sim-2022.2.0 目录。
2. 安装 Docker。
3. 克隆 MoveIt2 教程,构建一个基于 Ubuntu 22.04 Humble 的 Docker 镜像,该镜像可与 Isaac Sim 通信并运行本教程。
ros2_control 介绍
要执行 MoveIt 计算的轨迹,推荐使用 ros2_control 框架来管理并与机器人通信(无论是真实还是模拟)。这一框架为开发者提供了统一的 API,只需修改几个启动参数,就能在不同机器人类型和内置传感器之间切换。
以 Panda 机器人为例,ros2_control.xacro 使用 use_fake_hardware 标志在模拟和物理机器人之间切换:
mock_components/GenericSystem
franka_hardware/FrankaHardwareInterface
${robot_ip}
这里硬件元件类型不同。插件 mock_components/GenericSystem 是一个简单系统,用于将输入的 command_interface 转发为跟踪的 state_interface 值,模拟对节点的完美控制。
为了将机器人配置扩展到 Isaac Sim,需要引入 topic_based_ros2_control。这个硬件接口会订阅和发布已配置的主题。在本教程中,主题 /isaac_joint_states 包含机器人当前状态,/isaac_joint_commands 用于驱动机器人。
本教程使用的 moveit_resources_panda_moveit_config 本身不支持连接硬件。因此,当标志 ros2_control_hardware_type 设置为 isaac 时,ros2_control.xacro 会更新并装载 TopicBasedSystem 插件:
mock_components/GenericSystem
topic_based_ros2_control/TopicBasedSystem
/isaac_joint_commands
/isaac_joint_states
包含的 Python 脚本会加载 Panda 机器人,同时构建 OmniGraph 来发布和订阅用于控制机器人的 ROS 主题。关于配置 Isaac Sim 机器人与 ROS 2 通信的更多信息,可参考 ROS 2 Joint Control: Extension Python Scripting(https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_ros2_manipulation.html)。
计算机设置
按照以下步骤配置环境。
1. 使用 Workstation Installation documentation 安装 Isaac Sim。
2. 执行浅克隆获取 MoveIt2 教程仓库:
git clone https://github.com/ros-planning/moveit2_tutorials.git -b humble --depth 1
3. 进入克隆目录,切换到以下路径:
cd moveit2_tutorials/doc/how_to_guides/isaac_panda
4. 构建 Docker 镜像:
docker compose build
使用模拟组件运行 MoveIt Interactive Marker Demo
先测试 mock_components/GenericSystem 硬件接口:
docker compose up demo_mock_components
此时 RViz 会运行 Panda 机器人,并使用 mock_components 模拟机器人并执行轨迹。如果这是你第一次同时使用 MoveIt 与 RViz,建议先阅读 Quickstart in RViz 教程(https://moveit.picknik.ai/humble/doc/tutorials/quickstart_in_rviz/quickstart_in_rviz_tutorial.html)。
测试完成后,在终端按 Ctrl+C 停止容器。
使用 Isaac Sim 运行 MoveIt Interactive Marker Demo
1. 在主机上,进入教程启动目录:
cd moveit2_tutorials/doc/how_to_guides/isaac_panda/launch
2. 加载预配置的 Panda 机器人。注意:此步骤假设 Isaac Sim 安装在 $HOME/.local/share/ov/pkg/isaac_sim-2022.2.0 目录。加载过程需要几分钟下载资源并设置 Isaac Sim,请耐心等待,不要点击模拟器启动时弹出的“Force Quit”对话框。运行命令:
./python.sh isaac_moveit.py
3. 从 moveit2_tutorials/doc/how_to_guides/isaac_panda 目录启动一个连接到 Isaac Sim 的容器,使用 topic_based_ros2_control/TopicBasedSystem 硬件接口:
docker compose up demo_isaac
RViz 会运行 Panda 机器人,并通过 TopicBasedSystem 接口与模拟机器人通信并执行轨迹。
结论
将 MoveIt 与 NVIDIA Isaac Sim 集成,开发者能够创建反映真实世界的复杂逼真的机器人模拟。通过将这两个框架与 ros2_control 配对,你可以在不同的模拟器和真实硬件之间快速切换,从而高效迭代新算法和机器人行为。这正是从仿真到落地的最佳实践路径。
