如何控制模拟 Isaac 机器人
本教程需要一台安装了 Isaac Sim 4.5(推荐)或 Isaac Sim 4.2 的机器。关于 Isaac Sim 的要求和安装,请参阅 Omniverse 文档。要配置 Isaac Sim 与 ROS 2 协同工作,请参阅本指南。
本教程对系统配置有以下假设:
- NVIDIA Isaac Sim 安装在默认位置。基于 Docker 的 Isaac Sim 安装也受支持,但如何配置系统由用户自行决定。
- 已安装 Docker。如果你打算将 GPU 与 MoveIt 一起使用,则需要安装 nvidia-docker。
- 你克隆了本仓库,以便构建一个基于 Ubuntu 22.04 Humble 的 Docker 镜像,该镜像可以与 Isaac 通信并运行本教程。
ros2_control 简介
Section titled “ros2_control 简介”执行 MoveIt 计算出的轨迹的推荐方法之一是使用 ros2_control 框架来管理与机器人(真实的或模拟的)的通信。它备受推荐,因为它为开发者提供了一个通用 API,只需更改一些启动参数,就能在不同机器人类型及其内置传感器之间切换。例如,查看 Panda 机器人的 ros2_control.xacro,可以看到它使用 use_fake_hardware 标志在模拟与连接真实机器人之间切换。
<hardware> <xacro:if value="${use_fake_hardware}"> <plugin>mock_components/GenericSystem</plugin> </xacro:if> <xacro:unless value="${use_fake_hardware}"> <plugin>franka_hardware/FrankaHardwareInterface</plugin> <param name="robot_ip">${robot_ip}</param> </xacro:unless></hardware>硬件组件 (Hardware Components) 可以有不同类型,其中 <plugin>mock_components/GenericSystem</plugin> 插件是一个非常简单的 System,它将传入的 command_interface 值直接转发给关节的 state_interface(即对模拟关节的完美控制)。
为了将我们的 Panda 机器人扩展到 Isaac Sim,我们首先引入了 topic_based_ros2_control。这个硬件接口是一个在配置的话题上订阅和发布的 System。在本教程中,话题 /isaac_joint_states 将包含机器人的当前状态,/isaac_joint_commands 将用于驱动机器人。本教程中使用的 moveit_resources_panda_moveit_config 不支持连接硬件,因此我们的 ros2_control.xacro 现已更新——当 ros2_control_hardware_type 标志设置为 isaac 时,会加载 TopicBasedSystem 插件。
<xacro:if value="${ros2_control_hardware_type == 'mock_components'}"> <plugin>mock_components/GenericSystem</plugin></xacro:if><xacro:if value="${ros2_control_hardware_type == 'isaac'}"> <plugin>topic_based_ros2_control/TopicBasedSystem</plugin> <param name="joint_commands_topic">/isaac_joint_commands</param> <param name="joint_states_topic">/isaac_joint_states</param></xacro:if>在本教程中,我们包含了一个 Python 脚本,用于加载 Panda 机器人并构建一个 OmniGraph 来发布和订阅用于控制机器人的 ROS 话题。OmniGraph 还包含用于从 Panda 手部安装的相机发布 RGB 和深度图像的节点。RGB 图像发布到话题 /rgb,相机信息发布到 /camera_info,深度图像发布到 /depth。相机帧的帧 ID 是 /sim_camera。要了解如何配置你的 Isaac Sim 机器人与 ROS 2 通信,请参阅 Omniverse 上的关节控制 (Joint Control) 教程。
-
安装 Isaac Sim。
-
对 MoveIt 2 Tutorials 仓库执行浅克隆:
git clone https://github.com/moveit/moveit2_tutorials.git -b main- 进入克隆教程的文件夹,然后切换到以下目录:
cd moveit2_tutorials/doc/how_to_guides/isaac_panda- 构建 Docker 镜像。此 Docker 镜像还包含
pytorch。
docker compose build base使用 Mock Components 运行 MoveIt 交互式标记演示
Section titled “使用 Mock Components 运行 MoveIt 交互式标记演示”本节测试 mock_components/GenericSystem 硬件接口(与使用 Isaac Sim 相对)。
- 要测试
mock_components/GenericSystem硬件接口,请运行:
docker compose up demo_mock_components这将打开 RViz,其中 Panda 机器人使用 mock_components 来模拟机器人并执行轨迹。
如果你是第一次在 RViz 中使用 MoveIt,请参阅 RViz 快速入门 教程。
测试完成后,在终端中按 Ctrl+C 停止容器。
使用 Isaac Sim 运行 MoveIt 交互式标记演示
Section titled “使用 Isaac Sim 运行 MoveIt 交互式标记演示”- 在主机上,进入教程的 launch 目录:
cd moveit2_tutorials/doc/how_to_guides/isaac_panda/launch- 然后运行以下命令来加载预先配置好、可与本教程配合使用的 Panda 机器人:
注意:此步骤假设主机上安装了兼容版本的 Isaac Sim:Isaac Sim 4.5 位于
$HOME/isaacsim目录,Isaac Sim 4.2 及更早版本位于$HOME/.local/share/ov/pkg/目录。此步骤还需要几分钟来下载资源并设置 Isaac Sim,请耐心等待,不要点击模拟器启动时弹出的Force Quit对话框。
./python.sh isaac_moveit.py- 从
moveit2_tutorials/doc/how_to_guides/isaac_panda目录启动一个容器,该容器使用topic_based_ros2_control/TopicBasedSystem硬件接口连接到 Isaac Sim:
docker compose up demo_isaac这将打开 RViz,其中 Panda 机器人使用 TopicBasedSystem 接口与模拟机器人通信并执行轨迹。