仅作为个人学习笔记使用,防止一转头就找不到了
一.ROS bridge
1.On Playback Tick 节点:
在模拟“播放”时生成一个时钟信号。接收到该节点发出的时钟信号的节点将在每个模拟步骤中执行它们的计算函数。
2.ROS Subscribe Twist 节点:
订阅 Twist 消息。在其属性选项卡中的 topicName 字段中指定 Rostopic 的名称 /cmd_vel。
订阅节点通常具有 Exec Out 字段。这类似于时钟信号,当订阅节点接收到消息时会发送信号。在这种情况下,我们希望仅在收到新的 Twist 消息时计算差分命令。因此,差分节点的 Exec In 由订阅节点的输出而不是由 On Playback Tick 发送时钟信号。
3.Scale To/From Stage Unit 节点:
设置输入单位
4.Break 3-Vector 节点:
Twist 订阅节点的输出是线性速度和角速度,都是 3 维向量。但是差分控制器节点的输入只接受前进速度和绕 z 轴的旋转速度,因此我们需要在将它们提供给差分控制器节点之前,对数组进行分解并提取相应的元素。
5.Differential Controller 节点:
该节点接收期望的车辆速度并计算机器人的轮速。它需要车轮半径和轮子之间的距离来进行计算。它还可以接收可选的速度限制参数来限制轮速。在属性选项卡中输入车轮半径、轮子之间的距离和车辆的最大线性速度,如下表所示,以匹配 Turtlebot。
6.Articulation Controller 节点:
该节点被分配给目标机器人,然后接收需要移动的关节的名称或索引,并通过给定的位置命令、速度命令或力命令来移动它们。
请注意,Articulation Controller 节点由 On Playback Tick 发送的时钟信号驱动。因此,如果没有新的 Twist 消息到达,它将继续执行之前收到的任何命令。
要将 Articulation Controller 节点的目标分配为 Turtlebot,请在属性选项卡中取消选择“使用路径”,然后点击“目标”以查找弹出框中的 Turtlebot prim。确保您选择的机器人 prim 也是应用 Articulation Root API 的位置。有时它是机器人的父 prim。但通常对于移动机器人,它实际上是底盘 prim。如果您使用我们之前的教程中提到的 URDF 导入器,则可以在 turtlebot3_burger/base_footprint 上找到 Articulation Root API。
为了将车轮关节的名称以数组格式放置,需要在每个 Constant Token 节点中键入车轮关节的名称,然后将名称数组馈送到 Make Array 节点中。Turtlebot 的车轮关节名称分别是 wheel_left_joint 和 wheel_right_joint。
如果您想知道为什么不将名称放在 Constant String 节点中,那是因为 OmniGraph 没有字符串数组数据类型,因此如果需要将字符串放置在数组格式中以供节点使用,它需要是 token 类型而不是 string 类型。
二. 验证 ROS 连接
按下播放按钮以开始执行图形和物理模拟。
在一个单独的 ROS 终端中,使用 rostopic list 命令检查相关的 rostopic 是否存在。应该列出 /cmd_vel,除了 /rosout 和 /rosout_agg。
现在,设置了一个 twist 订阅者,可以向 /cmd_vel 主题发布 twist 消息以控制机器人。在一个单独的 ROS 终端中,发送向前驱动的命令:
rostopic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
为了更容易地移动 Turtlebot,可以下载 ROS 键盘界面 teleop-twist-keyboard 并使用键盘发布 twist 消息。
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
或者也可以在 OmniGraph 中设置键盘设备界面。更多信息可以在 OmniGraph: 输入设备中找到。
三.
在扩展工作流程中进行脚本编写7.1.10. Joint Control: Extension Python Scripting — Omniverse IsaacSim latest documentation
在独立 Python 工作流程中使用脚本编写
7.1.13. ROS Bridge in Standalone Workflow — Omniverse IsaacSim latest documentation
在 OmniGraph 中使用脚本编写节点
3.4. OmniGraph: Python Scripting — Omniverse IsaacSim latest documentation
构建自定义 Omnigraph Python 节点
3.5. Omnigraph: Custom Python Nodes — Omniverse IsaacSim latest documentation
构建自定义 Omnigraph C++ 节点
3.7. Omnigraph: Custom C++ Nodes — Omniverse IsaacSim latest documentation