2. 环境搭建

大家好,我是你们的老朋友。今天咱们来聊聊环境搭建这件事。

说实话,很多同学觉得环境搭建就是「装个系统、装个ROS、然后编译」——听起来很简单对吧?但我在实际项目中踩过的坑,十个手指头都数不过来。有一次,我花了一整天时间编译Apollo,结果发现是Ubuntu版本不对,直接白干。嗯,从那以后,我每次搭环境都会先确认三件事:系统版本、依赖库版本、以及——我的咖啡够不够喝。

好,咱们正式开始。

1.1 Ubuntu系统配置

我个人习惯用Ubuntu 18.04或20.04。为什么?因为Apollo和Autoware对这两个版本支持最好。你想想看,如果选了个太新的版本,依赖库可能不兼容,编译报错能让你怀疑人生。

⚠️ 注意: 不要用Ubuntu 22.04或更高版本,除非你愿意花大量时间解决依赖冲突。我在项目中试过,结果折腾了两天。

安装步骤其实很简单:

  1. 下载Ubuntu 18.04.5 LTS或20.04.3 LTS的ISO镜像
  2. 用Rufus或balenaEtcher制作启动U盘
  3. 安装时选择「最小安装」,避免不必要的软件包
  4. 分区建议:/ 分区50GB,/home 分区剩余空间,swap 8GB
  5. 安装完成后,先执行 sudo apt update && sudo apt upgrade -y

这里有个小技巧:安装完成后,我建议你立刻安装一些基础工具:

sudo apt install -y git vim curl wget build-essential cmake python3-pip

为什么要装这些?因为后面编译Apollo和Autoware时,这些工具一个都少不了。我曾经因为没装cmake,编译到一半报错,气得我直接重装了系统——当然,那是年轻时候的事了。

1.2 ROS/ROS2安装

ROS和ROS2,说白了就是自动驾驶的「操作系统」。Autoware依赖ROS1(Melodic或Noetic),Apollo则用ROS2(Foxy或Galactic)。

你可能会问:能不能只装一个?答案是:不能。因为两个框架的通信机制完全不同。我在项目中试过用ROS1桥接ROS2,结果延迟高得离谱,最后老老实实装了双版本。

1.2.1 安装ROS1(Melodic)

如果你用Ubuntu 18.04,就装Melodic。步骤很简单:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install -y ros-melodic-desktop-full
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

安装完成后,记得初始化rosdep:

sudo rosdep init
rosdep update
💡 提示: 如果rosdep init报错,多半是网络问题。你可以试试用代理,或者直接手动下载rosdep的配置文件。我遇到过三次,每次都是网络惹的祸。

1.2.2 安装ROS2(Foxy)

Apollo 6.0及以上版本需要ROS2 Foxy。安装命令如下:

sudo apt update && sudo apt install -y curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt update
sudo apt install -y ros-foxy-desktop python3-colcon-common-extensions
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc

注意:ROS1和ROS2的source命令不能同时放在.bashrc里,否则会冲突。我建议你分别创建两个别名:

alias ros1='source /opt/ros/melodic/setup.bash'
alias ros2='source /opt/ros/foxy/setup.bash'

这样,每次打开终端,你只需要输入ros1或ros2就能切换环境。嗯,这个小技巧我用了好几年,非常顺手。

1.3 Apollo源码编译与部署

Apollo的编译,说白了就是一套自动化流程。但如果你不了解它的依赖关系,很容易卡住。

1.3.1 下载源码

git clone https://github.com/ApolloAuto/apollo.git
cd apollo
git checkout v6.0.0

我建议你切到v6.0.0这个稳定版本。为什么?因为master分支经常有更新,可能不稳定。我在项目中吃过这个亏,编译到一半发现接口变了,气得我直接回滚。

1.3.2 安装依赖

Apollo提供了一个一键安装脚本:

bash docker/scripts/dev_start.sh

这个脚本会自动拉取Docker镜像并安装所有依赖。但要注意:你的电脑需要安装Docker,并且有至少20GB的磁盘空间。

⚠️ 注意: 如果你在虚拟机里跑,记得给虚拟机分配至少8GB内存和4核CPU。否则编译时会卡死。我试过用2核4GB的虚拟机编译,结果等了三个小时还没编译完——最后直接放弃了。

1.3.3 编译

bash docker/scripts/dev_into.sh
./apollo.sh build_opt

编译时间取决于你的机器配置。我自己的机器(i7-10700K,32GB内存)大概需要40分钟。如果你用笔记本,可能得等一两个小时。这时候,我建议你去泡杯咖啡,或者看看文档。

1.3.4 部署

编译完成后,启动Dreamview:

bash scripts/bootstrap.sh

然后在浏览器打开 http://localhost:8888,就能看到Apollo的界面了。我第一次看到这个界面时,心里还挺激动的——毕竟折腾了整整一天。

1.4 Autoware源码编译与部署

Autoware的编译比Apollo简单一些,但坑也不少。

1.4.1 下载源码

git clone https://github.com/Autoware-AI/autoware.ai.git
cd autoware.ai
git checkout 1.14.0

同样,我建议用稳定版本。1.14.0是目前最稳定的版本,支持ROS Melodic。

1.4.2 安装依赖

Autoware提供了一个安装脚本:

cd autoware.ai
./install_dep.sh

这个脚本会自动安装所有依赖,包括Qt、OpenCV、PCL等。但要注意:如果你的网络不好,可能会下载失败。我建议你提前把依赖包下载好,或者用代理。

1.4.3 编译

cd autoware.ai
catkin_make

编译时间大概20-30分钟。如果你用 catkin_make -j4 可以加快速度,但小心内存不够。我试过用 -j8,结果直接内存溢出,系统卡死了。

💡 提示: 编译完成后,别忘了source一下:source devel/setup.bash。否则你运行任何Autoware的命令都会报错。

1.4.4 部署

启动Autoware:

roslaunch runtime_manager runtime_manager.launch

然后你就能看到Autoware的图形界面了。说实话,第一次看到这个界面时,我觉得它比Apollo的Dreamview简陋一些,但功能很全。

1.5 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图:

环境搭建知识体系 Ubuntu系统配置 ROS1 (Melodic) + ROS2 (Foxy) Apollo源码编译与部署 Autoware源码编译与部署 下载源码 → 安装依赖 → 编译 → 部署 下载源码 → 安装依赖 → 编译 → 部署 最终目标:双环境共存,可切换运行 Apollo (ROS2) + Autoware (ROS1) 在同一台机器上

这张图展示了整个环境搭建的流程。说白了,就是先装好Ubuntu,再装ROS1和ROS2,最后分别编译Apollo和Autoware。每一步都有坑,但只要你按我的步骤来,应该不会出大问题。

1.6 避坑指南

最后,我总结几个常见的坑:

  • 依赖冲突:ROS1和ROS2的依赖包可能冲突。我建议用Docker隔离,或者用虚拟环境。
  • 磁盘空间不足:Apollo编译后大概占用15GB,Autoware占用10GB。确保你有至少50GB的空闲空间。
  • 网络问题:下载依赖时经常超时。我建议用国内的镜像源,比如清华源或阿里源。
  • 内存不足:编译时如果内存不够,可以加swap。我一般会加16GB的swap文件。
📌 重要提醒: 如果你在编译过程中遇到任何错误,先别慌。90%的错误都是因为依赖没装全。执行 rosdep install --from-paths src --ignore-src -r -y 通常能解决大部分问题。

好了,环境搭建就讲到这里。记住,这一步虽然枯燥,但它是后面所有工作的基础。我见过太多同学因为环境没搭好,后面调试时各种报错,最后心态崩了。所以,耐心一点,一步一步来。

可可精品资料库