3、开发环境搭建:Ubuntu 22.04安装、ROS2 Humble安装、Colcon构建工具、VS Code配置与调试环境

说实话,做机器人开发这么多年,我踩过最多的坑就是环境问题。有时候代码写得再好,环境搭不对,一编译全是红字。所以这一章,咱们把地基打牢。

我个人习惯用 Ubuntu 22.04 配 ROS2 Humble。为什么选这个组合?因为 Humble 是长期支持版,到 2027 年才结束维护。你想想看,做产品开发最怕什么?最怕系统还没上线,官方就不维护了。Humble 稳得很。

3.1 Ubuntu 22.04 安装要点

安装 Ubuntu 22.04 其实不难,但有几个细节我提醒你注意。

磁盘分区建议

  • /boot:1GB 就够了,别贪多
  • /:至少 50GB,我建议给 100GB
  • /home:剩下的全给它,你的代码、数据集都放这
  • swap:如果你内存 16GB 以上,swap 可以设 8GB;内存小的话,设成内存的两倍
我的小技巧:安装时选「最小安装」,别装那些用不上的办公软件。干净的系统跑起来才快。

换源:装完系统第一件事,换国内源。我用的是清华源,速度稳。

sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y

嗯,这里要注意:如果你用的是阿里云服务器,换成阿里源更快。别问我怎么知道的,我曾经在阿里云上用清华源,慢到怀疑人生。

3.2 ROS2 Humble 安装

ROS2 Humble 的安装流程,我建议你严格按照官方文档来。但官方文档太啰嗦,我给你提炼一下核心步骤。

第一步:设置 locale

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

第二步:添加 ROS2 源

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update

第三步:安装 ROS2 Humble

我建议装桌面版,包含 RViz 和可视化工具。做传感器驱动开发,你肯定要用到这些。

sudo apt install ros-humble-desktop -y

装完大概要 10-15 分钟,去泡杯咖啡吧。

第四步:配置环境变量

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:如果你同时装了 ROS1 和 ROS2,千万别把两个 setup.bash 都 source 到 .bashrc 里。我曾经这么干过,结果终端一打开就报错,折腾了半天才发现是环境变量冲突。

3.3 Colcon 构建工具

ROS2 的构建工具从 catkin 换成了 colcon。说实话,colcon 比 catkin 好用太多了。编译速度快,输出信息清晰,还支持并行编译。

安装 colcon

sudo apt install python3-colcon-common-extensions -y

常用命令

命令 说明
colcon build 编译整个工作空间
colcon build --packages-select 包名 只编译指定包
colcon build --symlink-install 使用符号链接安装,修改 Python 文件不用重新编译
colcon test 运行测试

我的习惯:每次编译都用 --symlink-install。做传感器驱动开发时,Python 节点经常要改,有了符号链接,改完直接运行,不用等编译。效率翻倍。

创建工作空间

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build

第一次编译会生成 build、install、log 三个目录。别手贱去删它们,除非你知道自己在干什么。

3.4 VS Code 配置与调试环境

编辑器这块,我推荐 VS Code。插件生态好,调试功能强,做 ROS2 开发再合适不过。

安装 VS Code

sudo snap install code --classic

或者去官网下载 .deb 包安装。我个人喜欢用 snap 版,自动更新省心。

必装插件

  • C/C++:微软官方出品,代码补全、调试都靠它
  • Python:同上,做 Python 节点必备
  • ROS:支持 .msg、.srv 文件的语法高亮
  • CMake Tools:CMake 语法高亮和配置
  • GitLens:看代码历史变更,排查问题利器

配置调试环境

做传感器驱动开发,调试是家常便饭。VS Code 的调试配置在 .vscode/launch.json 里。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ROS2: Python 节点调试",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/install/lib/你的包名/你的节点名",
            "console": "integratedTerminal",
            "cwd": "${workspaceFolder}"
        },
        {
            "name": "ROS2: C++ 节点调试",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/install/lib/你的包名/你的节点名",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

避坑指南:调试前一定要先 colcon build 编译,然后 source install/setup.bash。我曾经忘了 source,结果调试器一直说找不到节点,折腾了半小时才发现是环境变量没加载。

设置 CMake 配置

.vscode/settings.json 里加上:

{
    "cmake.configureArgs": [
        "-DCMAKE_PREFIX_PATH=/opt/ros/humble"
    ],
    "python.autoComplete.extraPaths": [
        "/opt/ros/humble/lib/python3.10/site-packages"
    ]
}

这样 VS Code 就能正确识别 ROS2 的头文件和 Python 包了。代码补全、跳转定义都能用,写起来舒服很多。

3.5 验证环境

装完别急着写代码,先验证一下环境是否正常。

测试 ROS2 通信

# 终端1:启动 talker
ros2 run demo_nodes_cpp talker

# 终端2:启动 listener
ros2 run demo_nodes_py listener

如果能看到 talker 在发消息,listener 在收消息,恭喜你,环境搭好了。

我的经验:第一次搭环境,难免会出问题。别慌,90% 的问题都是源没配好、环境变量没 source、或者依赖没装全。按步骤来,一步步排查,总能搞定。

好了,环境搭完了。下一章咱们开始写第一个传感器驱动——一个简单的温度传感器节点。到时候我会手把手带你走完整个流程,从消息定义到节点实现,再到调试测试。准备好了吗?