【ROS】ROS2命令行工具详解

【ROS】郭老二博文之:ROS目录

1、简介

ROS1中每个功能都使用ros开头的命令行工具,如:roscore、rosrun等
ROS2中只有一个命令行工具ros2,各个功能模块通过参数子命令来实现

~$ ros2 -h
用法: ros2 [-h] [--use-python-default-buffering]   ……

选项:
  -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  -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

效果:
【ROS】ROS2命令行工具详解_第1张图片

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

(未完待续……)

、ros2

.1 说明

.2 用法

.3 示例

你可能感兴趣的:(ROS,ROS,ROS2)