Ubuntu和ROS
简介
发展:最初早起,ROS1--------》(2020年之后)ROS2全面使用。
关系:
Humble(ros2)(LTS,27年到期维护) ——Ubuntu 22.xx版本,
Jazzy(ros2)(29年到期维护)——Ubuntu 24.04版本
Rolling(ros2) 最新版本
ROS2:robot Operating System2,该机器人系统 可以运行在windows/linux/macOS等系统上的软件框架。
结构
workspace(工作空间)::项目代码存放地址
package(功能包)::项目源代码地址
node(节点)::ros运行最小单元,一个程序进程就是一个节点。
topic(话题)::异步单向通道,发布后,不知道订阅者是否收到,无应答无等待,
类似canopen协议的DOP方式,只发布指令,不管指令是否被接收,无应答。
也类似UDP传输协议:广播形式,只发布
service(服务)::客户端发起单次请求,服务端处理完毕后返回应答,一问一答的形式。
类似canopen协议的SOP工作模式,一问一答的的指令发布。
也类似TCP传输控制协议,传输信息都是经过问答握手形式进行。
interface(接口)::统一所有节点的发布指令的数据规范格式,发布指令可以查询接口,就能知道该指令如何发布
parameter(参数)::机器人全局配置参数的字典库
action(动作)::完整的执行流程,下发目标-》实时返回执行进度-》最终推送的执行结果
DDS(数据分发服务)::多设备协同运行控制,整机神经网络
Distributed Comunication(分布式通信)::多设备系统运行控制
以上就是ros系统的结构,通过结构清晰每一层的关系和逻辑控制。
环境
这篇文章及设计Linux系统下的ros2。
安装:可以直接在Linux系统笔记本上安装,Windows系统也可以借助虚拟机安装。
只需要注意对应Ubuntu的版本对应的ros2版本即可,sudo apt install ros-xx一键安装即可。
常用指令
命令跟结构紧密相关:命令结构形式:
ros2 + 模块名 + 动作 + 可选参数 + 目标名称
ros2固定前缀,
模块名(一级子命令):结构的分类:node、topic、service、param、bag、pkg、interface等
动作(二级子命令):list、info、echo、pub、call、get、set等
可选参数:-a、-o、--version、--rate等等
目标对象:具体的对应的节点名、话题名,接口名等等
以ros2自带的小海龟仿真模型举例展示指令的运用:
1、启动小海龟
ros2 run turtlesim turtlesim_node
2、启动键盘控制
ros2 run turtlesim turtle_teleop_key
启动小海龟通过键盘操控运动方向和移动速度等。
常规是通过py脚本一键启动所有相关服务:这样就可以全部把小海龟仿真系统全部启动。
在你的 Python Launch 文件(例如 turtlesim_launch.py)中,使用 ExecuteProcess 或特定动作来打开新终端。以下是针对 Ubuntu 默认终端(gnome-terminal)的配置示例:
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import ExecuteProcess
def generate_launch_description():
return LaunchDescription([
# 1. 启动海龟仿真节点
Node(
package='turtlesim',
executable='turtlesim_node',
name='sim'
),
# 2. 在新终端中启动键盘控制节点
# 注意:不同Linux发行版的终端命令不同,Ubuntu通常为 gnome-terminal
ExecuteProcess(
cmd=[
'gnome-terminal',
'--', # 分隔符,后面是具体执行的命令
'ros2', 'run', 'turtlesim', 'turtle_teleop_key'
],
output='screen'
)
])
在ubuntu系统新建.py文件,将启动脚本保存后,在终端启动:
查到海龟包名:

ros2 launch turtlesim turtlesim_launch.py
这样就全部启动小海龟仿真系统的节点。
1、功能包相关指令
1、ros2 pkg list 列出所有包
2、ros2 pkg list | grep "keyword" 查找特定过滤后的包,通过关键字查找
eg:查找小海龟功能包:
3、查看包内的可执行文件(节点)
如果你知道包名,想确认该包里有哪些可以运行的节点(Executable),使用以下命令:
ros2 pkg executables <package_name>
# 示例:查看 turtlesim 包下有哪些可执行文件
ros2 pkg executables turtlesim
查找包->查询可运行节点->运行节点
2、节点相关指令
1、ros2 launch 包名 xxx.py 启动一组通过python指令来启动的节点
2、ros2 node list 查询所有节点
3、ros2 node list | grep "keyword" 查询特定过滤的节点
4、ros2 node info /节点名 查询具体节点下的所有信息(订阅、发布、服务、接口、动作等等)
3、话题相关指令
1、ros2 topic list -t 查询所有话题及类型
2、ros2 topic echo /话题名 实时监听话题的数据信息:雷达信息、里程计数据、摄像头数据等
eg:海龟的坐标朝向信息

3、ros2 topic pub /话题名 发布话题,操控机器人运动等
eg:控制小海龟转圈

4、服务相关指令
服务用于同步请求-响应通信(如查询状态、触发一次性动作),例如:清除数据、新增话题、重置等等操作

1、ros2 service list -t 查询所有服务以及参数类型
2、ros2 service call /clear std_srvs/srv/Empty {} 清除小乌龟行走数据

3、ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.0, name: 'turtle2'}" 创建另一只下海龟

5. 参数配置 (Param)
参数用于在运行时动态调整节点配置。
1、ros2 param list 查询所有参数,
指定查询:ros2 param list /sim

2、ros2 param get /sim background_g 获取小海龟背景颜色值

3、ros2 param set /sim background_g 255 修改背景色为255

6. 动作监控 (Action)
动作用于长时间运行的任务,支持反馈和取消(如导航到目标点)。
1、查询动作接口
ros2 action list
2、查询节点中对应的action接口,就可以发送指令控制动作,例如:

7. 数据录制与回放 (Bag)
用于记录机器人运行时的传感器数据和状态,便于离线分析。
1、数据录制
ros2 bag record -a # 录制所有话题
ros2 bag record /turtle1/pose /turtle1/cmd_vel # 录制指定话题

2、回放数据
ros2 bag play <bag_file_name>

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)