00 · 环境与工作区
目标
搞清楚:ROS 装在哪、工作区是什么、为什么每次都要 source。
为什么要先搞环境
ROS 把「系统里那份 Humble」和「你写的包」分成两棵树。source 不是迷信,是把 PATH、PYTHONPATH、AMENT_PREFIX_PATH 指到正确的 install/,否则 ros2 run 找到的是旧包或找不到。conda 抢 Python 时,colcon 会链到另一套解释器,Humble 的消息类型对不上——所以脚本里把 /usr/bin 放到前面。
逐步说明:overlay 是怎么叠起来的(点击展开)
先 source /opt/ros/humble/setup.bash:官方库。再 source $ROS_WS/install/setup.bash:你的包盖在系统之上,同名可覆盖。只 source 工作区、忘了系统,依赖(rclpy、std_msgs)会缺。build/ 可删重编;install/ 才是运行时入口。check_env.sh 就是在查这三层有没有对上。
概念
发行版(distro)
本机是 Humble。不同 Ubuntu 对应不同发行版(22.04 → Humble)。
echo $ROS_DISTRO # 应输出 humble系统安装 vs 工作区
| 路径 | 是什么 |
|---|---|
/opt/ros/humble/ | apt 装好的系统 ROS |
$ROS_WS/ | 你自己的工作区(写包、编译) |
工作区目录
notebook/ # 本仓库根
docs/ros2/ # 课程笔记(本站点)
workspaces/ros2-humble/ # $ROS_WS
src/ # 源码(包放这里)
build/ # 编译中间文件(可删,会再生)
install/ # 编译安装结果(运行前要 source)
log/ # 编译日志
scripts/ # check_env.sh为什么要 source 两次
source /opt/ros/humble/setup.bash # 系统 ROS:有 ros2 命令
source $ROS_WS/install/setup.bash # 工作区:能找到你自己的包顺序:先系统,后工作区。只 source 系统 → 跑不了 py_pubsub;只 source 工作区 → 可能缺底层依赖。
可选:把
source /opt/ros/humble/setup.bash写入~/.bashrc,新终端自动加载。工作区则在每次colcon build后执行source "$ROS_WS/install/setup.bash",或自行决定是否写入 bashrc。
通俗理解
把 ROS 想成两层:
- 系统层(
/opt/ros/humble):别人装好的“操作系统插件”,提供ros2命令和官方库。 - 工作区(
$ROS_WS):你自己的项目文件夹。源码在src/,编译结果在install/。
source 的作用很像“把某套工具的路径临时加进当前终端”。不 source,终端就找不到 ros2 或你自己的包。
改代码后为什么要重新 build?
因为运行时用的是 install/ 里的安装结果,不是直接读 src/。改完 → 编译 → 再 source,三步才对齐。
常见疑问
Q:ROS 2 要不要先学很多网络原理?
入门阶段不用。先当“消息总线”用即可。多机连不上、丢包时再补 DDS/网络。
Q:能不能一上来就学架构?
可以浏览,但别当主线。先会写节点、会 source/build,再回头看 rmw/DDS 会轻松很多。
Q:bashrc 里已经 source 了,为什么有时还是找不到自己的包?
系统 Humble 已自动加载;工作区那行默认是注释的。新编译后要手动 source $ROS_WS/install/setup.bash,或取消 bashrc 里对应注释。
Q:终端里有 conda 会怎样?
可能抢走系统 Python,导致自定义接口包编译失败。编译接口相关包时建议:export PATH="/usr/bin:$PATH"。
动手
# 确认环境
echo $ROS_DISTRO
ros2 --help | head
# 编译工作区里的包
cd $ROS_WS
colcon build --packages-select py_pubsub
source install/setup.bash
# 看包里有哪些可执行文件
ros2 pkg executables py_pubsub关键命令
ros2 pkg list | grep py_pubsub
ros2 pkg executables py_pubsub
colcon build --packages-select py_pubsub验证标准(给学员与 AI)
- [ ]
echo $ROS_DISTRO输出humble(需已 source) - [ ]
ros2 --help可用 - [ ] 在
$ROS_WS下colcon build(或至少能理解 src/build/install)成功或已有 install - [ ] 知道:改代码后要 build,再
source "$ROS_WS/install/setup.bash"
失败时:先 source /opt/ros/humble/setup.bash;接口包编译若失败,避开 conda Python。
小结
- Humble 在
/opt/ros/humble,你的代码在$ROS_WS/src。 - 改代码 → build → source install,三步缺一不可。
- 下一课:01 · Topic 发布/订阅