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 可以快速的改变当前的目录到ROS包的概念及创建的目录。
_colcon_cd_root
环境变量指定了 Workspace 目录。
小乌龟和rqt
小乌龟是 ROS2 Dashing 版本以上才有的一个轻量模拟器,方便我们学习 ROS2 。
rqt 是 ros2 命令的 gui 版本。一般我们只会用命令行。
具体文档: https://index.ros.org/doc/ros2/Tutorials/Turtlesim/Introducing-Turtlesim/
理解 ROS 节点
在 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接口 中有提到。
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 信息