ROS2 基本工具的使用
Workspace
Workspace 是 ROS2 的概念,表示我们在系统上进行 ROS2 开发的位置。
ROS2 的核心 Workspace 叫做 underlay ,本地的 Workspace 叫做 overlay 。在开发 ROS2 的时候,一般会有多个 Workspace 并行存在。
结合 Workspace 能够方便的使用不同的 ROS2 版本,类似于 python 的虚拟环境
ROS2 通过 shell 环境来让不同的 Workspace 下用不同的 ROS2 环境。新打开一个终端都需要加载 ROS2 的 setup 文件,载入 ROS2 的开发环境。
例子:
|
|
ROS_DOMAIN_ID 环境变量
标记一个 ROS 域,不同的 ROS 域之间不能通信。
colcon_cd
colcon_cd 可以快速的改变当前的目录
_colcon_cd_root
环境变量指定了 Workspace 目录。
小乌龟和 rqt
小乌龟是 ROS2 Dashing 版本以上才有的一个轻量模拟器,方便我们学习 ROS2 。
rqt 是 ros2 命令的 gui 版本。一般我们只会用命令行。
具体文档: https://index.ros.org/doc/ros2/Tutorials/Turtlesim/Introducing-Turtlesim/
理解 ROS 节点
在官方教程中有详细的用法:https://index.ros.org/doc/ros2/Tutorials/Understanding-ROS2-Nodes/
ros run
ros2 run 命令载入一个包里面的可执行文件
|
|
ros2 pkg executables 可以列出包里的可执行文件
|
|
ros2 run turtlesim turtlesim_node
运行 turtlesim 包中的 turtlesim_node 可执行文件。
但是我们并不知道节点名称。
通过 ros2 node list
列出所有节点,运行 turtlesim_node 后输出为:
|
|
再运行另一个节点 ros2 run turtlesim turtle_teleop_keu
。
这时输出:
启动时可以修改节点的参数,如修改节点名称:
|
|
ros node info
通过 ros2 node info <node-name>
可以查看节点的信息,它能够看到订阅者,发布者,提供的服务等信息。
理解 ROS 的 Topic
https://index.ros.org/doc/ros2/Tutorials/Topics/Understanding-ROS2-Topics
ROS2 将复杂的系统分离成各个节点,Topic 在 ROS 图中是一个虚拟元素,作为一个节点交换信息的总线。
Topic 支持一对一,一对多,多对多的通信。
rqt_graph
rqt_graph 能够可视化节点和主题之间的连接。
ros2 topic list
返回目前系统中所有激活的 topic 。
ros2 topic list -t
打印中包括 topic 的类型。
ros2 topic echo <topic_name>
查看发布到指定 topic 的数据
ros2 topic info
查看 topic 的信息,包括发布者和订阅者数量。
ros2 interface show
显示 Topic 发送的消息定义
ros2 topic pub
向 topic 发布消息
|
|
|
|
ros2 topic hz
查看数据的发布速率
理解 ROS2 的服务
https://index.ros.org/doc/ros2/Tutorials/Services/Understanding-ROS2-Services/
服务类似于 rpc ,是一个请求/响应模型 。
ros2 service list
查看所有的服务。
每个节点默认都有一些基础的服务,比如设置参数服务等。
ros2 service list -t
打印出服务的类型
ros2 service type
ros2 service find <type_name>
找出指定类型的所有服务
|
|
ros2 interface show
显示服务的定义
ros2 service call
调用服务
|
|
|
|
理解 ROS2 参数
ROS2 参数和 ROS2 节点关联,参数用于在运行时外部配置节点。
参数按节点名称、节点命名空间、参数名称和参数命名空间寻址。提供参数命名空间是可选的。
每一个参数以键和值组成,其中键是字符串,值是下面的类型:
|
|
参数的设置可以通过命令行,文件或者代码。它们可以单独设置,或者在参数文件中设置多个。
ros2 param list
列出所有的参数
每个节点都会有公共的参数,比如 use_sim_time
。
ros2 param get
获取指定参数的值
|
|
比如:
|
|
ros2 param set
设置指定参数的值
|
|
例如:
|
|
ros2 dump <file_name>
dump 参数到文件中
载入参数
在运行时从文件中载入参数
|
|
理解 action
https://index.ros.org/doc/ros2/Tutorials/Understanding-ROS2-Actions/
行为构建在 Topics 和 Service 之上,行为包括三个部分:目标,结果和反馈。
行为类似于服务,但是操作是可抢占的,我们可以手动取消。行为也会提供稳定的反馈,不像服务只会响应一次。
行为是客户端-服务端架构,客户端向服务端发送目标,服务返回反馈和结果。
ros2 action list
列出所有的 action 。
ros2 action list -t
打印出 action 的 type 。
ros2 action info
查看 action 的信息,包括客户端和服务端。
ros2 interface show
显示行为定义
ros2 action send_goal
发送目标
|
|
ros2 bag
ros2 bag 是一个命令行工具,用来记录发布到 topic 的数据。我们可以通过记录的数据进行重放,方便复现结果。
ros2 bag record
ros2 bag record <topic_name>
记录指定 topic 的数据。
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
记录多个 topic
ros2 bag info
查看 bag 信息。
ros2 bag play
回放 bag 信息