ROS2常用指令学习笔记(适用于humble)

零、ROS2的命令树

ros2
├── action
│   ├── cancel         # 取消action
│   ├── send_goal      # 发送action目标
│   └── show           # 显示action信息
│
├── bag
│   ├── compress       # 压缩bag文件
│   ├── decompress     # 解压缩bag文件
│   ├── info           # 显示bag文件信息
│   ├── play           # 播放bag文件
│   ├── record         # 记录bag文件
│   └── replay         # 回放bag文件
│
├── component
│   ├── kill           # 杀死组件
│   ├── list           # 列出组件
│   ├── load           # 加载组件
│   ├── restart        # 重启组件
│   ├── set            # 设置组件参数
│   ├── status         # 显示组件状态
│   ├── unset          # 删除组件参数
│   └── info           # 显示组件信息
│
├── daemon
│   ├── start          # 启动daemon
│   ├── stop           # 停止daemon
│   ├── status         # 显示daemon状态
│   └── restart        # 重启daemon
│
├── doctor
│   ├── check          # 检查ROS 2诊断信息
│   └── info           # 显示ROS 2诊断信息
│
├── extension
│   ├── call           # 调用扩展功能
│   ├── list           # 列出扩展功能
│   ├── load           # 加载扩展功能
│   ├── show           # 显示扩展功能信息
│   └── unload         # 卸载扩展功能
│
├── interface
│   ├── list           # 列出接口
│   └── show           # 显示接口信息
│
├── lifecycle
│   ├── change_state   # 更改生命周期状态
│   ├── get_state      # 获取生命周期状态
│   └── set_state      # 设置生命周期状态
│
├── logging
│   ├── get_logger_level     # 获取logger级别
│   ├── set_level            # 设置logger级别
│   └── set_logger_level     # 设置logger级别
│
├── msg
│   └── show           # 显示消息定义
│
├── node
│   ├── cleanup        # 清理节点
│   ├── info           # 显示节点信息
│   ├── kill           # 杀死节点
│   ├── list           # 列出节点
│   ├── log            # 记录节点信息
│   ├── monitor        # 监控节点
│   ├── send_message   # 发送节点间消息
│   ├── set            # 设置节点参数
│   ├── unset          # 删除节点参数
│   └── wait           # 等待节点
│
├── param
│   ├── delete         # 删除参数
│   ├── describe       # 显示参数描述
│   ├── dump           # 导出参数
│   ├── get            # 获取参数
│   ├── list           # 列出参数
│   ├── load           # 导入参数
│   └── set            # 设置参数
│
├── qos
│   ├── get            # 获取QoS配置
│   └── set            # 设置QoS配置
│
├── run
│   ├── launch         # 运行launch文件
│   └── python         # 运行Python脚本
│
├── service
│   ├── call           # 调用服务
│   ├── find           # 查找服务
│   ├── info           # 显示服务信息
│   ├── list           # 列出服务
│   └── type           # 显示服务类型
│
├── srv
│   └── show           # 显示服务定义
│
├── topic
│   ├── bw             # 显示主题带宽
│   ├── echo           # 回显主题数据
│   ├── find           # 查找主题
│   ├── hz             # 显示主题频率
│   ├── info           # 显示主题信息
│   ├── list           # 列出主题
│   ├── pub            # 发布主题数据
│   ├── type           # 显示主题类型
│   └── relay          # 中继主题
│
├── type
│   ├── export         # 导出类型
│   ├── import         # 导入类型
│   ├── list           # 列出类型
│   └── show           # 显示类型定义
│
├── pkg
│   ├── create         # 创建package
│   ├── describe       # 显示package描述
│   ├── executables    # 列出可执行文件
│   ├── list           # 列出packages
│   ├── paths          # 显示package路径
│   ├── prefix         # 显示package前缀
│   └── xml            # 显示package XML
│
├── rosbag2_migration
│   ├── check          # 检查ROS 1 bag文件
│   ├── info           # 显示ROS 1 bag文件信息
│   ├── merge          # 合并ROS 1 bag文件
│   ├── migrate        # 迁移ROS 1 bag文件
│   └── split          # 分离ROS 1 bag文件
│
├── security
│   ├── create_key     # 创建密钥
│   ├── create_permission    # 创建权限
│   ├── grant_permission     # 授予权限
│   ├── info           # 显示安全信息
│   ├── revoke_permission    # 撤销权限
│   └── set_permission  # 设置权限
│
└── version             # 显示ROS 2版本信息

一、ROS2的结构

  • ROS2的功能由节点和功能包完成,节点相当于是机器人操作系统的组织,功能包相当于是由节点组成的器官。
  • 下面的指令运行前提是要有一个以上的节点在运行。

1. 节点

  1. 运行节点:
ros2 run 功能包名 节点名 
  • 例如:启动turtlesim功能包下的turtlesim_node节点
ros2 run turtlesim turtlesim_node
  • 查看当前运行的节点:
ros2 node list
  • 查看某个节点的详细信息(在各个通信中扮演的身份):
ros2 node info node_name
  • 例如:
ros2 node info /turtlesim # 查看/turtlesim节点的详细信息,将显示该节点的身份
  • 输出结果形似:
Subscribers:
...
Publishers:
...
Service Servers:
...
Service Clients:
...
Action Servers:
...
Action Clients:
...

2. 功能包

  • 创建python功能包,其中包含一个节点。(先cd到工作空间的/src目录下)
ros2 pkg create 功能包名 --build-type ament_python --dependencies rclpy --node-name 节点名
  • 查看所有安装的功能包
ros2 pkg list
  • 查看包中所有节点的列表
ros2 pkg executable 功能包名
  • 功能包的目录如下:其中,my_package是功能包的主要代码和节点,my_package_msgs是定义自定义消息和服务的功能包,my_package_tools是提供辅助工具的功能包。
my_package/
├── my_package
│   ├── include
│   ├── launch
│   ├── msg
│   ├── package.xml
│   ├── src
│   └── srv
├── my_package_msgs
│   ├── action
│   ├── CMakeLists.txt
│   ├── include
│   ├── msg
│   ├── package.xml
│   └── srv
└── my_package_tools
    ├── launch
    ├── package.xml
    └── scripts

二、ROS2的通信机制:

  • 如果把功能包比作器官,把节点比作组织,那通信机制就是神经系统和循环系统。
  • 下面的指令是如何查看节点之间的通信,以及如何在命令行中修改参数来人为影响通信。
  • 通信接口
    • 话题通信
      • 话题类的消息类型文件后缀为.msg
      • 话题通信是多对多的通信机制,是一种异步通信,接收端不知道消息是由谁发送的,发送端也不知道发出去的消息会被谁接收。
      • 话题相当于一个中间商,发布者将信息发到话题上,订阅者通过订阅不同话题获取不同信息。
    • 服务通信
      • 服务类的消息类型文件后缀为.srv,请求与反馈数据之间使用"—“分隔开,请求的数据在”—“上方定义,反馈的数据在”—"下方定义
      • 服务通信是一对多的通信机制,是一种同步通信,客户端向服务端发送请求,服务端向客户端返回响应。
      • 服务相当于一个晚自习,服务端相当于老师,客户端相当于学生,只有学生向老师请教问题时,老师才会做出回答。而且老师只有一个,但老师的学生可以有很多个,这就明确了一个服务端对应多个客户端
    • 动作通信
      • 动作通信是一对多的通信机制,是一种同步通信,作为动作客户端的节点将目标发送到动作服务端节点,作为动作服务端的节点确认目标并进行实时反馈,最后返回结果。
      • 这个比较抽象
      • 请求、反馈、目标数据之间使用"—“分隔开,请求的数据在第一个”—“上方定义,反馈的数据在两个”—“之间定义,返回的结果数据在第二个”—"下方定义。动作类的消息类型文件后缀为.action。
# The desired heading in radians
float32 theta
---
# The angular displacement in radians to the starting position
float32 delta
---
# The remaining rotation in radians
float32 remaining

1. 话题通信

  • 查看目前存在的话题列表,并显示话题类型
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 info 话题名称
  • 例如:
ros2 topic info /turtle1/pose
  • 结果形如
Type: turtlesim/msg/Pose
Publisher count: 3
Subscription count: 0
  • 查看某个话题的发布频率
ros2 topic hz 话题名称
  • 查看某个话题的传输带宽
ros2 topic bw 话题名称
  • 发布一次话题消息
ros2 topic pub --once 话题名 话题类型 "话题消息"  
  • 以固定频率发布话题消息
ros2 topic pub --rate 频率 话题名 话题类型 "话题消息"  

2. 服务通信

  • 查看服务列表和服务消息类型(消息类型是[]中的内容)
ros2 service list -t
  • 结果形如
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
  • 查找使用某一具体服务消息类型的所有服务
ros2 service find 数据类型
  • 发送服务请求
ros2 service call 服务名称 服务消息类型 "请求消息"

3. 动作服务

  • 查看动作列表和动作类型(中括号内)
ros2 action list -t
  • 查看动作信息
ros2 action info 动作名
  • 例如:
ros2 action info /turtle1/rotate_absolute
  • 发送动作请求并查看反馈( 参数–feedback用于查看此目标的反馈)
ros2 action send_goal 动作名 动作消息类型 "动作消息" --feedback

4. 所有的通信接口

  • 查看所有通信接口
ros2 interface list
  • 查看某个通信接口的消息类型
ros2 interface show 接口名称
  • 查看某个功能包中的所有通信接口
ros2 interface package 功能包名

5. 参数

  • 查看所有参数的列表
ros2 param list
  • 查询某个参数的数据类型和当前值
ros2 param get node_name parameter_name
  • 修改某个参数的值
ros2 param set node_name parameter_name value
  • 将某个节点的参数保存到参数文件中
ros2 param dump node_name
  • 重新加载parameter_flie文件中的所有参数值,赋值给节点
ros2 param load /turtlesim turtlesim.yaml # 加载文件参数值

参考文献:https://blog.youkuaiyun.com/weixin_45485619/article/details/128631829
https://www.ros.org

<think>好的,我需要回答用户关于Ubuntu 22.04.4适用的ROS 2版本的问题。根据用户提供的引用内容,引用[1]提到Ubuntu 22.04对应的ROS2版本是Humble Hawksbill。不过用户现在询问的是Ubuntu 22.04.4,我需要确认小版本更新是否影响ROS版本的选择。通常,Ubuntu的小版本更新(如22.04.1到22.04.4)主要是安全更新和错误修复,不会改变系统的主要版本,因此ROS的版本应该保持不变。因此,适用于Ubuntu 22.04.4的ROS2版本仍然是Humble Hawksbill。 另外,引用[2]提到ROS1不再支持Ubuntu20.04之后的版本,而ROS2在Ubuntu22.04上有更好的支持。这也支持推荐Humble Hawksbill作为合适的版本。用户可能需要知道安装方法或验证步骤,可以引用[3]中的学习笔记作为参考。同时,用户可能还想了解Humble Hawksbill的维护周期或其他兼容性问题,但根据现有引用,Humble是官方推荐的版本,适用于Ubuntu22.04系列的所有小版本,包括22.04.4。 总结:推荐ROS 2 Humble Hawksbill,并附上安装和验证步骤,引用相关参考资料。</think>根据ROS官方版本对应关系,**Ubuntu 22.04.4 LTS(Jammy Jellyfish)对应的推荐ROS 2版本为Humble Hawksbill**。Ubuntu的小版本更新(如22.04.1至22.04.4)通常仅包含安全补丁和稳定性改进,不影响系统与ROS 2版本的兼容性[^1][^2]。 ### 版本验证与安装建议 1. **版本验证** Ubuntu 22.04的长期支持(LTS)性质保证了其与Humble Hawksbill的兼容性。可通过以下命令确认系统版本: ```bash lsb_release -a ``` 输出中应包含`Ubuntu 22.04.4 LTS`。 2. **安装流程** 参考官方Humble安装指南,核心步骤包括: - 设置软件源: ```bash sudo apt update && sudo apt install curl curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2.list' ``` - 安装完整版ROS 2: ```bash sudo apt update sudo apt install ros-humble-desktop ``` 3. **兼容性说明** - **ROS 1与Ubuntu 22.04**:ROS 1已不再官方支持Ubuntu 20.04之后的版本,建议直接使用ROS 2。 - **功能覆盖**:ROS 2 Humble已包含核心功能,但部分ROS 1的包可能尚未完全移植,需通过`ros1_bridge`兼容层调用[^3]。 ### 学习资源推荐 - 入门教程可参考《Ubuntu22.04环境下的ROS2学习笔记2》中的turtlesim示例。 - 官方文档:[Humble Hawksbill文档](https://docs.ros.org/en/humble/)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊君爱摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值