Prometheus 无人机仿真平台 Ubuntu 18.04 部署:3个关键编译报错与解决方案
Prometheus无人机仿真平台Ubuntu 18.04部署:3个关键编译报错与解决方案
在无人机开发领域,仿真环境搭建是算法验证和系统测试的关键环节。Prometheus作为国内知名的开源无人机仿真平台,集成了PX4飞控、ROS通信和Gazebo物理引擎,为开发者提供了完整的仿真解决方案。然而,在Ubuntu 18.04系统上部署Prometheus时,开发者常会遇到各种编译问题,这些问题往往成为阻碍项目快速推进的"拦路虎"。
本文将聚焦三个最具代表性的编译报错,通过深入分析问题根源,提供经过验证的解决方案。不同于线性的安装教程,我们将从问题排查的角度切入,帮助开发者快速定位和解决部署过程中的核心障碍。无论您是刚开始接触无人机仿真的研究生,还是需要快速搭建测试环境的工程师,都能从本文找到实用参考。
1. CMake版本冲突引发的Gazebo编译失败
1.1 问题现象描述
在编译prometheus_px4时,执行make amovlab_sitl_default gazebo_p450命令后,终端输出如下错误:
[813/817] Linking CXX executable bin/px4 FAILED: external/Stamp/sitl_gazebo/sitl_gazebo-build ninja: build stopped: subcommand failed. Makefile:231: recipe for target 'px4_sitl' failed make: *** [px4_sitl] Error 11.2 根因分析
该问题通常由以下两个因素共同导致:
- CMake版本不兼容:PX4 Gazebo仿真需要特定版本的CMake(3.17-3.19),而Ubuntu 18.04默认安装的CMake 3.10无法正确处理某些编译选项
- Python包安装位置错误:当系统安装了Anaconda时,相关Python包(如toml、empy)可能被安装到conda虚拟环境而非系统路径
1.3 解决方案
步骤1:安装指定版本CMake
wget https://cmake.org/files/v3.17/cmake-3.17.2-Linux-x86_64.sh sudo chmod +x cmake-3.17.2-Linux-x86_64.sh sudo ./cmake-3.17.2-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir步骤2:修正Python包安装路径
sudo -H python3 -m pip install --user toml empy jinja2 packaging -i https://pypi.douban.com/simple步骤3:验证CMake版本
cmake --version # 应显示3.17.x注意:完成安装后需要重新打开终端使环境变量生效
1.4 补充说明
如果仍遇到编译错误,可尝试清理编译缓存:
cd prometheus_px4 make clean rm -rf build/2. 子模块下载失败问题
2.1 问题现象
执行git submodule update --init --recursive时,出现如下错误:
fatal: unable to access 'https://github.com/aquynh/capstone.git/': Failed to connect to github.com port 443: Connection timed out fatal: clone of 'https://github.com/aquynh/capstone.git' into submodule path '/tmp/bloaty/third_party/capstone' failed2.2 根因分析
主要原因是:
- 国内网络环境访问GitHub不稳定
- 部分子模块仓库体积较大(如gazebo模型库)
- 子模块依赖链复杂,单个失败会导致整个流程中断
2.3 解决方案
方法一:使用Gitee镜像(推荐)
# 修改.gitmodules文件中的URL sed -i 's/github.com/gitee.com/g' .gitmodules方法二:手动下载子模块
- 从错误信息中获取失败的子模块URL
- 通过代理或镜像站下载对应仓库ZIP包
- 解压到指定路径(如
/tmp/bloaty/third_party/capstone)
方法三:分步更新子模块
# 先更新主要子模块 git submodule update --init Tools/setup git submodule update --init src/modules # 再更新其他非必要子模块2.4 验证方法
成功更新所有子模块后,应能在以下目录找到对应内容:
prometheus_px4/Tools/setup/ prometheus_px4/src/modules/3. 权限问题导致的编译中断
3.1 问题现象
编译过程中出现如下权限错误:
CMake Error at cmake/px4_add_module.cmake:102 (file): file cannot create directory: /usr/local/share/... Permission denied3.2 根因分析
Ubuntu系统默认权限限制导致:
- 普通用户无权写入系统目录(如/usr/local)
- 部分脚本未正确处理sudo权限
- 编译中间文件生成失败
3.3 解决方案
方案一:全局权限修正
# 授予当前用户对Prometheus目录的完全权限 sudo chown -R $USER:$USER /path/to/Prometheus chmod -R 755 /path/to/Prometheus方案二:指定用户目录安装
# 在CMake命令中添加本地安装路径 cmake -DCMAKE_INSTALL_PREFIX=$HOME/.local ..方案三:使用sudo编译(不推荐)
sudo make amovlab_sitl_default gazebo_p450警告:使用sudo编译可能导致后续开发权限混乱,建议作为最后手段
3.4 权限问题检查清单
完成修复后,请确认:
- 当前用户对项目目录有读写权限
- 所有依赖的安装目录可访问
- 环境变量指向正确的路径
4. 其他常见问题与优化建议
4.1 编译加速技巧
# 使用多核编译(根据CPU核心数调整) make -j$(nproc) # 禁用无关模块编译 export DISABLE_MODULES=modules/logger4.2 依赖管理最佳实践
建议使用以下命令安装系统依赖:
# ROS melodic依赖 sudo apt-get install ros-melodic-mavros ros-melodic-mavros-extras sudo apt-get install ros-melodic-rtabmap* # Gazebo相关依赖 sudo apt-get install libgazebo9-dev4.3 环境配置检查表
完成安装后,请验证以下关键组件:
| 组件 | 验证命令 | 预期输出 |
|---|---|---|
| ROS | roscore & | 无报错启动 |
| Gazebo | gazebo --version | 9.x版本 |
| PX4 | make px4_sitl list_vmd_make_targets | 显示可用目标 |
4.4 网络代理配置
如需使用代理,建议配置全局环境变量:
export http_proxy=http://proxy.example.com:8080 export https_proxy=http://proxy.example.com:80805. 仿真平台验证与测试
5.1 基础功能测试
# 启动Gazebo仿真环境 roslaunch prometheus_gazebo sitl.launch # 启动QGroundControl地面站 ./QGroundControl.AppImage5.2 常见测试场景
场景1:基础控制测试
# 示例Python控制脚本 from prometheus_pkg import uav_control uav = uav_control.UAV() uav.takeoff(height=5) uav.go_to_position(x=10, y=10, z=5)场景2:视觉SLAM测试
roslaunch prometheus_slam rtabmap.launch场景3:多机协同仿真
# 在终端1启动仿真环境 roslaunch prometheus_gazebo multi_uav.launch # 在终端2启动控制节点 rosrun prometheus_control multi_uav_control.py5.3 性能优化建议
- 关闭不必要的Gazebo插件
- 使用简化模型替代高精度模型
- 在
~/.bashrc中添加以下优化参数:
export GAZEBO_RESOURCE_PATH=/usr/share/gazebo-9 export GAZEBO_MODEL_PATH=~/.gazebo/models