ROS2从零入门:ROS 2 启动 + CMake 入门
不用懂原理跟着敲5分钟就能跑起来看完你就知道这俩东西是干啥的了。先搞懂这俩东西是啥用最直白的话说ROS 2机器人专用的软件全家桶里面有一堆现成的小程序叫节点比如摄像头驱动、导航、画图等等。命令行启动就像你双击桌面上的图标打开软件只不过 ROS 2 不用双击在黑窗口终端里输命令打开。CMake如果你自己写了代码它帮你把代码变成能双击打开的程序相当于打包工具。就这么简单不用记那些复杂名词。第一部分启动一个现成的 ROS 2 程序30秒搞定我们用 ROS 2 自带的小海龟模拟器做例子不用写一行代码。第一步打开终端按Ctrl Alt T会弹出一个黑窗口这就是终端我们所有命令都输在这里。第二步告诉系统我要用 ROS 2每次新开终端第一行先输这个相当于唤醒ROS 2source /opt/ros/humble/setup.bash 小提示如果你装的不是 humble 版本就把 humble 换成你装的版本名比如 jazzy。 如果嫌每次都输麻烦我最后告诉你怎么一次性搞定。第三步启动小海龟窗口输完上面的命令再输ros2 run turtlesim turtlesim_node按回车你会看到弹出一个蓝色窗口中间有个小海龟。恭喜你已经成功启动了第一个 ROS 2 程序第四步用键盘控制海龟现在海龟还不会动我们再开一个终端再按一次 CtrlAltT同样先输唤醒命令source /opt/ros/humble/setup.bash然后输ros2 run turtlesim turtle_teleop_key按回车现在按键盘上的方向键你看海龟是不是动起来了⚠️ 注意想让海龟动的时候鼠标要点一下第二个终端键盘控制那个不然键盘输入不进去。命令解释一秒看懂刚才你输的ros2 run就是启动单个程序的命令格式固定长这样ros2 run turtlesim turtle_teleop_key包名就是软件包的名字比如 turtlesim海龟包程序名这个包里面具体哪个小程序比如 turtlesim_node显示海龟的程序不用死记你要跑哪个程序网上搜一下对应的命令就行。第二部分一次启动一堆程序ros2 launch刚才我们开了2个终端才跑起来海龟但是真正的机器人可能要开十几个程序摄像头、雷达、导航、底盘...总不能一个一个开吧这时候就用ros2 launch它可以一次性帮你打开一堆程序还能自动设置好参数。举个例子还是海龟只要一行命令它自动帮你打开海龟窗口键盘控制# 还是先source然后输 ros2 launch turtlesim multisim.launch.py是不是一下弹出来两个海龟这就是 launch 的作用一键启动全套。第三部分CMake 是干啥的大白话讲明白刚才我们跑的是别人写好的程序如果你想自己写一个程序就要用到 CMake 了。还是用类比你写了一篇英文作文C 代码但是老师只看得懂中文电脑只认识二进制你需要一个翻译帮你把英文变成中文这个翻译就是编译器比如 g。但是如果你的作文很长分成了好几个文件还有引用别人写的内容翻译一个一个翻太麻烦这时候你需要一个包工头它帮你安排哪个文件先翻、哪个后翻、要引用哪些东西最后把所有东西拼在一起变成一个完整的程序。CMake 就是这个包工头。你只需要写一个叫CMakeLists.txt的文件告诉包工头我这个项目叫啥名要编译哪些代码文件要用到哪些别人写的库然后 CMake 就自动帮你安排好编译流程最后生成能跑的程序。第四部分自己写一个程序从0到跑通超简单我们写一个最简单的打印 Hello ROS的程序走一遍完整流程。第一步建个工作文件夹ROS 2 要求所有自己写的代码都放在一个叫工作空间的文件夹里其实就是个普通文件夹我们建一个# 1. 新建文件夹名字随便取一般叫 dev_ws开发工作空间 mkdir -p ~/dev_ws/src cd ~/dev_ws/src第二步建一个自己的包ROS 2 的代码不能乱放要放在包里面相当于给你的程序建个单独的文件夹# 建一个叫 my_hello 的包用 CMake 编译 ros2 pkg create --build-type ament_cmake my_hello这时候你会看到 src 下面多了个 my_hello 文件夹里面已经帮你生成好了 CMakeLists.txt 和 package.xml 这两个文件不用自己从头写。第三步写代码进入 my_hello 文件夹新建一个叫hello.cpp的文件把下面内容粘进去#include iostream int main() { std::cout 你好我的第一个 ROS 2 程序跑起来啦 std::endl; return 0; }就这么简单打印一句话。第四步告诉 CMake 要编译这个文件打开 my_hello 文件夹里的CMakeLists.txt在文件最后加两行add_executable(hello_node hello.cpp) install(TARGETS hello_node DESTINATION lib/${PROJECT_NAME})就这两行其他已经有的内容不用改第一行告诉 CMake把 hello.cpp 编译成叫 hello_node 的程序第二行告诉 CMake编译完把程序放到该放的地方让 ros2 run 能找到第五步编译回到工作空间根目录~/dev_ws输编译命令cd ~/dev_ws colcon build等它跑完显示 finished 就是编译成功了colcon build就是 ROS 2 专门调用 CMake 帮你编译所有包的命令不用你自己手动 cmake、make一行搞定。第六步跑你自己写的程序编译完先source一下让系统认识你刚编译好的程序source install/setup.bash然后用你已经学会的 ros2 run 启动ros2 run my_hello hello_node按回车你看终端打印出你好我的第一个 ROS 2 程序跑起来啦——你自己写的程序跑通了新手最容易踩的3个坑90%的人都栽过❌ 新开终端忘了 source不管开多少个终端只要你要用到 ROS 2第一行必须先输那个 source 命令不然系统找不到 ROS 2 命令会报 command not found。❌ 编译完忘了 source install自己写的代码colcon build 完之后一定要在工作空间根目录再source install/setup.bash一次不然 ros2 run 找不到你刚编译的程序。❌ 程序跑起来没反应看是不是终端没聚焦比如刚才的键盘控制海龟一定要点一下那个终端窗口再按方向键不然按键输不进去。一劳永逸不用每次都输 source如果你嫌每次开终端都要输 source 太麻烦把下面两行命令输一次以后开终端自动帮你sourceecho source /opt/ros/humble/setup.bash ~/.bashrc echo source ~/dev_ws/install/setup.bash ~/.bashrc输完关掉终端重开一次以后就不用每次都敲了。总结一下就三句话启动现成程序用ros2 run 包名 程序名启动一堆程序用ros2 launch。自己写代码要建工作空间、建包然后 CMakeLists.txt 里加两行告诉它编译啥。编译用colcon build记得每次source你就已经超过80%的新手了。就这么简单多敲两遍命令就熟了不用怕

相关新闻

Opus5.5实战:AI从零开发可漂移赛车游戏全记录

Opus5.5实战:AI从零开发可漂移赛车游戏全记录

最近AI编程工具的热度一直没降过,各种模型轮番上新,跑分一个比一个好看。但讲实话,标准题库那套测试我早就看腻了——真正好不好用,得拉到实战里遛一遛才知道。这次我搞了一场“大考”:让Opus5.5在不提供任何现成代码框…

2026/10/9 5:41:44 阅读更多 →
给 AI Agent 修了一个“记忆断层”:从先删后写到安全迁移

给 AI Agent 修了一个“记忆断层”:从先删后写到安全迁移

最近整理自己的智能运维 Agent 项目时,我发现三层记忆系统里有一个比“摘要写得好不好”更基础的问题:旧对话先被删掉,新的摘要却还没生成。 这次没有重写记忆架构,而是先调整迁移顺序:目标层写入成功,再清…

2026/10/9 5:41:44 阅读更多 →
把「一文多发」做成脚本流水线:CDP、滑块、二维码、WAF、限流,这些坑我替你踩完了

把「一文多发」做成脚本流水线:CDP、滑块、二维码、WAF、限流,这些坑我替你踩完了

把「一文多发」做成脚本流水线:CDP、滑块、二维码、WAF、限流,这些坑我替你踩完了参与话题:CSDNAI:程序员新生产力 环境:Windows 11 Chrome CDP(remote-debugging-port) Node.js。全自动不现实…

2026/10/9 5:41:43 阅读更多 →

最新新闻

AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

1. 扩容决策的起点:两个方向,两种代价先聊一个我经常被问的问题:AI系统跑不动了——推理延迟飙升、训练任务排队、GPU显存告急——到底该加机器还是换大机器?这个问题听起来简单,但每次认真回答完,对方都会…

2026/10/9 6:04:00 阅读更多 →
任务管理系统APP毕业设计避坑指南:状态流转与循环提醒实现

任务管理系统APP毕业设计避坑指南:状态流转与循环提醒实现

做毕业设计选“个人任务管理系统APP”这类题目时,很多同学一开始会觉得简单:不就是一个TodoList加个数据库,再加个手机页面吗?等真正动手才发现,任务管理的业务逻辑远不止“增删改查”。状态怎么流转、循环任务怎么处理…

2026/10/9 6:04:00 阅读更多 →
蓝桥杯C++备赛:数据结构与STL容器实战指南

蓝桥杯C++备赛:数据结构与STL容器实战指南

1. 为什么DAY5只练数据结构:竞赛里的“地基”思维1.1 从一道送分题看数据结构的价值如果你参加过蓝桥杯,哪怕只是做过几套真题,一定会发现一个规律:C组的题目里,真正考“奇技淫巧”的并不多,大部分题目的核…

2026/10/9 6:04:00 阅读更多 →
无网络环境下Docker复杂应用离线迁移完整指南:从镜像到数据

无网络环境下Docker复杂应用离线迁移完整指南:从镜像到数据

最近接手了一个挺棘手的活儿:要在完全无网络、也没有私有镜像仓库的隔离环境里,把一套十几台容器、涵盖数据库、缓存、消息队列、应用前后端、定时任务的多应用复杂 Docker 环境,原封不动迁到另一台新机器上。很多人一听"无网络、无镜像…

2026/10/9 6:04:00 阅读更多 →
Flutter组件鸿蒙化适配全流程实战:以books_finder图书检索库为例

Flutter组件鸿蒙化适配全流程实战:以books_finder图书检索库为例

最近在做 Flutter 跨端组件库的鸿蒙化适配时,正好把一套自维护的图书检索组件 books_finder 移植到了鸿蒙生态上。这个组件的主要定位是图书元数据的聚合检索、数据资产标准化管理以及精确检索匹配,在安卓和 iOS 上已经跑了小半年,这次折腾鸿…

2026/10/9 6:04:00 阅读更多 →
SpringBoot集成Hyperledger Fabric实现DID去中心化身份认证

SpringBoot集成Hyperledger Fabric实现DID去中心化身份认证

简介:本资源是一套面向本科毕业设计的分布式身份认证系统用户端实现,基于Hyperledger Fabric区块链构建可信身份管理体系,适用于信息安全、区块链开发与Java后端方向的学习者与毕设开发者。项目采用SpringBoot框架搭建,完整覆盖用…

2026/10/9 6:02:59 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →