2. 环境总览:Ubuntu系统安装、基础开发工具链配置、网络环境检查

做SITL仿真,说白了就是先搭好一个“虚拟飞行实验室”。

我见过不少新手,一上来就急着编译代码,结果系统缺库、网络不通、工具链版本不对,折腾半天连第一个仿真都跑不起来。嗯,这一章咱们就把地基打牢。

本章核心目标:在一台干净的Ubuntu系统上,完成从系统安装到工具链验证的全流程,确保后续所有仿真实验能顺畅运行。

2.1 操作系统选择与安装

我个人习惯用 Ubuntu 22.04 LTS。为什么?因为PX4和ArduPilot的官方CI都在这个版本上跑,兼容性最好。

版本 推荐度 理由
Ubuntu 20.04 LTS 可用 Python 3.8,部分新工具需手动升级
Ubuntu 22.04 LTS 强烈推荐 Python 3.10,GCC 11,生态最完整
Ubuntu 24.04 LTS 谨慎 太新,部分驱动和库尚未稳定适配

安装方式建议:

  • 物理机:性能最好,适合长期开发
  • 虚拟机(VMware/VirtualBox):方便快照回滚,适合初学者
  • WSL2:轻量,但USB/串口直通较麻烦

我个人推荐虚拟机起步。你想想看,万一系统搞崩了,一个快照就恢复,省心。

2.2 基础开发工具链配置

系统装好后,第一件事就是装工具链。别急着去官网一个个下载,咱们用apt一把梭。

2.2.1 核心编译工具

# 更新包索引
sudo apt update
sudo apt upgrade -y

# 安装基础编译工具
sudo apt install -y \
    build-essential \
    cmake \
    git \
    wget \
    curl \
    python3 \
    python3-pip \
    python3-venv \
    ninja-build \
    pkg-config \
    libssl-dev \
    libncurses5-dev \
    libxml2-dev \
    libxslt1-dev \
    zlib1g-dev

这里有个坑——build-essential 包含了 GCC/G++,但版本可能不是最新的。我在项目中遇到过因为GCC版本太低导致编译报错的情况。建议装完后检查一下:

gcc --version
# 期望输出:gcc (Ubuntu 11.4.0) 11.4.0
cmake --version
# 期望输出:cmake version 3.22.1 或更高

2.2.2 Python环境配置

Python是SITL仿真的“胶水语言”。很多工具链脚本、MAVSDK示例都依赖它。

# 升级pip
python3 -m pip install --upgrade pip

# 安装常用Python包
pip3 install --user \
    numpy \
    opencv-python \
    matplotlib \
    pymavlink \
    dronekit \
    future

注意:千万不要用 sudo pip install!这会把包装到系统级目录,容易和apt管理的包冲突。我曾经手贱这么干过一次,结果系统Python环境直接崩了,重装了系统才解决。

正确做法:要么加 --user,要么用虚拟环境。

2.2.3 串口与USB工具

做仿真虽然不直接连飞控,但后面联调时你可能需要读取真实传感器的数据。这些工具提前装好:

sudo apt install -y \
    screen \
    minicom \
    picocom \
    setserial \
    usbutils

2.3 网络环境检查

SITL仿真需要和地面站、MAVSDK通信,网络环境必须通。我见过有人折腾半天,最后发现是防火墙把UDP端口封了。

2.3.1 检查网络连通性

# 测试外网连通
ping -c 4 8.8.8.8

# 测试DNS解析
ping -c 4 github.com

# 检查本机IP
ip addr show

如果 ping 8.8.8.8 通但 ping github.com 不通,那就是DNS问题。检查 /etc/resolv.conf:

cat /etc/resolv.conf
# 应该包含类似:
# nameserver 8.8.8.8
# nameserver 114.114.114.114

2.3.2 防火墙与端口检查

SITL默认使用UDP 14550端口(MAVLink)和TCP 5760端口(仿真控制)。确保这些端口没被占用:

# 检查端口占用
sudo netstat -tulpn | grep -E '14550|5760'

# 如果防火墙开启,放行端口
sudo ufw allow 14550/udp
sudo ufw allow 5760/tcp
sudo ufw status

小技巧:如果你在虚拟机里跑Ubuntu,记得把网络模式设为“桥接”而不是“NAT”。桥接模式下,虚拟机有自己的独立IP,地面站可以直接连过来。NAT模式需要做端口转发,麻烦得很。

2.4 环境验证与知识体系

下面这张图,是我自己总结的“环境搭建全景图”。你对照着检查,缺什么补什么:

SITL仿真环境搭建全景图 SITL仿真环境搭建全景图 Ubuntu 22.04 LTS 核心工具链:GCC / CMake / Git / Python3 编译环境 build-essential / ninja Python生态 pymavlink / dronekit 网络工具 screen / ufw / netstat 编译验证 gcc --version / cmake Python验证 python3 -c "import pymavlink" 网络验证 ping / netstat / ufw ✅ 环境就绪,可以开始SITL仿真 提示:每完成一层验证,建议拍个快照。万一后面搞坏了,直接回滚,不用重头再来。

2.5 快速验证脚本

为了省事,我写了个一键验证脚本。你把它保存为 check_env.sh,跑一下就知道环境有没有问题:

#!/bin/bash
# SITL环境快速验证脚本

echo "=== 1. 系统版本 ==="
lsb_release -a 2>/dev/null | grep Description

echo ""
echo "=== 2. GCC版本 ==="
gcc --version | head -1

echo ""
echo "=== 3. CMake版本 ==="
cmake --version | head -1

echo ""
echo "=== 4. Python版本 ==="
python3 --version

echo ""
echo "=== 5. 关键Python包 ==="
python3 -c "import pymavlink; print('pymavlink OK')" 2>/dev/null || echo "pymavlink 未安装"
python3 -c "import dronekit; print('dronekit OK')" 2>/dev/null || echo "dronekit 未安装"

echo ""
echo "=== 6. 网络连通性 ==="
ping -c 1 -W 2 8.8.8.8 &>/dev/null && echo "外网连通: OK" || echo "外网连通: FAIL"

echo ""
echo "=== 7. 端口可用性 ==="
netstat -tulpn 2>/dev/null | grep -E '14550|5760' || echo "端口14550/5760: 未占用"

重要提醒:如果你用的是虚拟机,记得在虚拟机设置里开启“虚拟化引擎”(Intel VT-x / AMD-V)。否则后面编译PX4固件时,会慢到你怀疑人生。我第一次没开,编译等了40分钟……

好了,环境搭完,验证通过。接下来就可以放心地往下走了。