node节点
ROS 中的每个节点都应该负责单一的、模块化的目的,例如控制车轮马达或发布来自激光测距仪的传感器数据。每个节点都可以通过主题、服务、操作或参数从其他节点发送和接收数据。
一个完整的机器人系统由许多协同工作的节点组成。在 ROS 2 中,单个可执行文件(C++ 程序、Python 程序等)可以包含一个或多个节点。
简单来说,节点就是一个功能模块。
- 运行节点:
ros2 run <package_name> <executable_name>
- 获取节点列表:
ros2 node list
- 获取节点信息:
ros2 node info <node_name>
topic通信
ROS 2 将复杂系统分解为许多模块化节点。topic是 ROS 的重要元素,它充当节点交换消息的总线。
一个节点可以向任意数量的主题发布数据,同时订阅任意数量的主题。
主题是数据在节点之间移动的主要方式之一,因此在系统的不同部分之间移动。
- 查看topic列表
ros2 topic list
- topic回显
ros2 topic echo <topic_name>
- topic详情
ros2 topic info /turtle1/cmd_vel
- topic数据类型
ros2 topic type <topic_name> /turtle1/cmd_vel
- 显示消息数据结构
ros2 interface show <topic消息名字>
- 发布topic消息
ros2 topic pub <topic_name> <msg_type> <args>
# example: 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}}"
service通信
service是 ROS 图中节点的另一种通信方式。服务基于调用和响应模型,而不是topic的发布者-订阅者模型。虽然topic允许节点订阅数据流并获得持续更新,但service仅在客户端专门调用它们时才提供数据。
- service列表
ros2 service list
- service的类型
服务具有描述服务的请求和响应数据的结构的类型。服务类型的定义类似于主题类型,除了服务类型有两部分:一个消息用于请求,另一个用于响应。
ros2 service type <service_name>
- 带类型的service列表
ros2 service list -t
- 查看特定类型的服务
ros2 service find <type_name>
- 查看服务类型的数据结构
ros2 service interface show <type_name>
- 调用service
ros2 service call <service_name> <type_name> <args>
# example: ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
- 查看ROS中已经定义好的数据类型
ros2 interface list