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

ROS2 入门教程第一篇:配置 ROS2 环境

在上一篇文章里,我们已经按照官方 First Steps 梳理了 ROS2 的学习顺序:先理解基本概念,再安装 ROS 和 turtlesim,然后练习 nodes、topics、services、parameters、actions,接着学习日志、launch、rosbag,最后进入 client libraries 开始自己写节点。

这篇文章正式进入 ROS2 入门教程的第一篇:配置 ROS2 环境。

参考资料是 ROS2 Humble 官方文档中的 Configuring environment。官方给这篇教程的定位很明确:Beginner 级别,目标是在 5 分钟内学会准备 ROS2 环境。

但我不想只把它写成三条命令。因为source /opt/ros/humble/setup.bash这条命令看起来简单,背后却是 ROS2 工程里非常重要的一个概念:workspace 叠加。

一、为什么第一篇不是写节点,而是配置环境

很多人学习 ROS2 时,最想看到的是怎么写 publisher 和 subscriber。

但官方第一篇 CLI 教程不是写节点,而是配置环境。这不是偶然。

在我的“数据加工工业园区”模型里,ROS2 是一个品牌化的数据加工园区。Node 是标准工厂,topic/service/action 是物流体系,message 是标准物料箱,launch 是生产订单,rosbag 是现场留档。

那么配置 ROS2 环境是什么?

它相当于给当前终端签发“入园通行证”和“园区通讯录”。

如果你没有 source ROS2 的 setup 文件,当前终端就不知道 ROS2 园区在哪里。它找不到ros2命令,找不到已经安装的包,找不到共享库,也找不到接口定义。你明明已经安装了 ROS2,但终端像一个没登记的外来人员,进不了园区。

所以 ROS2 入门第一步不是“建厂”,而是“入园”。

二、官方背景:ROS2 依赖 shell 环境组合工作空间

官方文档开头讲了一个非常关键的概念:ROS2 依赖 shell environment 来组合多个 workspaces。

Workspace 是 ROS2 中用于开发的位置。核心 ROS2 工作空间叫 underlay,后续本地工作空间叫 overlay。开发 ROS2 时,经常会同时激活多个工作空间。

这个说法很抽象。换成数据加工园区模型就容易理解。

Underlay 是品牌方已经建好的基础园区。

比如我们通过 deb 包安装的 ROS2 Humble,一般在:

/opt/ros/humble

这里面有 ROS2 官方提供的命令、库、接口、工具和示例包。

Overlay 是我们自己建设的加盟工厂区。

比如后面我们会创建自己的工作空间:

~/ros2_ws

当我们在里面写自己的 package,编译后会生成:

~/ros2_ws/install

如果你只 source 了/opt/ros/humble/setup.bash,终端只能看到官方基础园区。如果你还 source 了~/ros2_ws/install/setup.bash,终端才能在官方基础园区之上看到你自己的包。

这就是 underlay 和 overlay 的关系。

三、第一步:手动 source ROS2 setup 文件

如果你按照 Ubuntu deb packages 安装了 ROS2 Humble,那么最常用的命令是:

source/opt/ros/humble/setup.bash

这条命令需要在每一个新打开的终端里执行一次。

执行之后,当前终端就能访问 ROS2 命令,例如:

ros2--help

如果你不是 bash,而是 zsh 或其他 shell,setup 文件后缀也要相应变化。官方文档提到可能的文件包括:

setup.bash setup.sh setup.zsh

这背后的逻辑是一样的:不同 shell 使用不同格式的启动脚本,但目标都是把 ROS2 的路径、库路径、Python 路径、包路径和发行版信息写进当前 shell 环境。

如果 source 后仍然找不到ros2命令,第一件事不是重装 ROS2,而是检查路径是否正确:

ls/opt/ros/humble/setup.bash

如果这个文件不存在,说明你的安装路径和命令不一致,或者 ROS2 没有安装成功。

四、第二步:写入 ~/.bashrc,让每个终端自动入园

每次打开终端都手动 source,当然可以,但很麻烦。

官方给出的方式是把 source 命令写入 shell startup script。对 bash 来说,就是~/.bashrc

echo"source /opt/ros/humble/setup.bash">>~/.bashrc

写入后,重新打开终端,或者手动执行:

source~/.bashrc

以后每次打开终端都会自动加载 ROS2 Humble 环境。

这个动作在工程上很常见,但也要知道如何撤销。如果你写错了路径,或者以后切换 ROS2 版本,就需要打开~/.bashrc删除或修改这一行。

比如:

gedit ~/.bashrc

或者:

vim~/.bashrc

这里要提醒一点:不要在~/.bashrc里盲目堆很多 source 命令。比如同时 source Humble、Galactic、Jazzy,或者多个本地 workspace,容易造成环境混乱。工程上应该明确当前终端服务于哪个项目、哪个 ROS2 版本、哪个工作空间。

五、第三步:检查 ROS2 环境变量

官方建议,如果你遇到找不到包、无法使用 ROS2 包或命令异常的问题,第一步检查环境变量。

Linux 下可以执行:

printenv|grep-iROS

正常情况下,至少应该看到类似:

ROS_VERSION=2 ROS_PYTHON_VERSION=3 ROS_DISTRO=humble

这三个变量可以理解为当前终端的 ROS2 身份信息。

ROS_VERSION=2表示当前是 ROS2,而不是 ROS1。

ROS_PYTHON_VERSION=3表示当前 ROS2 使用 Python 3。

ROS_DISTRO=humble表示当前激活的是 Humble 发行版。

如果你明明想使用 Humble,却看到ROS_DISTRO是别的版本,就说明当前终端环境被其他 setup 文件污染了。

这就是 ROS2 调试里的第一个基本动作:先查环境,再查代码。

六、underlay 和 overlay:官方园区和本地加盟工厂

配置 ROS2 环境真正重要的地方,是理解 workspace 叠加。

假设你现在只有官方 ROS2:

source/opt/ros/humble/setup.bash

这时当前终端只知道官方 underlay。

以后你创建自己的工作空间:

mkdir-p~/ros2_ws/srccd~/ros2_ws colcon build

编译后会生成:

~/ros2_ws/install/setup.bash

此时正确顺序是:

source/opt/ros/humble/setup.bashsource~/ros2_ws/install/setup.bash

先 source underlay,再 source overlay。

用数据加工园区比喻就是:先登记品牌方基础园区,再登记你自己的加盟工厂区。这样你的本地工厂既能使用品牌方提供的工具和库,也能被终端找到。

如果顺序反了,或者只 source 了 underlay,没有 source overlay,就会出现常见问题:

  • 自己编译的 package 找不到。
  • ros2 run看不到自己的节点。
  • ros2 launch找不到自己的 launch 文件。
  • 同一个包在不同 workspace 中版本不一致。

所以后面每次构建本地工作空间后,都要记得:

sourceinstall/setup.bash

这一步不是形式主义,它是在告诉终端:刚刚新建的工厂已经加入园区了。

七、ROS_DOMAIN_ID:给不同园区划分通信频道

官方 guide 还提到ROS_DOMAIN_ID

ROS2 底层依赖 DDS 通信。简单理解,ROS_DOMAIN_ID就像园区的通信频道编号。同一个 domain 里的节点可以互相发现和通信,不同 domain 的节点默认互相隔离。

设置方式是:

exportROS_DOMAIN_ID=<your_domain_id>

如果希望长期生效,可以写入~/.bashrc

echo"export ROS_DOMAIN_ID=<your_domain_id>">>~/.bashrc

这个变量在多人调试、多机器人实验、教室环境、公司局域网中很有用。

比如几组人都在同一个网络里跑 turtlesim,如果大家都使用默认 domain,就可能互相发现对方的节点和 topic,出现一些奇怪现象。给每组设置不同的ROS_DOMAIN_ID,就能把它们隔离开。

在真实项目里也一样。多台车、多套 ROS2 系统、多组调试环境共用一个局域网时,domain 隔离是非常基础的工程习惯。

八、ROS_LOCALHOST_ONLY:只允许本机通信

官方还提到ROS_LOCALHOST_ONLY

默认情况下,ROS2 通信不限制在 localhost,本机节点可能会被同一局域网里的其他计算机发现。

如果设置:

exportROS_LOCALHOST_ONLY=1

ROS2 的 topics、services、actions 就只在本机可见。

这在某些场景很有用。比如教学环境里,多台电脑都在跑同名 topic,如果不限制本机通信,可能互相干扰。设置ROS_LOCALHOST_ONLY=1后,每台电脑只看自己的 ROS2 系统。

但这个变量也有坑。

如果你需要跨机器通信,比如一台工控机发点云,另一台开发电脑用 RViz 看数据,那么设置ROS_LOCALHOST_ONLY=1会直接阻断跨机器发现。表现出来就是:topic 在发送机器上存在,但接收机器看不到。

所以它不是“越开越安全”的默认配置,而是一个明确的网络隔离开关。什么时候打开,什么时候关闭,要和项目通信拓扑一致。

九、配置环境的最小检查清单

每次遇到 ROS2 命令或包找不到问题,可以按这个顺序排查。

第一,确认 setup 文件存在:

ls/opt/ros/humble/setup.bash

第二,手动 source:

source/opt/ros/humble/setup.bash

第三,检查 ROS2 命令:

ros2--help

第四,检查环境变量:

printenv|grep-iROS

第五,如果使用本地工作空间,确认 overlay 已 source:

source~/ros2_ws/install/setup.bash

第六,检查 domain 和 localhost 设置:

echo$ROS_DOMAIN_IDecho$ROS_LOCALHOST_ONLY

这套检查比直接重装 ROS2 更有效。很多 ROS2 初学问题,本质不是安装坏了,而是当前终端没有正确进入 ROS2 环境。

十、结论

配置 ROS2 环境是 ROS2 入门教程的第一篇,也是后续所有操作的前提。

从官方角度看,这篇 guide 讲的是 source setup files、写入 shell startup script、检查 ROS 环境变量,以及理解ROS_DOMAIN_IDROS_LOCALHOST_ONLY

从我的数据加工工业园区模型看,这一步是在给当前终端办理入园手续:source underlay 让你进入 ROS2 官方基础园区,source overlay 让你自己的工作空间加入园区,环境变量则告诉系统当前使用哪个 ROS2 版本、哪个通信域、是否只允许本机通信。

学会这一篇之后,下一步就可以进入官方 First Steps 的第二篇:使用 turtlesim、ros2 和 rqt,真正开始在教学园区里观察 ROS2 的节点、话题和工具如何工作。

http://www.jsqmd.com/news/985729/

相关文章:

  • 襄阳市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 2026年最新5个免费字体下载网站合集,设计师速速收藏!
  • 2026年AI优化机构十强榜单揭晓:玖叁鹿GEO登顶行业榜首,浙誉翎峰科技、浙江玖叁鹿科技紧随其后 - 玖叁鹿
  • 【无标题】谁有这种移动网络代理IP 不要城域网的
  • 【docker】docker技术介绍
  • 鸿蒙新特性——TimePicker 与 TextClock 组件深度解析
  • AI时代普通人如何玩转企业级开发V2.0
  • 2026西安黄金回收避雷红黑榜:内行人深扒套路,怎么选才不踩坑? - 西安闲转记
  • vue3路由的replace属性(四)
  • AI技能平台横向盘点:觅游、携程、飞猪等5家拆解
  • 国内正规考研培训机构排行:核心服务维度实测对比 - 奔跑123
  • 2026武汉商城小程序开发制作公司哪家好? - 奔跑123
  • OpenAI秘密递交IPO申请,股市上市进程提速
  • 蚌埠市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • LPC3141/3143嵌入式开发实战:ARM9核心、USB OTG与安全启动解析
  • Dify 智能视频生成工作流:从脚本到视频的全自动化实现
  • 2026年国内正规考研培训机构实力排行一览 - 奔跑123
  • 营口市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 2026-6-10分享
  • 专业的水洗设备哪家好
  • 福州市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 一楼潮湿背光,窗帘选什么面料耐潮不发霉
  • Eclipse 透视图(Perspective)
  • 吃透 Pro*C 国产化:从环境适配到业务落地全流程
  • 2026招聘求职类小程序开发制作公司有哪些? - 奔跑123
  • Qt 高阶 08|Qt 插件开发 接口设计、插件编写、动态加载插件
  • 菏泽市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 百度内部启动青木、风雷两大计划,百度大动作该咋看?
  • 肇庆市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 网络测试仪RENIX实战:从RAW流发送到Wireshark分析,一条龙排错指南