3. Ubuntu 系统准备:把地基打牢

做嵌入式开发这么多年,我有个很深的体会:环境折腾得越久,后面写代码就越顺。PX4 仿真也不例外。Ubuntu 系统就是这栋房子的地基,地基没打好,后面 Gazebo 崩了、MAVSDK 连不上、显卡驱动挂了……你都不知道该从哪查起。

这一章,我们就来把 Ubuntu 20.04 或 22.04 装好、配好、调好。嗯,显卡驱动和 CUDA 我放在可选部分,不是所有人都需要,但如果你打算跑深度强化学习或者视觉 SLAM,那还是装上吧。

核心原则: 干净、稳定、可复现。别在系统里装一堆乱七八糟的东西,后面你会感谢自己的克制。

3.1 版本选择:20.04 还是 22.04?

这个问题我经常被问到。直接说结论:

特性 Ubuntu 20.04 LTS Ubuntu 22.04 LTS
PX4 官方推荐 ✅ 最成熟,文档最全 ✅ 支持,但部分旧教程不兼容
Gazebo 版本 Gazebo 9/11(默认) Gazebo 11(需手动装)
ROS 兼容性 ROS1 Noetic / ROS2 Foxy ROS2 Humble / ROS1 Noetic(需额外配置)
Python 版本 Python 3.8 Python 3.10
长期维护 支持到 2025 年 支持到 2027 年

我个人建议:如果你是新手,或者跟着网上大部分教程走,选 Ubuntu 20.04。踩坑少,搜问题容易找到答案。如果你喜欢新东西,或者打算长期用 ROS2,那 22.04 也可以,但要做好自己填坑的准备。

小技巧: 装系统时,磁盘分区建议给 / 分 50GB 以上,/home 分大一点。后面 PX4 源码、Gazebo 模型、ROS 包都很占空间。

3.2 系统安装:双系统还是虚拟机?

这个问题其实没有标准答案。我两种都用过,说说我的感受:

  • 双系统:性能最好,显卡直通,适合跑真机仿真或需要 GPU 加速的场景。缺点是你得重启切换,有点麻烦。
  • 虚拟机(VMware / VirtualBox):方便,随时快照,不怕搞坏系统。但 3D 加速是个坑,Gazebo 跑起来会卡。
  • WSL2:Windows 下的 Linux 子系统,轻量,但 GUI 支持还是差点意思,Gazebo 界面偶尔会闪。

如果你问我,我会说:老老实实装双系统。尤其是你要做 PX4 仿真,Gazebo 对 3D 性能要求不低,虚拟机里跑起来你会想砸电脑的。

注意: 如果你用的是 NVIDIA 显卡,装双系统时记得在 BIOS 里关掉 Secure Boot,不然显卡驱动装不上。我曾经在这上面浪费了整整一个下午。

3.3 系统基础配置:装完系统第一件事

系统装好之后,别急着装 PX4。先把这几步走完:

3.3.1 换源:让 apt 飞起来

国内连 Ubuntu 官方源,那速度……你懂的。换成国内镜像源,体验会好很多。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑源列表
sudo vim /etc/apt/sources.list

# 把内容全部替换为清华源(以 20.04 为例)
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 更新
sudo apt update && sudo apt upgrade -y

如果你用的是 22.04,把 focal 换成 jammy 就行。中科大、阿里云的源也都可以,选一个你感觉快的。

3.3.2 安装基础依赖

这些包是 PX4 编译和仿真必需的,我建议一次性装好:

sudo apt install -y \
  git \
  vim \
  curl \
  wget \
  cmake \
  build-essential \
  python3-pip \
  python3-venv \
  ninja-build \
  pkg-config \
  libeigen3-dev \
  libgstreamer1.0-dev \
  libgstreamer-plugins-base1.0-dev \
  libprotobuf-dev \
  protobuf-compiler \
  libboost-all-dev \
  libssl-dev \
  libudev-dev \
  libusb-1.0-0-dev
为什么装这么多? 我遇到过好几次,编译到一半报错说缺某个库,然后停下来装,再重新编译……浪费时间。一次性装好,后面省心。

3.3.3 配置 Git 和 SSH

PX4 源码在 GitHub 上,你肯定要用 Git 拉代码。配置好 SSH 密钥,后面就不用每次都输密码了。

# 配置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "your.email@example.com"

# 查看公钥,复制到 GitHub 设置里
cat ~/.ssh/id_ed25519.pub

嗯,这一步虽然简单,但很多人会忘。我记得有一次帮同事排查问题,发现他每次拉代码都要输密码,就是因为没配 SSH。

3.4 显卡驱动与 CUDA(可选)

如果你用的是 NVIDIA 显卡,并且打算跑 GPU 加速的仿真(比如用 CUDA 做深度强化学习),那这一步是必须的。如果只是跑普通的 PX4 + Gazebo 仿真,集成显卡就够了,可以跳过。

3.4.1 安装 NVIDIA 驱动

别去官网下载 .run 文件手动装,那个坑太多。用 Ubuntu 自带的 ubuntu-drivers 工具最稳:

# 查看推荐驱动版本
ubuntu-drivers devices

# 自动安装推荐驱动
sudo ubuntu-drivers autoinstall

# 或者手动指定版本(比如 535)
sudo apt install nvidia-driver-535

# 装完重启
sudo reboot

重启后,用 nvidia-smi 检查是否装成功。如果能看到显卡信息,就说明驱动装好了。

避坑指南: 我曾经在 Ubuntu 22.04 上装了最新的 545 驱动,结果系统直接黑屏进不去。后来换成 535 就稳了。所以,别追新,用推荐版本。

3.4.2 安装 CUDA Toolkit

CUDA 是 NVIDIA 的并行计算平台。如果你要用 GPU 跑算法,就得装它。

# 从 NVIDIA 官网下载 CUDA 11.8(以 20.04 为例)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

# 运行安装程序
sudo sh cuda_11.8.0_520.61.05_linux.run

# 安装时注意:不要勾选 Driver(驱动已经装过了),只选 Toolkit
# 安装完成后,配置环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

# 验证安装
nvcc --version

如果你用的是 22.04,CUDA 12.x 也支持,但要注意和驱动版本的兼容性。我建议先查一下 CUDA 兼容性矩阵,再决定装哪个版本。

3.4.3 安装 cuDNN(可选)

如果你要做深度学习,cuDNN 能加速神经网络训练和推理。安装步骤稍微麻烦一点:

# 从 NVIDIA 官网下载 cuDNN(需要注册账号)
# 下载后解压
tar -xzvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz

# 复制文件到 CUDA 目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64/

# 设置权限
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
小提示: cuDNN 版本要和 CUDA 版本匹配。比如 CUDA 11.8 对应 cuDNN 8.9.x。装错了会报符号找不到的错误,排查起来很头疼。

3.5 本章知识体系

下面这张图,帮你理清 Ubuntu 系统准备的完整流程:

Ubuntu 系统准备知识体系 Ubuntu 系统准备 版本选择 系统安装方式 基础配置 20.04 LTS 22.04 LTS 双系统 虚拟机 WSL2 换源 依赖安装 Git 配置 显卡驱动 & CUDA(可选) NVIDIA 驱动 CUDA Toolkit 虚线部分为可选配置,根据实际需求决定是否安装

这张图把本章的内容串起来了。你可以看到,版本选择和系统安装是前置条件,基础配置是必做项,显卡驱动和 CUDA 是可选增强项。按照这个顺序来,不会乱。

3.6 本章小结

Ubuntu 系统准备这一步,看起来琐碎,但真的很重要。我见过太多人,装完系统直接拉 PX4 源码开始编译,结果各种报错,最后发现是依赖没装全,或者源没换好。