2、开发环境搭建:Ubuntu系统配置、ROS2与CyberRT的安装、Docker环境部署
说实话,搭建开发环境这件事,看着简单,但坑是真不少。我见过太多同学花了一周时间,最后卡在某个依赖版本上。所以这一章,我带你一步步走,把那些我踩过的坑提前告诉你。
2.1 Ubuntu系统配置——打好地基
我个人习惯用 Ubuntu 20.04 LTS。为什么?因为Autoware和Apollo对它的支持最成熟。你想想看,两个系统都针对这个版本做了大量测试,何必去冒险用22.04呢?
核心配置清单:
- 系统版本:Ubuntu 20.04.6 LTS(建议桌面版)
- 磁盘分区:至少100GB,建议200GB(源码编译很吃空间)
- 内存:16GB起步,32GB更舒服
- 显卡:NVIDIA显卡 + 驱动 ≥ 470
安装完系统后,第一件事就是换源。我建议用清华源或阿里云源,速度差太多了。
# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为清华源(Ubuntu 20.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新
sudo apt update && sudo apt upgrade -y
小技巧:装完系统先装个 build-essential 和 git,后面所有编译都离不开它们。
2.2 ROS2的安装——Autoware的基石
Autoware目前主要基于 ROS2 Galactic(也有部分版本迁移到了Humble)。我个人建议用Galactic,因为文档最全,社区支持最好。
安装ROS2其实就三步,但每一步都有讲究。
2.2.1 设置语言环境
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
嗯,这里要注意:一定要用UTF-8。我之前用默认的POSIX,结果编译时一堆乱码报错,查了半天才发现是语言环境的问题。
2.2.2 添加ROS2源并安装
# 添加ROS2 GPG key
sudo apt install curl gnupg2 lsb-release
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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 安装ROS2 Galactic桌面版
sudo apt update
sudo apt install ros-galactic-desktop
注意:千万别装 ros-galactic-ros-base,那个是精简版,缺了很多工具。直接装 desktop 版本,省心。
2.2.3 配置环境变量
echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下:
ros2 run demo_nodes_cpp talker
# 如果看到 "Hello World" 输出,说明安装成功
2.3 CyberRT的安装——Apollo的核心通信框架
CyberRT是百度Apollo自研的通信中间件。说实话,刚开始接触时我觉得它跟ROS2差不多,但用久了才发现,它在实时性和性能上确实有独到之处。
安装CyberRT有两种方式:
| 方式 | 适用场景 | 复杂度 |
|---|---|---|
| Apollo源码自带 | 完整使用Apollo | 低(推荐) |
| 独立编译安装 | 仅使用CyberRT | 高 |
我建议用第一种方式,因为Apollo的Docker镜像里已经配好了CyberRT环境。但如果你非要独立安装,记住这几个关键依赖:
# 独立安装CyberRT的依赖
sudo apt install libgoogle-glog-dev libgflags-dev libboost-all-dev
sudo apt install libpcap-dev libeigen3-dev
# 克隆Apollo源码(只取CyberRT部分)
git clone --depth 1 https://github.com/ApolloAuto/apollo.git
cd apollo/cyber
# 编译
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
避坑指南:我曾经在Ubuntu 22.04上编译CyberRT,结果因为gcc版本太高(11.x),一堆模板报错。后来老老实实切回20.04 + gcc 9.4,一次通过。
2.4 Docker环境部署——一劳永逸的方案
说实话,手动配环境太痛苦了。我建议直接用Docker,尤其是当你需要在Autoware和Apollo之间来回切换时。
2.4.1 安装Docker Engine
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加稳定版源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# 将当前用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER
newgrp docker
重要:加入docker组后,一定要注销重新登录,否则权限不生效。我刚开始不知道,每次都要sudo,烦死了。
2.4.2 安装NVIDIA Container Toolkit
如果你要用GPU加速(比如运行感知模型),这一步必不可少。
# 添加NVIDIA仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 安装
sudo apt update
sudo apt install nvidia-docker2
sudo systemctl restart docker
2.4.3 拉取Autoware和Apollo镜像
# Autoware官方镜像
docker pull autoware/autoware:latest-galactic
# Apollo官方镜像
docker pull apolloauto/apollo:latest
启动容器时,我习惯挂载几个关键目录:
# 启动Autoware容器
docker run -it \
--name autoware_dev \
--gpus all \
-v /home/$USER/autoware_ws:/workspace \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
autoware/autoware:latest-galactic
# 启动Apollo容器
docker run -it \
--name apollo_dev \
--gpus all \
-v /home/$USER/apollo_ws:/apollo \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
apolloauto/apollo:latest
个人经验:我习惯把两个容器的workspace都映射到宿主机同一个目录下,这样代码管理方便。但要注意,两个系统的源码结构不同,别搞混了。
2.5 本章知识体系总览
下面这张图,是我梳理的整个开发环境搭建的逻辑。你跟着这个流程走,基本不会出错。
你看,整个流程其实很清晰:先打好Ubuntu基础,然后根据你的目标选择ROS2或CyberRT,最后用Docker把它们统一管理起来。说白了,Docker就是那个「万能容器」,让你不用在环境配置上反复折腾。
本章核心要点:
- Ubuntu 20.04 LTS 是最稳妥的选择
- ROS2 Galactic 对应 Autoware,CyberRT 对应 Apollo
- Docker 是解决环境冲突的最佳方案
- NVIDIA Container Toolkit 是 GPU 加速的前提
好了,环境搭好了,下一章我们就要开始真正写代码了。到时候你会发现,前期环境配得越扎实,后面开发就越顺畅。