当前位置: 首页 > news >正文

【智能系统项目开发与学习记录】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文件夹)机器人的 “一键启动器”:一次启动多个节点 / 服务(不用手动一个个开,超方便)

重点:msgsrv别搞混!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

http://www.dtcms.com/a/389796.html

相关文章:

  • 人工智能面试题:什么是CRF条件随机场
  • [x-cmd] 命令式交互、CLI/TUI 设计与 LLM
  • 基于AMBA总线协议的Verilog语言模型实现
  • 【Agent项目复现】OpenManus复现
  • 高校AI虚拟仿真实训平台软件解决方案
  • Vue3 + Ant Design Vue 实现统一禁用样式管理方案,禁用状态下已有值颜色区分(CSS 变量方案)
  • Ubuntu 24.04部署MongoDB
  • 8.1-spring 事务-声明式事务(使用)
  • Vue3》》组件继承 extends
  • 无人系统在边境管控的应用探讨
  • 一个典型的mysql数据库连接池初始化函数
  • novel英文单词学习
  • 数据结构:树及二叉树--堆(下)
  • TDengine 聚合函数 STDDEV 用户手册
  • ARM--启动代码
  • openharmony1.1.3 通过i2c进行温湿度采集
  • 虚拟仿真技术赋能国土资源监测教育,破解生态与安全人才培养困局
  • Vim 详细使用方法与运维工作常用操作
  • python基础数据分析与可视化
  • DeepSort学习与实践-原理学习
  • 贪心算法应用:多重背包启发式问题详解
  • 使用C#开发的控笔视频生成小程序
  • [重学Rust]之ureq
  • 水下机器人专用绝缘监测装置
  • C++中std::map容器中元素删除方法汇总
  • JavaEE 初阶第二十三期:网络原理,底层框架的“通关密码”(三)
  • 打工人日报#20250918
  • Git本地\远程分支区分查找
  • 从零开始手写机器学习框架:我的深度学习之旅——开启深度学习的底层探索
  • QT的部件