Workspace

Workspace 是 ROS2 的概念,表示我们在系统上进行 ROS2 开发的位置。

ROS2 的核心 Workspace 叫做 underlay ,本地的 Workspace 叫做 overlay 。在开发 ROS2 的时候,一般会有多个 Workspace 并行存在。

结合 Workspace 能够方便的使用不同的 ROS2 版本,类似于 python 的虚拟环境

ROS2 通过 shell 环境来让不同的 Workspace 下用不同的 ROS2 环境。新打开一个终端都需要加载 ROS2 的 setup 文件,载入 ROS2 的开发环境。

例子:

1
source /opt/ros/eloquent/setup.bash

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 命令载入一个包里面的可执行文件

1
ros2 run <package_name> <executable_name>

ros2 pkg executables 可以列出包里的可执行文件

1
ros2 pkg executables <package_name>

ros2 run turtlesim turtlesim_node 运行 turtlesim 包中的 turtlesim_node 可执行文件。

但是我们并不知道节点名称。

通过 ros2 node list 列出所有节点,运行 turtlesim_node 后输出为:

1
/turtlesim

再运行另一个节点 ros2 run turtlesim turtle_teleop_keu

这时输出:

1
2
/teleop_turtle
/turtlesim

启动时可以修改节点的参数,如修改节点名称:

1
ros2 run turtlesim turtlesim_node __node:=my_turtle

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 发布消息

1
ros2 topic pub <topic_name> <msg_type> '<args>'
1
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 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>

找出指定类型的所有服务

1
ros2 service find std_srvs/srv/Empty

ros2 interface show

显示服务的定义

ros2 service call

调用服务

1
ros2 service call <service_name> <service_type> <arguments>
1
ros2 service call /clear std_srvs/srv/Empty

理解 ROS2 参数

ROS2 参数和 ROS2 节点关联,参数用于在运行时外部配置节点。

参数按节点名称、节点命名空间、参数名称和参数命名空间寻址。提供参数命名空间是可选的。

每一个参数以键和值组成,其中键是字符串,值是下面的类型:

1
bool, int64, float64, string, byte[], bool[], int64[], float64[] or string[]

参数的设置可以通过命令行,文件或者代码。它们可以单独设置,或者在参数文件中设置多个。

ros2 param list

列出所有的参数

每个节点都会有公共的参数,比如 use_sim_time

ros2 param get

获取指定参数的值

1
ros2 param get <node_name> <parameter_name>

比如:

1
ros2 param get /turtlesim background_g

ros2 param set

设置指定参数的值

1
ros2 param set <node_name> <parameter_name> <value>

例如:

1
ros2 param set /turtlesim background_r 150

ros2 dump <file_name>

dump 参数到文件中

载入参数

在运行时从文件中载入参数

1
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

理解 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

发送目标

1
ros2 action send_goal <action_name> <action_type> <values>

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 信息