ROS 2官方文档(基于humble版本)学习笔记(二)

今天继续总结CLI 工具章的学习

理解节点(node)

ROS 2图是一个ROS 2元件同时处理数据的网络,如果将它们全部映射并可视化它们,则包括所有可执行文件以及它们之间的连接。
Alt
ROS中的每个节点(node)都应该只为了单个的、模块化的目的而设计的,例如控制车轮电动机或从激光测距仪发布传感器数据。每个节点都可以通过主题(topic),服务(service),动作(action)或参数(parameters)从其他节点发送和接收数据。在ROS 2中,一个可执行程序(c++或python程序)可以包含一个或多个节点(node)。

ros2 run

此命令启动一个包中的可执行程序:

ros2 run <package_name> <executable_name>
ros2 node list

此命令展示所有运行中的节点的名字。常用来查找你想要交互或跟踪的节点。

ros2 node list
重映射(remap)

此参数用来重新定义默认的节点属性(比如节点名,话题名,服务名)为用户指定的值。

ros2 node info

此命令用于获取节点更多信息。通常包括订阅消息者们(subscriber),发布消息者(publiser),服务(service)和动作(action)。

ros2 node info <node_name>

/turtlesim节点信息如下:

/turtlesim
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Service Servers:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
    /turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
    /turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
    /turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
    /turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

/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/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Service Clients:

  Action Servers:

  Action Clients:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute

理解话题(topic)

话题是ROS图的一个至关重要的元素,扮演着节点间用于交换信息的总线的角色。
Alt

rqt_graph

在一个终端执行rqt_graph或者执行rqt后选择菜单Plugins > Introspection > Node Graph
Alt
上图描述了/turtlesim节点和/teleop_turtle节点如何在一个话题上通信的。/teleop_turtle节点发布数据到/turtle1/cmd_vel话题,/turtlesim节点订阅这个话题来接收数据。

ros2 topic list

此命令用于显示当前活动的所有话题。加上-t参数会在[]中显示话题的类型。

hugo@vm-ubuntu1:~$ ros2 topic list -t
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]

ros2 topic echo

此命令用来查看正在被发布的话题数据。
如下图所示,刚开始没有输出任何数据,他在等待/teleop_turtle发布信息。在运行turtle_teleop_key的终端按键控制乌龟运动,这时echo的终端就会输出信息了。

ros2 topic echo <topic_name>

Alt
在rqt_graph界面去掉工具栏中Hide:Debug前面的勾,就可以看到以/_ros2cli_开头的一个节点就是刚才执行的echo命令。
Alt

ros2 topic info

此命令也可以显示话题的类型、订阅者数量和发布者数量。

hugo@vm-ubuntu1:~$ ros2 topic info /turtle1/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 2

ros2 interface show

此命令用于查看消息类型的具体定义。

hugo@vm-ubuntu1:~$ ros2 interface show geometry_msgs/msg/Twist
# This expresses velocity in free space broken into its linear and angular parts.

Vector3  linear
	float64 x
	float64 y
	float64 z
Vector3  angular
	float64 x
	float64 y
	float64 z

ros2 topic pub

此命令用于直接发布一个话题消息。
–once 是可选参数,意思是”发布一个消息然后退出“。

ros2 topic pub <topic_name> <msg_type> '<args>'

Alt
–rate 1参数表示以1Hz的稳定频率发布命令。效果如下图:
Alt
可以使用如下命令查看乌龟的位置信息,可以看出是由turtlesim发布,echo命令订阅的。

ros2 topic echo /turtle1/pose

Alt

ros2 topic hz

此命令用来查看正在发布数据的频率。

ros2 topic hz /turtle1/pose

Alt
可以在一个终端执行刚才的发布/turtle1/cmd_vel,在另一个终端打印发布频率。
Alt

Clean up

在每个命令行窗口执行Ctrl+C终结他们。

理解服务(service)

服务是在ROS图中另一种节点之间通讯的方法。与发布-订阅模式的话题相对,服务是基于请求-应答模式的。虽然话题允许节点订阅数据流并获取连续更新,服务仅在客户端专门调用时才能提供数据。
Alt

ros2 service list

启动turtlesim_node和turtle_teleop_key后,执行ros2 service list后如下图显示:

hugo@vm-ubuntu1:~$ ros2 service list
/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
/teleop_turtle/get_parameter_types
/teleop_turtle/get_parameters
/teleop_turtle/list_parameters
/teleop_turtle/set_parameters
/teleop_turtle/set_parameters_atomically
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically

可以看到两个节点的服务里都包含6个”parameter“的服务,ROS 2 中几乎每个节点都有这些基础设施服务,参数是基于这些服务构建的。

ros2 service type

此命令可以查看一个服务的请求和响应的数据的结构定义。服务类型定义与话题类型相似,只是由请求消息和响应消息两部分定义。

ros2 service type <service_name>
ros2 service list -t

此命令可以用来显示所有活动状态的服务及其类型定义。其中-t是–show-types的缩写。

hugo@vm-ubuntu1:~$ ros2 service list -t
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
/teleop_turtle/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/teleop_turtle/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/teleop_turtle/get_parameters [rcl_interfaces/srv/GetParameters]
/teleop_turtle/list_parameters [rcl_interfaces/srv/ListParameters]
/teleop_turtle/set_parameters [rcl_interfaces/srv/SetParameters]
/teleop_turtle/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]
/turtle1/set_pen [turtlesim/srv/SetPen]
/turtle1/teleport_absolute [turtlesim/srv/TeleportAbsolute]
/turtle1/teleport_relative [turtlesim/srv/TeleportRelative]
/turtlesim/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/turtlesim/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/turtlesim/get_parameters [rcl_interfaces/srv/GetParameters]
/turtlesim/list_parameters [rcl_interfaces/srv/ListParameters]
/turtlesim/set_parameters [rcl_interfaces/srv/SetParameters]
/turtlesim/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]

ros2 service find

此命令用来查找所有指定类型的服务。

hugo@vm-ubuntu1:~$ ros2 service find std_srvs/srv/Empty
/clear
/reset
ros2 interface show

此命令用来显示类型的结构定义。

hugo@vm-ubuntu1:~$ ros2 interface show turtlesim/srv/Spawn
float32 x
float32 y
float32 theta
string name # Optional.  A unique name will be created and returned if this is empty
---
string name

”—“用来分隔请求结构(上面)响应结构(下面)。

ros2 service call

此命令是调用服务也就是向服务发送请求。

ros2 service call <service_name> <service_type> <arguments>

在写参数时需要特别注意是遵循YAML语法,冒号后面需要加空格,否则会报错。
Alt

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值