从零到一:Ubuntu 20.04下PX4与FlightGear联合仿真全攻略
第一次接触PX4和FlightGear的联合仿真时,我几乎被各种依赖错误和配置问题折磨到崩溃。经过三天的不懈努力和无数次重装系统,终于总结出一套真正可行的方案。本文将带你避开所有我踩过的坑,用最短的时间搭建起完整的仿真环境。
1. 环境准备与基础配置
在开始之前,确保你的Ubuntu 20.04系统已经更新到最新状态。打开终端,执行以下命令:
sudo apt update && sudo apt upgrade -y重要提示:建议使用全新的Ubuntu 20.04系统进行安装,避免因已有环境导致的冲突问题。我在尝试升级Ubuntu 18.04时遇到了大量兼容性问题,最终选择了全新安装。
1.1 安装必要依赖
PX4和FlightGear需要一系列基础依赖库,以下是必须安装的软件包:
sudo apt install -y git cmake python3-pip python3-dev python3-numpy \ python3-matplotlib python3-yaml python3-empy python3-jinja2 \ python3-argcomplete python3-setuptools python3-wheel \ gcc g++ make ninja-build protobuf-compiler \ libeigen3-dev libopencv-dev libxml2-utils \ libboost-all-dev libprotobuf-dev libcgal-dev常见问题:如果遇到E: Unable to locate package错误,可能是你的软件源配置有问题。可以尝试更换为国内镜像源:
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo apt update1.2 配置Python环境
PX4开发环境对Python版本有一定要求,建议使用Python 3.8:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 sudo update-alternatives --config python然后安装必要的Python包:
pip3 install --upgrade pip pip3 install packaging toml numpy jinja2注意:不要使用
sudo pip安装,这可能导致权限问题。如果遇到权限错误,可以添加--user参数。
2. FlightGear安装与配置
FlightGear是开源的飞行模拟器,我们将使用PPA方式安装最新稳定版。
2.1 安装FlightGear
执行以下命令添加PPA并安装:
sudo add-apt-repository ppa:saiarcot895/flightgear sudo apt update sudo apt install -y flightgear flightgear-data安装完成后,可以运行以下命令测试:
fgfs --launcher性能优化:FlightGear默认会下载地景数据,这可能导致首次启动非常缓慢。建议提前下载常用地景:
sudo apt install -y flightgear-data-aircrafts flightgear-data-base2.2 配置Protocol权限
PX4与FlightGear通信需要写入Protocol目录,需要设置正确权限:
sudo chmod a+w /usr/share/games/flightgear/Protocol如果找不到该目录,可能是安装路径不同,可以尝试:
sudo find / -name "Protocol" -type d3. PX4固件编译与问题解决
PX4是开源的自动驾驶仪软件,我们将从GitHub克隆特定版本的代码。
3.1 获取PX4源码
推荐使用ThunderFly维护的flightgear-multi分支:
git clone https://github.com/ThunderFly-aerospace/PX4Firmware.git cd PX4Firmware git checkout flightgear-multi替代方案:如果网络连接不稳定,可以使用Gitee镜像:
git clone https://gitee.com/mirrors/PX4-Firmware.git cd PX4-Firmware git checkout flightgear-multi3.2 编译PX4
进入PX4目录后,首先初始化子模块:
git submodule update --init --recursive然后尝试编译固定翼仿真:
make px4_sitl_nolockstep flightgear_rascal常见错误及解决方案:
- ignition-math4缺失错误:
Could not find a package configuration file provided by "ignition-math4"解决方法:
sudo apt install -y libignition-math4-dev- protobuf版本冲突:
如果遇到protobuf相关错误,可以尝试:
sudo apt remove libprotobuf-dev pip3 install --user protobuf==3.19.4- Python包缺失:
pip3 install --user pyserial cerberus pyulog3.3 测试不同机型
PX4支持多种飞行器模型,以下是常用命令:
- 固定翼飞机:
make px4_sitl_nolockstep flightgear_rascal- 旋翼机:
make px4_sitl_nolockstep flightgear_tf-g1- 车辆:
make px4_sitl_nolockstep flightgear_tf-r14. 联合仿真实战与技巧
成功编译只是第一步,要让仿真真正可用还需要一些技巧。
4.1 优化FlightGear性能
FlightGear默认设置可能很卡顿,可以通过以下参数优化:
fgfs --launcher --prop:/sim/rendering/multithreading-mode=AutomaticSelection \ --prop:/sim/rendering/texture-compression=on \ --prop:/sim/rendering/compressed-textures=1 \ --prop:/sim/rendering/shaders/skydome=false推荐配置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| texture-compression | on | 启用纹理压缩 |
| multithreading-mode | AutomaticSelection | 自动选择多线程模式 |
| shaders/skydome | false | 禁用复杂天空着色器 |
| rendering/quality-level | 3 | 中等画质 |
4.2 使用QGroundControl
QGroundControl是PX4的官方地面站,安装方法:
sudo usermod -a -G dialout $USER sudo apt install -y gstreamer1.0-plugins-bad gstreamer1.0-libav wget https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage chmod +x QGroundControl.AppImage ./QGroundControl.AppImage连接仿真器:
- 启动PX4仿真
- 打开QGroundControl
- 选择"UDP"连接方式
4.3 飞行控制基础
在仿真环境中,可以通过MAVLink控制飞行器:
- 一键起飞:
commander takeoff- 切换飞行模式:
commander mode altitude- 降落:
commander land键盘控制参考:
- W/S:升降舵
- A/D:副翼
- Q/E:方向舵
- R/F:油门
- V:切换视角
5. 高级调试与问题排查
即使按照步骤操作,仍可能遇到各种奇怪的问题。以下是我总结的排查方法。
5.1 网络问题解决
FlightGear需要下载地景数据,如果卡在加载界面:
- 检查网络连接
- 尝试更换下载服务器:
fgfs --launcher --prop:/sim/terrasync/scenery-dir=/path/to/scenery \ --prop:/sim/terrasync/server=scenery.flightgear.org- 或者使用离线地景包:
sudo apt install -y flightgear-data-autogen5.2 编译错误排查
如果make失败,可以尝试:
- 清理编译缓存:
make clean- 详细日志输出:
make px4_sitl_nolockstep flightgear_rascal VERBOSE=1- 检查依赖完整性:
./Tools/check_submodules.sh5.3 常见错误代码
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| ENOENT | 文件缺失 | 检查子模块是否初始化 |
| EACCES | 权限问题 | 使用sudo或修复权限 |
| ECONNREFUSED | 连接拒绝 | 检查FlightGear是否运行 |
6. 仿真环境优化建议
经过多次尝试,我发现以下配置组合效果最佳:
硬件配置:
- CPU:至少4核
- 内存:8GB以上
- 显卡:支持OpenGL 3.3+
系统设置:
sudo sysctl -w vm.swappiness=10 sudo echo "vm.swappiness=10" >> /etc/sysctl.confPX4参数调整:
- 设置
SYS_USE_IO为0 - 调整
SITL_FRAME匹配你的机型
- 设置
FlightGear渲染设置:
- 关闭阴影
- 降低云层细节
- 使用纹理压缩
在实际项目中,我发现最稳定的组合是PX4 v1.33 + FlightGear 2020.3.11。新版本虽然功能更多,但往往带来新的兼容性问题。如果只是学习基础飞行控制,这套组合已经足够。