1、简介
ROS1中每个功能都使用ros开头的命令行工具,如:roscore、rosrun等
ROS2中只有一个命令行工具ros2,各个功能模块通过参数子命令来实现
~$ ros2 -h
用法: ros2 [-h] [--use-python-default-buffering] <command> ……
选项:
-h, --help 帮助信息
--use-python-default-buffering 使用python提供的缓冲作为标准输出的缓冲(有啥作用?)
子命令:
action 动作
bag 保存恢复运行状态
component 组件
daemon 守护程序
doctor 检查ROS设置和其他潜在问题
interface 显示有关ROS接口的信息
launch 运行启动文件
lifecycle 生命周期相
multicast 多播
node 节点
param 参数
pkg 软件包
run 运行指定程序包中可执行文件
security 安全
service 服务
topic 主题
wtf 使用“wtf”作为“doctor”的别名
调用“ros2 <command> -h”,可以查看每个子命令的详细用法
2、ros2 run
2.1 说明
运行一个可执行程序
2.2 用法
~$ ros2 run -h
用法: ros2 run [-h] [--prefix PREFIX] package_name executable_name [argv...]
参数:
package_name 功能包名字
executable_name 可执行程序名字
argv... 传入可执行程序的参数
选项:
-h, --help 帮助信息
--prefix PREFIX 前缀PREFIX命令,该命令应位于可执行文件之前。如果命令包含空格,则必须用引号括起来
(例如 --prefix 'gdb -ex run --args').
2.3 示例
在终端1中启动小海龟
$ ros2 run turtlesim turtlesim_node
在终端2中启动键盘控制节点
$ ros2 run turtlesim turtle_teleop_key
效果:
3、ros2 node
3.1 说明
查看节点列表及节点信息
3.2 用法
~$ ros2 node -h
用法: ros2 node [-h] <command> -h
选项:
-h, --help 帮助信息
子命令:
info 输出指定节点的详细信息
list 输出已经运行的所有节点
使用`ros2 node <command> -h` 进一步查看子命令的详细用法
3.2.1 ros2 node info
输出指定节点的详细信息
~$ ros2 node info -h
用法: ros2 node info [-h] [--spin-time SPIN_TIME] [-s] [--no-daemon]
[--include-hidden]
node_name
参数:
node_name 指定节点的名字
参数:
-h, --help 帮助信息
--spin-time SPIN_TIME 等待发现的旋转时间(以秒为单位)(仅适用于未使用已运行的守护程序的情况)
啥是SPIN_TIME???
-s, --use-sim-time 启用ROS模拟时间
--no-daemon 不生成也不使用已经运行的守护进程
--include-hidden 显示隐藏的主题、服务和操作
3.2.2 ros2 node list
输出已经运行的所有节点
~$ ros2 node list -h
用法: ros2 node list [-h] [--spin-time SPIN_TIME] [-s] [--no-daemon] [-a]
[-c]
选项:
-h, --help 帮助信息
--spin-time SPIN_TIME 等待发现的旋转时间(以秒为单位)(仅适用于未使用已运行的守护程序的情况)
啥是SPIN_TIME???
-s, --use-sim-time 使能ROS模拟时间
--no-daemon 不生成也不使用已经运行的守护进程
-a, --all 显示所有隐藏的节点
-c, --count-nodes 输出节点个数
3.3 示例
先启动两个节点,否则没有节点信息可打印
在终端1中启动小海龟
$ ros2 run turtlesim turtlesim_node
在终端2中启动键盘控制节点
$ ros2 run turtlesim turtle_teleop_key
在终端3中查看节点信息
1)列出所有节点
~$ ros2 node list
/teleop_turtle
/turtlesim
2)列出所有节点,包括隐藏的节点
~$ ros2 node list -a
/_ros2cli_daemon_0_dc38f22e498346f3ae67fb1689c0c662
/teleop_turtle
/turtlesim
3)输出节点的个数
~$ ros2 node list -c
2
4)输出节点的个数,包括隐藏的节点
~$ ros2 node list -c -a
3
5)输出指定节点的详细信息
~$ ros2 node info /teleop_turtle
/teleop_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service Servers:
/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
……
/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
Action Servers:
Action Clients:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
6)输出指定节点的详细信息,包含隐藏的主题、服务和操作
~$ ros2 node info /teleop_turtle --include-hidden
/teleop_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/turtle1/rotate_absolute/_action/feedback: turtlesim/action/RotateAbsolute_FeedbackMessage
/turtle1/rotate_absolute/_action/status: action_msgs/msg/GoalStatusArray
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service Servers:
/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
……
/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
/turtle1/rotate_absolute/_action/cancel_goal: action_msgs/srv/CancelGoal
/turtle1/rotate_absolute/_action/get_result: turtlesim/action/RotateAbsolute_GetResult
/turtle1/rotate_absolute/_action/send_goal: turtlesim/action/RotateAbsolute_SendGoal
Action Servers:
Action Clients:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
4、ros2 topic
4.1 说明
话题相关的命令:查看话题列表及详细信息、发布话题等操作
4.2 用法
~$ ros2 topic -h
用法: ros2 topic [-h] [--include-hidden-topics] <command> [-h]
选项:
-h, --help 帮助信息
--include-hidden-topics 包含隐藏的话题
子命令:
bw 按主题显示使用的带宽
delay 显示主题相对于时间戳的延迟
echo 将消息打印到屏幕
find 按类型查找主题
hz 显示主题的发布率
info 打印有关活动主题的信息
list 列出活动主题
pub 将数据发布到主题
type 打印主题或字段类型
显示子命令的详细信息:ros2 topic <command> -h
4.2.1 ros2 topic bw
按主题显示使用的带宽
-h 打印帮助信息(后面不再赘述)
--window WINDOW, -w WINDOW 设置统计次数,当超过这个次数后,就不再打印带宽信息,默认是100
--spin-time SPIN_TIME 等待发现的旋转时间(以秒为单位)(仅适用于未使用已运行的守护程序的情况)
-s, --use-sim-time 使能ROS模拟时间
4.2.2 ros2 topic delay
示主题相对于时间戳的延迟
--window WINDOW, -w WINDOW 设置计算速率的统计次数,当超过这个次数后,就不再打印,默认是10000
--spin-time SPIN_TIME 同上
-s, --use-sim-time 同上
4.2.3 ros2 topic hz
显示主题的发布率
-w WINDOW, --window=WINDOW,统计屏率
–filter=EXPR, 过滤
–wall-time 使用现实时间
--spin-time SPIN_TIME 同上
-s, --use-sim-time 同上
4.3 示例
先启动两个节点,否则没有话题信息可打印
在终端1中启动小海龟
$ ros2 run turtlesim turtlesim_node
在终端2中启动键盘控制节点
$ ros2 run turtlesim turtle_teleop_key
在终端3中查看话题信息
1)列出所有话题
~$ ros2 topic list
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
2)打印指定话题的带宽
~$ ros2 topic bw /turtle1/pose
Subscribed to [/turtle1/pose]
1.51 KB/s from 62 messages
Message size mean: 0.02 KB min: 0.02 KB max: 0.02 KB
1.51 KB/s from 100 messages
Message size mean: 0.02 KB min: 0.02 KB max: 0.02 KB
……
3)打印话题内容
~$ ros2 topic echo /turtle1/pose
x: 0.6691338419914246
y: 3.5571625232696533
theta: 2.6768147945404053
linear_velocity: 0.0
angular_velocity: 0.0
---
4)打印话题频率
~$ ros2 topic hz /turtle1/pose
average rate: 62.492
min: 0.015s max: 0.017s std dev: 0.00051s window: 64
average rate: 62.506
min: 0.015s max: 0.017s std dev: 0.00051s window: 127
……
5)打印话题信息
~$ ros2 topic info /turtle1/pose
Type: turtlesim/msg/Pose
Publisher count: 1
Subscription count: 0
6)打印话题详细信息
~$ ros2 topic info /turtle1/pose --verbose
Type: turtlesim/msg/Pose
Publisher count: 1
Node name: turtlesim
Node namespace: /
Topic type: turtlesim/msg/Pose
Endpoint type: PUBLISHER
GID: 01.0f.76.64.3a.29.f0.3d.01.00.00.00.00.00.1c.03.00.00.00.00.00.00.00.00
QoS profile:
Reliability: RELIABLE
History (Depth): UNKNOWN
Durability: VOLATILE
Lifespan: Infinite
Deadline: Infinite
Liveliness: AUTOMATIC
Liveliness lease duration: Infinite
Subscription count: 0
7)发布话题
$ 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}}"
5、ros2 service
5.1 说明
服务相关的命令:列出所有服务、呼叫服务等
5.2 用法
~$ ros2 service -h
用法: ros2 service [-h] [--include-hidden-services] <command> [-h]
选项:
-h, --help 帮助信息
--include-hidden-services 包含隐藏的服务
子命令:
call 呼叫一个服务
find 输出给定类型type的服务列表
list 输出所有服务列表
type 输出服务的类型
查看子命令的详细使用方法:ros2 service <command> -h
5.3 示例
先启动两个节点
在终端1中启动小海龟
$ ros2 run turtlesim turtlesim_node
在终端2中启动键盘控制节点
$ ros2 run turtlesim turtle_teleop_key
在终端3中操作服务相关命令
1)输出所有服务
~$ ros2 service list --include-hidden-services
/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
……
/turtle1/rotate_absolute/_action/cancel_goal
……
/turtlesim/describe_parameters
……
2)输出指定类型type的服务
~$ ros2 service find turtlesim/srv/Spawn
/spawn
3)输出服务的类型
~$ ros2 service type /spawn
turtlesim/srv/Spawn
4)呼叫一个服务
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
6、ros2 action
6.1 说明
动作action相关的命令:列出动作、查看动作详细信息、发送动作
6.2 用法
子命令:
info 输出指定动作的信息
list 输出所有的动作
send_goal 发送动作
6.3 示例
先启动两个节点
在终端1中启动小海龟
$ ros2 run turtlesim turtlesim_node
在终端2中启动键盘控制节点
$ ros2 run turtlesim turtle_teleop_key
在终端3中操作动作相关命令
1)输出所有动作
~$ ros2 action list
/turtle1/rotate_absolute
2)输出指定动作的信息
~$ ros2 action info /turtle1/rotate_absolute
Action: /turtle1/rotate_absolute
Action clients: 1
/teleop_turtle
Action servers: 1
/turtlesim
3)发送动作
$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "theta: 3"
7、ros2 bag
7.1 说明
保存恢复运行状态,实现数据的录制与播放
7.2 用法
~$ ros2 bag -h
用法: ros2 bag [-h] <command> ...
子命令:
convert 给定一个输入包,写出一个具有不同设置的新包
info 输出包bag的信息
list 输出所有的bag
play 播放(恢复运行)一个bag
record 录制(保存)一个bag
reindex 重建包的元数据文件
子命令详细用法:ros2 bag <command> -h
7.3 示例
先启动两个节点
在终端1中启动小海龟
$ ros2 run turtlesim turtlesim_node
在终端2中启动键盘控制节点
$ ros2 run turtlesim turtle_teleop_key
在终端3中操作录制和播放bag的相关命令
$ ros2 bag record /turtle1/cmd_vel
$ ros2 bag play rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3