概述
ROS 2包含有一系列的命令行工具用以对ROS 2系统观测。
用法
命令ros2是所有命令的入口,它具有各种子命令,用于观察并处理节点、主题、服务等。
要查看所有的子命令,请运行
ros2 --help
子命令包括:
- action : 对ROS action的读写
- bag : 记录/回放rosbag
- component : 管理组件容器
- daemon : 对ROS 2守护进程的读写
- doctor : 检查ROS关于潜在问题的配置
- interface : 显示ROS interface的信息
- launch : 查看或运行一个launch文件
- lifecycle : 查看或管理节点的生命周期
- multicast : 查看管理广播
- node : 查看ROS节点
- param : 查看、配置节点参数
- pkg : 查看ROS包
- run : 运行ROS节点
- security :配置安全设定
- service :查看、调用ROS服务
- topic :查看、发布ROS主题
- wtf :采用
wtf
作为doctor
的别名
样例
使用命令行工具可以运行一个发布-监听的样例,可以使用topic
子命令来发布和显示话题中的消息。
在一个终端中发布消息:
$ ros2 topic pub /chatter std_msgs/String "data: Hello world"
1628647237.530682 [0] ros2: using network interface eno1 (udp/192.168.254.24) selected arbitrarily from: eno1, lxdbr0
publisher: beginning loop
publishing #1: std_msgs.msg.String(data='Hello world')
publishing #2: std_msgs.msg.String(data='Hello world')
publishing #3: std_msgs.msg.String(data='Hello world')
在另一个终端中,可以打印接收到的消息
$ ros2 topic echo /chatter
1628647264.220949 [0] ros2: using network interface eno1 (udp/192.168.254.24) selected arbitrarily from: eno1, lxdbr0
data: Hello world
---
data: Hello world
---
data: Hello world
---
data: Hello world
---
data: Hello world
其他说明
ROS2使用分布式发现过程以使得节点之间可以互相连接。不像ROS1的ROS Master,ROS2中并未使用集中式的发现机制,因此ROS节点发现ROS图中的所有其他参与者需要花费一定的时间。因此后台有一个长时间运行的守护进程,用以存储ROS图的信息,以更快地响应例如节点名称列表等的查询。
第一次使用命令行工具时,守护进程将自动启动。您也可以运行ros2 daemon --help
命令查看如何使用守护进程。
但是目前看来,这个命令只支持启动、停止和查看启动状态三种子命令:)
$ ros2 daemon -h
usage: ros2 daemon [-h] Call `ros2 daemon <command> -h` for more detailed usage. ...
Various daemon related sub-commands
optional arguments:
-h, --help show this help message and exit
Commands:
start Start the daemon if it isn't running
status Output the status of the daemon
stop Stop the daemon if it is running
Call `ros2 daemon <command> -h` for more detailed usage.
$ ros2 daemon status
The daemon is running
实现
ros2
命令的源码可以在https://github.com/ros2/ros2cli上找到。
ros2
工具目前被实现为一个框架,可以通过插件进行扩展。
例如,sros2包提供了security
子命令,如果安装了sros2
包,该命令会被ros2
工具自动检测到。