您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.
将 URDF 与 机器人状态发布者
目标 模拟以 URDF 为模型的行走机器人,并在 Rviz 中查看。
辅导水平: 中级
时间 15 分钟
背景介绍
本教程将向您展示如何为行走机器人建模,并将其状态发布为 tf2 首先,我们创建描述机器人装配的 URDF 模型。接下来,我们编写一个节点,模拟运动并发布 JointState 和变换。然后,我们使用 机器人状态发布者
将整个机器人状态发布到 /tf2
.

先决条件
与往常一样,别忘了在 您打开的每个新终端.
任务
1 创建软件包
创建目录:
mkdir -p second_ros2_ws/src
mkdir -p second_ros2_ws/src
md second_ros2_ws/src
然后创建软件包:
cd second_ros2_ws/src
ros2 pkg create --build-type ament_python --license Apache-2.0 urdf_tutorial_r2d2 --dependencies rclpy
cd urdf_tutorial_r2d2
现在您应该看到一个 urdf_tutorial_r2d2
文件夹。接下来你将对其进行几处修改。
2 创建 URDF 文件
创建目录,我们将在其中存储一些资产:
mkdir -p urdf
mkdir -p urdf
md urdf
下载 URDF 文件
并将其保存为 second_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.urdf.xml
.下载 Rviz 配置 文件
并将其保存为 second_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.rviz
.
3 公布状态
现在,我们需要一种方法来指定机器人所处的状态。为此,我们必须指定所有三个关节和整体运动轨迹。
启动您最喜欢的编辑器,将以下代码粘贴到 second_ros2_ws/src/urdf_tutorial_r2d2/urdf_tutorial_r2d2/state_publisher.py
从 算术 舶来品 罪过, 系数, 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 创建启动文件
创建一个新的 second_ros2_ws/src/urdf_tutorial_r2d2/launch
文件夹。打开编辑器,粘贴以下代码,保存为 second_ros2_ws/src/urdf_tutorial_r2d2/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 = os.路.加入(
获取软件包共享目录('urdf_tutorial_r2d2'),
urdf_file_name)
与 开(urdf, 'r') 作为 infp:
机器人说明 = infp.阅读()
返回 启动说明([
声明启动参数(
'use_sim_time',
默认值='false';,
描述='如果为 true,则使用模拟(Gazebo)时钟';),
节点(
包装='robot_state_publisher';,
可执行='robot_state_publisher';,
名字='robot_state_publisher';,
产量='屏幕';,
参数=[{'use_sim_time': 使用模拟时间, 'robot_description';: 机器人说明}],
论点=[urdf]),
节点(
包装='urdf_tutorial_r2d2',
可执行='state_publisher';,
名字='state_publisher';,
产量='屏幕';),
])
5 编辑 setup.py 文件
您必须告诉 胶管 构建工具如何安装 Python 软件包。编辑 second_ros2_ws/src/urdf_tutorial_r2d2/setup.py
文件如下
包括这些导入语句
舶来品 os
从 水珠 舶来品 水珠
从 设置工具 舶来品 设置
从 设置工具 舶来品 查找软件包
将这两行添加到
数据文件
数据文件=[
...
(os.路.加入('分享';, 包名, 'launch';), 水珠(os.路.加入('launch';, '*launch.[pxy][yma]*'))),
(os.路.加入('分享';, 包名), 水珠('urdf/*';)),
],
修改
入口
表,这样以后就可以从控制台运行 "state_publisher
'console_scripts';: [
'state_publisher = urdf_tutorial_r2d2.state_publisher:main';
],
保存 setup.py
文件中作出更改。
6 安装软件包
cd second_ros2_ws
colcon build --symlink-install --packages-select urdf_tutorial_r2d2
源设置文件:
source install/setup.bash
source install/setup.bash
调用 install/setup.bat
7 查看结果
启动软件包
ros2 launch urdf_tutorial_r2d2 demo.launch.py
打开一个新终端,使用以下命令运行 Rviz
rviz2 -d second_ros2_ws/install/urdf_tutorial_r2d2/share/urdf_tutorial_r2d2/r2d2.rviz
参见 用户指南 了解如何使用 Rviz 的详细信息。
摘要
您创建了一个 联合国家
发布节点,并将其与 机器人状态发布者
来模拟行走机器人。这些示例中使用的代码最初来自 这里.
本文作者 ROS 1 教程 其中一些内容被重复使用。