基本工具
在本章中,您将了解ROS2的常用命令工具。
1 Topics
ROS 2 将复杂的系统分解为许多模块化节点。 Topics是 ROS 图的重要元素,充当节点交换消息的总线。 Topics是数据在节点之间移动的主要方式之一,因此在系统的不同部分之间移动。
具体参考: 官方教程
topics 帮助
ros2 topics -h
启动turtlesim和键盘控制
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
节点关系图
rqt_graph
了解topics相关命令
ros2 topics -h
话题列表
ros2 topic list
ros2 topic list -t # 显示相应的消息类型查看话题内容
ros2 topic echo
ros2 topic echo /turtle1/cmd_vel显示话题相关信息,类型
ros2 topic info
# 输出 /turtle1/cmd_vel 话题接口相关信息
ros2 topic info /turtle1/cmd_vel显示接口相关信息
ros2 interface show
# 输出 geometry_msgs/msg/Twist接口相关信息
ros2 interface show geometry_msgs/msg/Twist发布命令
ros2 topic pub \
\ \
# 发布速度命令
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
# 按一定频率发布速度命令 ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"查看话题发布的频率
ros2 topic hz
#输出/turtle1/cmd_vel发布频率
ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
2 Nodes
ROS2 中的每个节点都应该负责一个单一的模块用途(例如,一个节点用于控制车轮电机,一个节点用于控制激光测距仪等)。 每个节点都可以通过主题、服务、操作或参数向其他节点发送和接收数据。 一个完整的机器人系统由许多协同工作的节点组成。 在 ROS 2 中,单个可执行文件(C++ 程序、Python 程序等)可以包含一个或多个节点。
具体参考: 官方教程
nodes 帮助
ros2 nodes -h
启动turtlesim和键盘控制
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key查看节点列表
ros2 node list
查看节点关系图
rqt_graph
重映射
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
ros2 node list查看节点信息
ros2 node info
ros2 node info /my_turtle
3 Services
服务是 ROS 图中节点的另一种通信方法。 服务基于调用和响应模型,而不是主题的发布者-订阅者模型。 虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端专门调用时才提供数据。
具体参考: 官方教程
ervices 帮助
ros2 service -h
启动turtlesim和键盘控制
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key查看服务列表
ros2 service list
# 显示服务列表及消息类型
ros2 service list -t查看服务接收到的消息类型
ros2 service type
ros2 service type /clear找到使用某类消息类型的服务
ros2 service find
ros2 service find std_srvs/srv/Empty查看服务消息类型定义
ros2 interface show
.srv
ros2 interface show std_srvs/srv/Empty.srv调用服务命令,清除行走轨迹
ros2 service call
ros2 service call /clear std_srvs/srv/Empty生成新乌龟
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: 'turtle2'}"
4 Parameters
参数是节点的配置值。 您可以将参数视为节点设置。 节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。 在 ROS 2 中,每个节点都维护自己的参数。 有关参数的更多背景信息,请参阅概念文档。
具体参考: 官方教程
parameters 帮助
ros2 param -h
启动turtlesim和键盘控制
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key查看服务列表
ros2 param list
获取参数值
ros2 param get
ros2 param get /turtlesim background_g设置参数值
ros2 param set
ros2 param set /turtlesim background_r 150导出参数值
ros2 param dump
ros2 param dump /turtlesim独立导入参数
ros2 param load
ros2 param load /turtlesim ./turtlesim.yaml启动节点同时导入参数
ros2 run
--ros-args --params-file
ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
5 Actions
动作是 ROS 2 中的一种通信类型,用于长时间运行的任务。 它们由三部分组成:目标、反馈和结果。
操作基于主题和服务。 它们的功能类似于服务,除了操作是可抢占的(您可以在执行时取消它们)。 他们还提供稳定的反馈,而不是返回单一响应的服务。
操作使用客户端-服务器模型,类似于发布者-订阅者模型(在主题教程中描述)。 “动作客户端”节点将目标发送到“动作服务器”节点,该节点确认目标并返回反馈流和结果。
具体参考: 官方教程
action 帮助
ros2 action -h
启动turtlesim和键盘控制
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
按G|B|V|C|D|E|R|T 实现旋转,按F键盘取消l
查看节点action的服务端和客户端
ros2 node info /turtlesim
查看动作列表
ros2 action list
ros2 action list -t # 显示动作类型查看动作信息
ros2 action info
ros2 action info /turtle1/rotate_absolute查看动作消息内容
ros2 interface show turtlesim/action/RotateAbsolute
发送动作目标信息
ros2 action send_goal
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
# 带反馈信息
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 0}" --feedback
6 RQt
RQt 是一个图形用户界面框架,它以插件的形式实现各种工具和界面。 可以将所有现有的 GUI 工具作为 RQt 中的可停靠窗口运行! 这些工具仍然可以以传统的独立方式运行,但 RQt 可以更轻松地在单个屏幕布局中管理所有不同的窗口。
具体参考: 官方教程
您可以通过以下方式轻松运行任何 RQt 工具/插件:
rqt
rqt 帮助
rqt -h
启动turtlesim和键盘控制
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key动作浏览器: / Plugins -> Actions ->Action Type Browser
参数重配置: / Plugins -> configuration ->Parameter Reconfigure
节点图: /Node Graph
控制转向: /Plugins -> Robot Tools -> Robot Steering
服务调用: /Plugins -> Services -> Service Caller
服务类型浏览器: Plugins -> Services -> Service Type Browser
消息发布: Plugins -> Topics -> Message Publisher
消息类型浏览器: Plugins -> Topics -> Message Type Browser
话题列表: Plugins -> Topics -> Topic Monitor
绘制曲线图: Plugins -> Visualization -> Plot
查看日志: rqt_console
ros2 run rqt_console rqt_console
ros2 run turtlesim turtlesim_node
ros2 topic pub -r 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}"
7 TF2
tf2 是变换库,它允许用户随着时间的推移跟踪多个坐标系。 tf2 以时间缓冲的树结构维护坐标系之间的关系,并让用户在任何需要的时间点在任意两个坐标系之间变换点、向量等。
具体参考: 官方教程
让我们从安装演示包及其依赖项开始。
sudo apt-get install ros-foxy-turtle-tf2-py ros-foxy-tf2-tools ros-foxy-tf-transformations
- 跟随
launch启动2个小乌龟,第一个小乌龟自动跟随第二个
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py
通过键盘控制第一个小乌龟移动
ros2 run turtlesim turtle_teleop_key
查看TF树
ros2 run tf2_tools view_frames.py evince frames.pdf
查看两个坐标系之间的关系
ros2 run tf2_ros tf2_echo [reference_frame] [target_frame]
ros2 run tf2_ros tf2_echo turtle2 turtle1在rviz上查看TF关系
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz
8 URDF介绍
- Unified Robot Description Format,统一机器人描述格式,简称为URDF。ROS中的urdf功能包包含一个URDF的C++解析器,URDF文件使用XML格式描述机器人模型。
- URDF 不能单独使用,需要结合 Rviz2 或 Gazebo,URDF 只是一个文件,需要在 Rviz2 或 Gazebo 中渲染成图形化的机器人模型。
具体参考: 官方教程
8.1 urdf文件描述
代码示例:
本处只截取部分代码进行展示:
安装依赖库
sudo apt install ros-foxy-joint-state-publisher-gui ros-foxy-joint-state-publisher
sudo apt install ros-foxy-xacro下载源代码
cd ~/dev_ws
git clone -b ros2 https://github.com/ros/urdf_tutorial.git src/urdf_tutorial编译源代码
colcon build --packages-select urdf_tutorial
运行示例
ros2 launch urdf_tutorial display.launch.py model:=urdf/01-myfirst.urdf