2. 基础环境准备:Ubuntu 操作系统安装、系统更新与软件源配置、Git 版本控制工具安装、基础开发库安装
说实话,很多朋友刚开始接触 SITL 仿真,第一反应就是去折腾那些高大上的飞控算法。但我见过太多人,环境没搭好就急着写代码,最后卡在一个莫名其妙的依赖报错上,一查就是半天。嗯,基础环境这东西,就像盖房子的地基——你看着不起眼,但要是没打好,后面全得塌。
这一章,我们就老老实实把地基夯实。我会带你走一遍 Ubuntu 的安装、软件源配置、Git 安装,还有那些必须装的基础开发库。别嫌啰嗦,这些步骤我踩过的坑,你一个都不用再踩。
2.1 为什么选择 Ubuntu?
你可能要问:为什么非得用 Ubuntu?Windows 不行吗?macOS 不行吗?
我的回答是:可以,但没必要跟自己过不去。
PX4 和 ArduPilot 的官方 SITL 支持,第一优先就是 Ubuntu。说白了,整个生态圈的工具链、脚本、依赖库,都是围绕 Ubuntu 设计的。你在 Windows 上折腾 WSL 或者 Cygwin,也能跑起来,但每遇到一个坑,网上搜到的解决方案十有八九都是 Ubuntu 的。你想想看,是跟着大部队走省心,还是自己开荒省心?
我个人习惯用 Ubuntu 22.04 LTS。LTS 版本有 5 年官方支持,稳定,软件源也全。如果你手头有 20.04 或者 24.04,也没问题,但 22.04 是我测试下来兼容性最稳的。
版本建议:Ubuntu 22.04 LTS (Jammy Jellyfish) 是目前 SITL 仿真环境的首选。如果你用其他版本,后面某些依赖包的版本号可能对不上,需要手动调整。
2.2 Ubuntu 操作系统安装
安装 Ubuntu 的方式有很多种。我假设你是在自己的电脑上装,或者用虚拟机。这里我只讲最常用的两种:物理机安装和虚拟机安装。
2.2.1 虚拟机安装(推荐新手)
如果你是第一次接触 Linux,我强烈建议你先用虚拟机。这样即使搞砸了,也不会影响你主机的系统。我常用的虚拟机软件是 VMware Workstation Player(免费版)或者 VirtualBox。
步骤很简单:
- 下载 Ubuntu 22.04 的 ISO 镜像文件(官网直接下,别去第三方站点)。
- 新建虚拟机,选择「稍后安装操作系统」,类型选 Linux,版本选 Ubuntu 64-bit。
- 分配资源:内存至少 4GB,硬盘至少 40GB。我建议给 8GB 内存 + 80GB 硬盘,后面编译固件时你会感谢我的。
- 启动虚拟机,挂载 ISO 镜像,按提示安装。
- 安装过程中,语言选 English(避免路径中文乱码),键盘布局选 English (US)。
- 分区选「Erase disk and install Ubuntu」——别怕,这只是擦除虚拟硬盘,不影响你真实电脑。
小技巧:安装时勾选「Install third-party software for graphics and Wi-Fi」,能省去不少驱动折腾。我曾经因为没勾这个,装完系统发现无线网卡不工作,折腾了半小时才搞定。
2.2.2 物理机安装(双系统)
如果你打算长期搞无人机开发,物理机性能更好。但要注意:备份数据!备份数据!备份数据! 重要的事情说三遍。
物理机安装的要点:
- 制作启动 U 盘:用 Rufus(Windows)或者 dd 命令(Linux/macOS)把 ISO 写入 U 盘。
- 进入 BIOS 关闭 Secure Boot,否则 Ubuntu 可能无法正常启动。
- 分区时手动分配:至少 30GB 给根分区(/),4GB 给交换分区(swap),剩下的给 home 分区(/home)。
- 安装完成后,先别急着高兴——大概率你会遇到显卡驱动问题。别慌,后面我们会处理。
注意:NVIDIA 显卡用户在安装后可能会遇到黑屏或分辨率异常。解决方案:在 GRUB 启动项里按 e 编辑,在 quiet splash 后面加上 nomodeset,然后按 F10 启动。进系统后再安装官方驱动。
2.3 系统更新与软件源配置
系统装好了,第一件事不是装软件,而是换源。Ubuntu 默认的软件源在国外,下载速度慢得让人抓狂。我当年第一次装完系统,直接 sudo apt update,结果等了半小时还没跑完……后来学乖了,先换源。
2.3.1 更换国内软件源
Ubuntu 的软件源配置文件在 /etc/apt/sources.list。我们把它备份一下,然后替换成国内镜像源。
# 备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑源列表
sudo nano /etc/apt/sources.list
把里面的内容全部替换成以下内容(以阿里云镜像源为例,Ubuntu 22.04):
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
保存退出后,执行更新命令:
sudo apt update
sudo apt upgrade -y
看到下载速度飙到几 MB/s 的时候,你就知道换源有多重要了。
其他镜像源:如果你在校园网,可以用中科大(ustc)或清华(tuna)的源,速度通常更快。格式一样,把 mirrors.aliyun.com 换成 mirrors.ustc.edu.cn 或 mirrors.tuna.tsinghua.edu.cn 即可。
2.3.2 系统更新
换完源后,sudo apt upgrade 会把系统里所有已安装的软件包更新到最新版本。这个过程可能需要几分钟到十几分钟,取决于你的网速和系统版本。
更新完成后,建议重启一下:
sudo reboot
为什么要重启?因为内核可能更新了。不重启的话,旧内核还在运行,新内核没生效。虽然不影响你装软件,但后面编译固件时可能会遇到一些奇怪的问题。我遇到过一回,就是没重启,结果编译时提示某个内核头文件版本不匹配,排查了半天才发现是内核没更新。
2.4 Git 版本控制工具安装
Git 是每个开发者的必备工具。在 SITL 仿真中,我们需要从 GitHub 上拉取 PX4 或 ArduPilot 的源码,后续还要管理自己的修改。没有 Git,寸步难行。
2.4.1 安装 Git
Ubuntu 下安装 Git 非常简单:
sudo apt install git -y
装完后验证一下:
git --version
你应该会看到类似 git version 2.34.1 的输出。如果版本号低于 2.30,建议从 PPA 安装新版,因为旧版 Git 在处理某些仓库时会有兼容性问题。
2.4.2 配置 Git 基本信息
Git 需要知道你是谁。虽然不配置也能用,但提交代码时会提示你设置。我建议一步到位:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
这里有个小细节:邮箱最好用 GitHub 注册时用的那个邮箱,这样你的提交记录会关联到你的 GitHub 账号上。如果你用不同的邮箱,GitHub 会把它当成匿名提交。
2.4.3 配置 SSH 密钥(可选但推荐)
如果你打算从 GitHub 上 clone 代码,用 HTTPS 也行,但每次都要输密码,很烦。配置 SSH 密钥后,就可以免密操作了。
# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
# 查看公钥
cat ~/.ssh/id_ed25519.pub
把输出的内容复制,然后登录 GitHub,进入 Settings → SSH and GPG keys → New SSH key,粘贴保存。
测试一下:
ssh -T git@github.com
如果看到 Hi xxx! You've successfully authenticated,就说明配置成功了。
为什么用 ed25519 而不是 rsa? ed25519 更安全,密钥更短,而且 GitHub 已经全面支持。我几年前还在用 4096 位的 RSA,后来发现 ed25519 性能更好,就全换了。
2.5 基础开发库安装
SITL 仿真环境需要一堆基础开发库。这些库是编译 PX4 或 ArduPilot 固件时的依赖。缺一个,编译就会报错。我整理了一份清单,你直接复制命令执行就行。
2.5.1 安装编译工具链
sudo apt install -y \
build-essential \
cmake \
ninja-build \
ccache \
g++ \
gcc \
make
这里面:
- build-essential:包含了 gcc、g++、make 等基础编译工具。
- cmake:跨平台的构建系统,PX4 和 ArduPilot 都用它。
- ninja-build:比 make 更快的构建工具,编译固件时能省不少时间。
- ccache:编译缓存工具。第二次编译同样的代码时,速度能快好几倍。
2.5.2 安装 Python 及工具
SITL 仿真中很多脚本是用 Python 写的,包括地面站通信、日志解析等。
sudo apt install -y \
python3 \
python3-pip \
python3-venv \
python3-dev
安装完成后,把 pip 升级到最新版:
python3 -m pip install --upgrade pip
注意:不要用 sudo pip install 安装 Python 包,除非你清楚自己在做什么。用 pip install --user 或者创建虚拟环境(venv)来管理依赖,避免污染系统 Python。
2.5.3 安装其他依赖库
这些库是 PX4 和 ArduPilot 编译时需要的,缺一不可:
sudo apt install -y \
libxml2-dev \
libxslt1-dev \
libssl-dev \
libcurl4-openssl-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libudev-dev \
libsdl2-dev \
libsdl2-image-dev \
libsdl2-ttf-dev \
libsdl2-gfx-dev \
libsdl2-net-dev \
libsdl2-mixer-dev \
libfreetype6-dev \
libglib2.0-dev \
libncurses5-dev \
libncursesw5-dev \
libreadline-dev \
libtool \
libusb-1.0-0-dev \
libzmq3-dev \
libprotobuf-dev \
protobuf-compiler
这些库的名字看着多,但其实都是标准包。你直接复制粘贴执行就行,不用一个个去理解它们是干什么的。等后面编译固件时,你就知道它们有多重要了。
2.5.4 安装 QGroundControl 依赖(可选)
如果你打算在 SITL 仿真中使用 QGroundControl 地面站,还需要安装一些额外的库:
sudo apt install -y \
qtbase5-dev \
qtchooser \
qt5-qmake \
qtbase5-dev-tools \
libqt5svg5-dev \
libqt5opengl5-dev \
libqt5serialport5-dev \
libqt5websockets5-dev \
libqt5x11extras5-dev
不过,QGroundControl 通常以 AppImage 形式运行,这些库只是备选。如果你不打算用 QGC,可以跳过这一步。
2.6 本章知识体系总览
为了让你对整个基础环境准备有个全局概念,我画了一张图。你可以把它当作一个检查清单,每完成一项就打个勾。
2.7 验证环境是否就绪
所有东西都装完后,我习惯跑一个快速验证脚本,确保关键工具都能正常调用。你可以复制以下命令,逐条执行:
# 验证系统版本
lsb_release -a
# 验证 Git
git --version
# 验证编译工具
gcc --version
g++ --version
cmake --version
ninja --version
# 验证 Python
python3 --version
pip3 --version
# 验证关键库是否存在
dpkg -l | grep libxml2
dpkg -l | grep libssl-dev
如果每一条都有正常输出,没有报错,恭喜你——基础环境已经准备好了。如果某条命令报错说「command not found」,那就回头检查一下对应的安装步骤,看看是不是漏装了。
我的习惯:我会把上面这些验证命令写成一个 shell 脚本,叫 check_env.sh,每次换新机器或者重装系统后,直接跑一遍,省得一个个敲。你也可以试试。