第2章:系统环境准备——Ubuntu操作系统安装与配置

说实话,做自动驾驶开发这么多年,我踩过最大的坑就是环境问题。很多同学代码写得挺好,一编译就报错,最后发现是系统环境没配好。这一章,咱们就把地基打牢。

2.1 双系统 vs 虚拟机:到底选哪个?

很多新手会问我:「老师,我能不能在Windows里装个虚拟机跑Ubuntu?」我的回答是:能,但不推荐。尤其是你要做Autoware这种实时性要求高的系统。

我给大家列个对比表,一看就明白:

对比项 双系统 虚拟机
性能损耗 几乎无损耗 约20%-30%性能损失
GPU加速 原生支持 需要额外配置,效果差
实时性 高 低(不适合传感器驱动)
切换成本 需要重启 随时切换
磁盘空间 需要独立分区 动态分配
适合场景 正式开发、实车测试 学习、测试、轻量开发

我个人习惯是:主力机装双系统,笔记本上装个虚拟机用来查资料和写文档。你想想看,Autoware要调用CUDA做点云处理,虚拟机里跑?那画面太美我不敢看。

我的建议:如果你有独立显卡(NVIDIA),一定要装双系统。虚拟机里跑CUDA?我曾经试过,折腾了三天,最后还是老老实实装了双系统。

2.2 Ubuntu 20.04 安装实战

Autoware官方推荐的是Ubuntu 20.04 LTS。为什么不是22.04?因为ROS 1的最后一个版本Noetic只支持到20.04。嗯,这里要注意,虽然ROS 2已经成熟,但很多老项目还是基于ROS 1的。

2.2.1 制作启动盘

这一步其实很简单,但很多人会翻车。我推荐用Rufus(Windows)或者balenaEtcher(跨平台)。

# 下载Ubuntu 20.04.6 LTS镜像
# 官方地址:https://releases.ubuntu.com/20.04/
# 文件名:ubuntu-20.04.6-desktop-amd64.iso

小技巧:制作启动盘时,记得把U盘格式化成FAT32。我曾经用NTFS格式,结果启动时死活识别不了。

2.2.2 磁盘分区方案

我个人习惯的分区方案是这样的:

分区方案(建议SSD + HDD组合):
/boot     → 1GB    → SSD(引导分区)
/         → 50GB   → SSD(系统根目录)
/swap     → 16GB   → SSD(交换分区,大小=内存大小)
/home     → 剩余   → HDD(用户数据)

为什么要这样分?我解释一下:

  • /boot单独分:防止系统更新时把引导搞坏
  • /swap给够:编译Autoware时内存很容易爆,swap就是救命稻草
  • /home放HDD:代码、数据集这些大文件,放SSD太浪费了

注意:安装时选择「其他选项」手动分区。千万别选「清除整个磁盘并安装Ubuntu」——除非你确定不要Windows了。

2.3 系统基础软件包安装

装好系统后,第一件事就是装基础包。我每次装新机器都会跑一遍这个脚本:

# 更新软件源
sudo apt update && sudo apt upgrade -y

# 安装基础开发工具
sudo apt install -y \
    build-essential \
    cmake \
    git \
    vim \
    curl \
    wget \
    net-tools \
    htop \
    terminator

# 安装Python开发环境
sudo apt install -y \
    python3 \
    python3-pip \
    python3-venv

# 安装显卡驱动(NVIDIA用户)
# 先查看推荐驱动版本
ubuntu-drivers devices
# 安装推荐驱动
sudo apt install -y nvidia-driver-535

这里有个坑我要说一下:千万别用系统自带的「软件和更新」里的驱动安装。我遇到过好几次,装完驱动重启直接黑屏。后来我都是用ubuntu-drivers命令行工具,稳得很。

2.3.1 配置Git

做自动驾驶开发,Git是基本功。我习惯这样配:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.editor "vim"
git config --global color.ui true

# 生成SSH密钥(用于连接GitHub)
ssh-keygen -t rsa -b 4096 -C "你的邮箱"

2.3.2 安装Chrome浏览器

虽然Firefox也很好,但Chrome对WebGL和WebRTC支持更好。做自动驾驶可视化时,你可能会用到:

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
sudo apt update
sudo apt install -y google-chrome-stable

2.4 本章知识体系

下面这张图,是我梳理的系统环境准备核心逻辑:

系统环境准备核心流程 方案选择 系统安装 基础配置 双系统 vs 虚拟机 Ubuntu 20.04 LTS 基础软件包安装 性能/GPU/实时性 启动盘/分区/安装 Git/驱动/工具链 打好地基,后续开发才稳

2.5 避坑指南

最后,我把自己这些年踩过的坑总结一下:

  • 分区别太小:/分区至少50GB,不然装几个库就满了
  • 别用WSL:Windows Subsystem for Linux做Autoware开发?我试过,摄像头驱动和GPU加速全废了
  • 备份重要数据:装双系统前,把Windows里的东西备份好。我有个学生没备份,结果分区表搞坏了,哭了一下午
  • 网络要稳定:装系统时如果网络断了,下载包会失败。建议用有线网络

我的小习惯:装完系统后,第一时间做个系统备份。用dd命令或者Clonezilla都行。万一搞坏了,10分钟就能恢复。

好了,系统环境就准备到这里。下一章咱们开始装ROS和Autoware的核心依赖。记住:环境配好了,开发就成功了一半。

可可精品资料库