Skip to content

如何控制模拟 Isaac 机器人

本教程需要一台安装了 Isaac Sim 4.5(推荐)或 Isaac Sim 4.2 的机器。关于 Isaac Sim 的要求和安装,请参阅 Omniverse 文档。要配置 Isaac Sim 与 ROS 2 协同工作,请参阅本指南。

本教程对系统配置有以下假设:

  1. NVIDIA Isaac Sim 安装在默认位置。基于 Docker 的 Isaac Sim 安装也受支持,但如何配置系统由用户自行决定。
  2. 已安装 Docker。如果你打算将 GPU 与 MoveIt 一起使用,则需要安装 nvidia-docker。
  3. 你克隆了本仓库,以便构建一个基于 Ubuntu 22.04 Humble 的 Docker 镜像,该镜像可以与 Isaac 通信并运行本教程。

执行 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) 教程。

  1. 安装 Isaac Sim。

  2. 对 MoveIt 2 Tutorials 仓库执行浅克隆:

Terminal window
git clone https://github.com/moveit/moveit2_tutorials.git -b main
  1. 进入克隆教程的文件夹,然后切换到以下目录:
Terminal window
cd moveit2_tutorials/doc/how_to_guides/isaac_panda
  1. 构建 Docker 镜像。此 Docker 镜像还包含 pytorch。
Terminal window
docker compose build base

使用 Mock Components 运行 MoveIt 交互式标记演示

Section titled “使用 Mock Components 运行 MoveIt 交互式标记演示”

本节测试 mock_components/GenericSystem 硬件接口(与使用 Isaac Sim 相对)。

  1. 要测试 mock_components/GenericSystem 硬件接口,请运行:
Terminal window
docker compose up demo_mock_components

这将打开 RViz,其中 Panda 机器人使用 mock_components 来模拟机器人并执行轨迹。

如果你是第一次在 RViz 中使用 MoveIt,请参阅 RViz 快速入门 教程。

测试完成后,在终端中按 Ctrl+C 停止容器。

使用 Isaac Sim 运行 MoveIt 交互式标记演示

Section titled “使用 Isaac Sim 运行 MoveIt 交互式标记演示”
  1. 在主机上,进入教程的 launch 目录:
Terminal window
cd moveit2_tutorials/doc/how_to_guides/isaac_panda/launch
  1. 然后运行以下命令来加载预先配置好、可与本教程配合使用的 Panda 机器人:

注意:此步骤假设主机上安装了兼容版本的 Isaac Sim:Isaac Sim 4.5 位于 $HOME/isaacsim 目录,Isaac Sim 4.2 及更早版本位于 $HOME/.local/share/ov/pkg/ 目录。此步骤还需要几分钟来下载资源并设置 Isaac Sim,请耐心等待,不要点击模拟器启动时弹出的 Force Quit 对话框。

Terminal window
./python.sh isaac_moveit.py
  1. 从 moveit2_tutorials/doc/how_to_guides/isaac_panda 目录启动一个容器,该容器使用 topic_based_ros2_control/TopicBasedSystem 硬件接口连接到 Isaac Sim:
Terminal window
docker compose up demo_isaac

这将打开 RViz,其中 Panda 机器人使用 TopicBasedSystem 接口与模拟机器人通信并执行轨迹。