【智能系统项目开发与学习记录】ROS2基础(1)
前言
本系列博文是本人的学习记录,目的是为了方便个人今后的学习,使用,复习,不是专门教程,若学习,请移步其他大佬的博文。最后欢迎交流学习,若有错误,大佬轻喷。
一、ROS2 基础认知:先搞懂 “是什么”
1. ROS2 文件系统:软件的 “组织结构”
ROS2 的所有软件都靠功能包(Packages) 和描述文件(package.xml) 组织,就像电脑里 “文件夹 + 说明书” 的组合。
组成部分 | 通俗解释 | 重点作用 |
---|---|---|
功能包(Packages) | ROS2 的 “软件小盒子”,每个盒子装一个小功能(比如 “控制小海龟”“读取传感器数据”) | 存放节点源代码、配置文件、消息定义等,是开发的基本单元 |
描述文件(package.xml) | 功能包的 “说明书”,写在每个功能包里 | 记录功能包的名字、版本、作者、依赖(依赖 = 这个包需要的其他工具,没依赖用不了),让系统能正确调用它 |
重点:
package.xml
一定要有!没有它,系统找不到功能包,也无法处理依赖。
2. ROS2 基本术语:搞懂 “谁在干什么”
ROS2 里的 “数据传输” 和 “互动” 靠以下核心术语,用 “日常场景” 类比理解:
术语 | 通俗类比 | 核心作用 |
---|---|---|
话题(Topic) | 小区里的 “广播通道” | 节点之间单向传数据的通道(比如传感器→控制节点传温度数据),数据格式由 “消息” 定 |
发布者(Publisher) | 往广播里说话的人 | 向 “话题” 里发数据的节点 |
订阅者(Subscriber) | 听广播的人 | 从 “话题” 里拿数据的节点 |
服务(Service) | 去商店 “买东西” | 节点之间双向同步互动(比如节点 A 问 “现在速度多少?”,节点 B 回复 “5m/s”),有 “请求” 和 “响应” |
服务服务器(Service Server) | 商店老板 | 接收 “请求”,返回 “响应” 的节点 |
服务客户端(Service Client) | 买东西的顾客 | 发送 “请求”,等待 “响应” 的节点 |
3. ROS2 常用文件:开发要用到的 “关键文件”
每个文件都有明确用途,记清 “存哪里、干什么” 即可:
文件名 | 存放位置 | 通俗作用 |
---|---|---|
urdf 文件 | 功能包内 | 机器人的 “身体说明书”:记录机器人有几个连杆(胳膊 / 腿)、关节怎么动、外观和碰撞规则 |
msg 文件 | 功能包的msg 文件夹 | 话题的 “数据格式表”:定义话题传什么数据(比如传温度,定义 “温度是整数还是小数”) |
srv 文件 | 功能包的srv 文件夹 | 服务的 “对话格式表”:分 “请求” 和 “响应” 两部分,中间用--- 隔开(比如请求 “查速度”,响应 “5m/s”) |
package.xml | 功能包根目录 | 功能包的 “身份卡”:记录名字、版本、作者、依赖(前面讲过的 “说明书”) |
CmakeLists.txt | 功能包根目录 | 编译的 “指挥手册”:告诉系统怎么把代码变成可执行文件(Python 开发可暂时不深入) |
launch 文件 | 功能包内(常建launch 文件夹) | 机器人的 “一键启动器”:一次启动多个节点 / 服务(不用手动一个个开,超方便) |
重点:
msg
和srv
别搞混!msg
给话题用,srv
给服务用;launch
文件是提高效率的关键。
二、日常开发流程总结
每次打开新终端后的操作:
# 1. 进入容器
docker exec -it -u ubuntu -w /home/ubuntu humble /bin/bash# (如果已配置 ~/.bashrc,则 ROS 环境已自动加载)
# 2. 验证
echo $ROS_DISTRO
ros2 --help# 3. 开始你的 ROS 2 开发!
ros2 run turtlesim turtlesim_node
启动容器(如果容器没在运行)
如果重启了电脑,或容器被停止了,需要先启动:
# 查看容器状态
docker ps -a# 如果 STATUS 是 Exited,启动它
docker start humble# 然后再进入
docker exec -it -u ubuntu -w /home/ubuntu humble /bin/bash