2. Ubuntu系统准备:Ubuntu 20.04/22.04安装、基础软件包安装、系统源配置、Git配置

好,咱们正式开始搭建环境。这一章说白了就是给飞控开发铺路——把Ubuntu系统收拾利索了,后面才能跑PX4的SITL仿真。

我个人习惯用Ubuntu 20.04 LTS,因为PX4官方对这个版本的验证最充分。当然22.04也能用,但有些依赖包需要手动处理一下。我建议新手直接上20.04,省心。

核心要点:Ubuntu系统准备是SITL环境的基石。系统源配置直接影响编译速度,Git配置则关系到代码管理。这三步做扎实了,后面几乎不会出环境问题。

2.1 系统版本选择与安装

先说说版本选择。我遇到过不少同学纠结于20.04还是22.04。其实没那么复杂——

  • Ubuntu 20.04 LTS:PX4官方推荐,生态最成熟。我团队里90%的机器跑的都是这个版本。
  • Ubuntu 22.04 LTS:新特性多,但部分依赖包需要从源码编译。如果你喜欢折腾,可以试试。

安装过程我就不赘述了,说几个关键点:

  1. 磁盘分区时,建议给根目录留至少50GB空间。我刚开始做PX4开发时只分了30GB,结果编译几个固件就满了,尴尬。
  2. 安装时选择「最小安装」,避免不必要的软件包干扰。
  3. 用户名最好用英文,不要带空格或特殊字符。我曾经因为用户名带了个点,导致某些工具链路径解析出错,排查了半天。

小技巧:安装完成后,先别急着装软件。打开终端,跑一下 sudo apt update && sudo apt upgrade -y,把系统更新到最新状态。这一步能避免很多依赖冲突。

2.2 系统源配置

系统源配置,说白了就是告诉apt去哪里下载软件包。国内用户如果不换源,下载速度会让你怀疑人生。

我一般用清华源或者阿里源。这里以清华源为例:

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

# 编辑源文件
sudo vim /etc/apt/sources.list

然后根据你的Ubuntu版本,替换为以下内容:

Ubuntu版本 源内容(清华源)
20.04 (focal)
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
22.04 (jammy)
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

替换完成后,执行:

sudo apt update

嗯,这里要注意:如果提示GPG密钥错误,别慌。执行 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 对应的密钥ID 就能解决。

避坑指南:我曾经在22.04上直接复制了20.04的源,结果apt update报了一堆404错误。版本代号一定要对应好——focal是20.04,jammy是22.04,别搞混了。

2.3 基础软件包安装

系统源配好了,接下来装基础软件包。这些是PX4编译和SITL仿真必需的依赖。

我习惯一次性装完,省得后面缺啥补啥:

sudo apt install -y \
    git \
    vim \
    curl \
    wget \
    build-essential \
    cmake \
    python3 \
    python3-pip \
    python3-venv \
    ninja-build \
    pkg-config \
    libssl-dev \
    libncurses5-dev \
    libxml2-dev \
    libxslt1-dev \
    zlib1g-dev \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gstreamer1.0-plugins-ugly \
    gstreamer1.0-libav \
    libqt5gui5 \
    libqt5core5a \
    libqt5widgets5 \
    qt5-qmake \
    qttools5-dev-tools

这些包涵盖了编译工具链、Python环境、多媒体库和Qt界面库。你想想看,SITL仿真需要图形界面显示无人机姿态,Qt库就是干这个的。

个人经验:如果你用的是Ubuntu 22.04,建议额外安装 libpython3-devpython3-numpy。22.04的Python环境有些变化,少了这两个包会导致mavsdk编译失败。我踩过这个坑,折腾了两个小时才找到原因。

2.4 Git配置

Git是代码管理的核心工具。PX4的源码托管在GitHub上,我们后面要频繁使用git进行克隆、分支切换和提交。

先配置用户信息:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

为什么一定要配这个?因为git每次提交都会记录作者信息。如果不配,提交时会报错,或者显示奇怪的默认值。

接下来配置SSH密钥,方便后续与GitHub交互:

# 生成SSH密钥
ssh-keygen -t ed25519 -C "你的邮箱@example.com"

# 查看公钥
cat ~/.ssh/id_ed25519.pub

把公钥添加到GitHub的SSH Keys设置里。这样后面clone和push就不用每次都输密码了。

我个人还习惯配置一些别名,提高效率:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

配置完成后,验证一下:

git config --list

应该能看到你设置的所有配置项。

避坑指南:我曾经在配置SSH时忘了指定密钥类型,用了默认的RSA。后来GitHub更新了安全策略,RSA密钥长度不够被拒绝访问。建议直接用ed25519,更安全也更高效。

2.5 本章知识体系

下面这张图总结了本章的核心逻辑:

Ubuntu系统准备知识体系 系统安装 20.04 / 22.04 LTS 系统源配置 清华源 / 阿里源 基础软件包 编译/仿真依赖 Git配置 用户/SSH/别名 关键输出:可编译PX4的Ubuntu环境 apt源正常 → 依赖包完整 → Git可正常clone/push 验证命令:git --version && apt-cache policy && python3 --version 常见问题 源配置后apt update报错 → 检查版本代号 | Git push需要密码 → 检查SSH配置

这张图把本章的四个核心步骤串起来了。你按这个顺序操作,基本不会出大问题。

2.6 验证环境

所有配置完成后,跑几个命令验证一下:

# 验证Git
git --version
# 输出示例:git version 2.25.1

# 验证apt源
apt-cache policy

# 验证Python
python3 --version
# 输出示例:Python 3.8.10

如果都能正常输出,说明环境准备就绪了。

最后说一句:环境准备这一步看似繁琐,但值得花时间做好。我见过太多同学因为源没配好或者依赖包缺失,编译到一半报错,然后从头排查。与其那样,不如一开始就按部就班来。


公众号:蓝海资料掘金营,微信deep3321