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 环境验证与知识体系
下面这张图,是我自己总结的“环境搭建全景图”。你对照着检查,缺什么补什么:
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分钟……
好了,环境搭完,验证通过。接下来就可以放心地往下走了。