警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

将 URDF 与机器人状态发布器结合使用

目标 用 URDF 模拟行走机器人,并在 Rviz 中查看。

辅导水平: 中级

时间 15 分钟

背景介绍

本教程将向您展示如何为行走机器人建模,并将其状态发布为 /tf2 首先,我们创建描述机器人装配的 URDF 模型。接下来,我们编写一个节点,模拟运动并发布 JointState 和变换。然后,我们使用 机器人状态发布者 将整个机器人状态发布到 /tf2.

./././_images/r2d2_rviz_demo.gif

先决条件

任务

1 创建软件包

cd ~/dev_ws/src # 根据需要更改
ros2 pkg create urdf_tutorial --build-type ament_python --dependencies rclpy

现在您应该看到一个 urdf_tutorial 文件夹。接下来你将对其进行几处修改。

2 创建 URDF 文件

以下是 URDF 文件 的 7 连杆模型,大致与 R2-D2 相似。保存为 ~/dev_ws/src/urdf_tutorial/urdf/r2d2.urdf.xml

要在 Rviz 中查看机器人,请保存以下内容 Rviz 配置 作为 ~/dev_ws/src/urdf_tutorial/urdf/r2d2.rviz

请注意: 两个文件都必须位于子文件夹 urdf

3 公布状态

现在,我们需要一种方法来指定机器人所处的状态。为此,我们必须指定所有三个关节和整体运动轨迹。

启动您最喜欢的编辑器,将以下代码粘贴到 src/urdf_tutorial/urdf_tutorial/state_publisher.py

请注意: 确保将其保存在 Python "urdf_tutorial" 子文件夹中,其中的 __init__.py 文件的位置。

#!/usr/bin/env python
 算术 舶来品 罪过, 系数, pi
舶来品 线程
舶来品 rclpy
 rclpy.node 舶来品 节点
 rclpy.qos 舶来品 QoSProfile
 几何_msgs.msg 舶来品 四元数
 传感器_msgs.msg 舶来品 联合国家
 tf2_ros 舶来品 改造播音员, TransformStamped
 国家出版商(节点):

  捍卫 启动(自我):
      rclpy.启动()
      棒极了().启动('state_publisher';)

      qos_profile = QoSProfile(深度=10)
      自我.联合出版 = 自我.创建出版商(联合国家, 'joint_states', qos_profile)
      自我.广播 = 改造播音员(自我, 优先权=qos_profile)
      自我.节点名 = 自我.获取名称()
      自我.get_logger().信息(";{0} 开始";.格式(自我.节点名))

      程度 = pi / 180.0
      循环速率 = 自我.创建速率(30)

      # 机器人状态
      倾斜度 = 0.
       = 程度
      转动 = 0.
      观点 = 0.
      高度 = 0.
       = 0.005

      # 消息声明
      odom_trans = TransformStamped()
      odom_trans.页眉.frame_id = '奥多姆';
      odom_trans.子帧标识 = '轴';
      joint_state = 联合国家()

      尝试:
          虽然 rclpy.好的():
              rclpy.自旋一次(自我)

              # 更新 joint_state
              现在 = 自我.获取时钟().现在()
              joint_state.页眉.盖章 = 现在.to_msg()
              joint_state.名字 = ['旋转';, '倾斜';, '潜望镜';]
              joint_state.位置 = [转动, 倾斜度, 高度]

              # 更新变换
              # (在半径=2 的圆内移动)
              odom_trans.页眉.盖章 = 现在.to_msg()
              odom_trans..译文.x = 系数(观点)*2
              odom_trans..译文.y = 罪过(观点)*2
              odom_trans..译文.z = 0.7
              odom_trans..自转 = \
                  欧拉到四元数(0, 0, 观点 + pi/2) # 滚动、俯仰、偏航

              # 发送联合状态和变换
              自我.联合出版.发布(joint_state)
              自我.广播.发送变换(odom_trans)

              # 创建新的机器人状态
              倾斜度 += 
              如果 倾斜度 <; -0.5  倾斜度 >; 0.0:
                   *= -1
              高度 += 
              如果 高度 >; 0.2  高度 <; 0.0:
                   *= -1
              转动 += 程度
              观点 += 程度/4

              # 这将根据每次迭代的需要进行调整
              循环速率.睡眠()

      除开 键盘中断:
          通过

捍卫 欧拉到四元数(滚动, 沥青, 打呵欠):
  qx = 罪过(滚动/2) * 系数(沥青/2) * 系数(打呵欠/2) - 系数(滚动/2) * 罪过(沥青/2) * 罪过(打呵欠/2)
  qy = 系数(滚动/2) * 罪过(沥青/2) * 系数(打呵欠/2) + 罪过(滚动/2) * 系数(沥青/2) * 罪过(打呵欠/2)
  qz = 系数(滚动/2) * 系数(沥青/2) * 罪过(打呵欠/2) - 罪过(滚动/2) * 罪过(沥青/2) * 系数(打呵欠/2)
  qw = 系数(滚动/2) * 系数(沥青/2) * 系数(打呵欠/2) + 罪过(滚动/2) * 罪过(沥青/2) * 罪过(打呵欠/2)
  返回 四元数(x=qx, y=qy, z=qz, w=qw)

捍卫 主要():
  网站 = 国家出版商()

如果 姓名____ == '__main__';:
  主要()

4 创建启动文件

创建一个新的 启动 文件夹。打开编辑器,粘贴以下代码,保存为 launch/demo.launch.py

舶来品 os
 ament_index_python.packages 舶来品 获取软件包共享目录
 启动 舶来品 启动说明
 launch.actions 舶来品 声明启动参数
 launch.substitutions 舶来品 启动配置
 launch_ros.actions 舶来品 节点

捍卫 生成发射描述():

  使用模拟时间 = 启动配置('use_sim_time', 默认='false';)
  urdf_file_name = 'r2d2.urdf.xml'

  打印("urdf_file_name : {}";.格式(urdf_file_name))

  urdf = os..加入(
      获取软件包共享目录('urdf_tutorial'),
      urdf_file_name)

  返回 启动说明([
      声明启动参数(
          'use_sim_time',
          默认值='false';,
          描述='如果为 true,则使用模拟(Gazebo)时钟';),
      节点(
          包装='robot_state_publisher';,
          可执行='robot_state_publisher';,
          名字='robot_state_publisher';,
          产量='屏幕';,
          参数=[{'use_sim_time': 使用模拟时间}],
          论点=[urdf]),
      节点(
          包装='urdf_tutorial',
          可执行='state_publisher';,
          名字='state_publisher';,
          产量='屏幕';),
  ])

5 编辑 setup.py 文件

您必须告诉 胶管 构建工具如何安装 Python 软件包。编辑 setup.py 文件如下

  • 包括这些导入语句

舶来品 os
 水珠 舶来品 水珠
 设置工具 舶来品 设置
 设置工具 舶来品 查找软件包
  • 将这两行添加到 数据文件

数据文件=[
  ...
  (os..加入('分享';, 包名), 水珠('launch/*.py')),
  (os..加入('分享';, 包名), 水珠('urdf/*';))
],
  • 修改 入口 表,这样以后就可以从控制台运行 "state_publisher

'console_scripts';: [
    'state_publisher = urdf_tutorial.state_publisher:main';
],

保存 setup.py 文件中作出更改。

6 安装软件包

cd ~/dev_ws
colcon build --symlink-install --packages-select urdf_tutorial
source install/setup.bash

7 查看结果

启动软件包

ros2 launch urdf_tutorial demo.launch.py

打开一个新终端,使用以下命令运行 Rviz

rviz2 -d ~/dev_ws/install/urdf_tutorial/share/urdf_tutorial/r2d2.rviz

请参阅《用户指南》(http://wiki.ros.org/rviz/UserGuide) 获取如何使用 Rviz 的详细信息。

摘要

您创建了一个 JointState 发布节点,并将其与 机器人状态发布者 来模拟行走机器人。这些示例中使用的代码可在以下网站找到 这里.

本文作者 ROS 1 教程 其中一些内容被重复使用。