PX4仿真环境搭建实战:从零到一避坑指南
1. 环境准备避开依赖安装的深坑第一次搭建PX4仿真环境时最让人头疼的就是各种依赖包的安装。我清楚地记得自己当初在Ubuntu 18.04上折腾了整整两天光是解决python包的网络超时问题就耗费了大半天。这里分享几个血泪教训系统版本选择非常重要。虽然PX4官方支持Ubuntu 16.04到20.04但实测发现18.04是最稳定的选择。20.04会遇到Gazebo版本冲突问题而16.04又太老旧。建议新手直接用Ubuntu 18.04 LTS能省去很多麻烦。安装基础依赖时这个命令组合是我测试过最可靠的sudo apt-get update sudo apt-get install git zip qtcreator cmake \ build-essential genromfs ninja-build exiftool -ypython依赖最容易出问题。国内开发者经常会遇到pip安装超时这时候可以改用国内镜像源。但要注意不是所有镜像源都可靠。我测试过豆瓣、清华和阿里云的源发现豆瓣源对PX4所需的包支持最全pip3 install --user pandas jinja2 empy toml numpy pyquaternion \ -i http://pypi.douban.com/simple --trusted-host pypi.douban.com如果遇到ConnectTimeoutError不要急着重试。先检查网络连接然后尝试降低并发数pip3 install --user --retries 3 --timeout 60 package_name2. 固件下载与子模块更新解决网络问题克隆PX4固件仓库看似简单但新手常在这里栽跟头。最大的坑就是github的访问速度。我试过直接克隆官方仓库速度只有10KB/s一个简单的clone操作能卡半小时。这里推荐两种解决方案使用国内镜像把github.com替换为github.com.cnpmjs.orggit clone https://github.com.cnpmjs.org/PX4/Firmware更彻底的方法是修改.gitmodules文件。执行完git clone后进入项目目录sed -i s/github.com/github.com.cnpmjs.org/g .gitmodules git submodule sync git submodule update --init --recursive有时候子模块更新会报fatal: Needed a single revision错误。这是因为子模块的版本记录出了问题。解决方法很简单rm -rf Tools/jMAVSim git submodule update --init --recursive3. 编译与Gazebo联调常见错误排查编译环节是最容易出问题的阶段。我总结了三个最常见的编译错误及其解决方案错误一Gazebo开发包缺失CMake Error at CMakeLists.txt:32 (find_package): Could not find a package configuration file provided by gazebo解决方法sudo apt-get install libgazebo9-dev错误二GStreamer相关库缺失CMake Error: The following variables are used in this project, but they are set to NOTFOUND: GSTREAMER_LIBRARIES解决方法sudo apt-get install libgstreamer-plugins-base1.0-dev错误三Ignition Fuel访问问题[Err] [REST.cc:205] Error in REST request解决方法 编辑~/.ignition/fuel/config.yaml文件servers: - name: osrf url: https://api.ignitionrobotics.org编译命令也有讲究。很多人直接用make posix_sitl_default gazebo但这样编译速度很慢。推荐使用ninja构建系统make posix_sitl_default none4. ROS集成解决路径与启动问题ROS和PX4的集成是个技术活我遇到过最棘手的问题就是路径配置。这里分享几个关键技巧问题一Gazebo ROS包缺失Resource not found: gazebo_ros解决方法sudo apt-get install ros-melodic-gazebo-ros-pkgs \ ros-melodic-gazebo-ros-control问题二launch文件找不到RLException: [indoor1.launch] is neither a launch file...解决方法source ~/PX4_Firmware/Tools/setup_gazebo.bash \ ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo问题三VMware图形错误VMware: vmw_ioctl_command error 无效的参数解决方法export SVGA_VGPU100建议把这些环境变量配置写入~/.bashrc避免每次都要重新设置。完整的ROS启动流程应该是roslaunch px4 mavros_posix_sitl.launch5. 实战技巧与性能优化经过多次环境搭建我总结出几个提升效率的技巧使用ccache加速编译sudo apt-get install ccache export PATH/usr/lib/ccache:$PATH选择性编译如果只修改了部分代码可以只编译特定模块make px4_sitl_default list_commands make px4_sitl_default command_nameGazebo性能优化在~/.gazebo/gui.ini中添加[geometry] texture_qualitylow内存管理PX4编译很吃内存如果遇到OOM错误可以sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile版本控制建议为每个项目创建独立分支git checkout -b my_project v1.11.0-beta16. 常见问题速查手册这里整理了一份问题速查表方便开发者快速定位问题问题现象可能原因解决方案git clone速度慢网络连接问题使用github.com.cnpmjs.org镜像子模块更新失败.gitmodules配置错误修改.gitmodules文件中的URLGazebo启动黑屏显卡驱动问题设置export SVGA_VGPU100编译找不到Gazebo开发包未安装sudo apt-get install libgazebo9-devROS包路径错误环境变量未设置正确配置ROS_PACKAGE_PATH7. 进阶调试技巧当基础环境搭建完成后还需要掌握一些调试技巧PX4控制台在运行仿真时可以进入PX4 shellmake posix_sitl_default none_iris ./build/px4_sitl_default/bin/px4 -d ./posix-configs/SITL/init/ekf2/irisMAVLink监控mavlink-routerd -e 127.0.0.1:14550 127.0.0.1:14551Gazebo模型调试在Gazebo界面中可以通过View Transparent来查看碰撞体积。日志分析PX4的日志默认存储在~/PX4_Firmware/build/px4_sitl_default/tmp/rootfs/log目录下。参数调整可以通过QGroundControl或命令行调整参数param set MPC_XY_VEL_MAX 12 param save8. 仿真场景定制掌握了基础环境搭建后可以尝试定制自己的仿真场景添加自定义模型 在~/PX4_Firmware/Tools/sitl_gazebo/models目录下新建文件夹 按照Gazebo模型规范创建model.config和model.sdf文件修改世界文件 编辑~/PX4_Firmware/Tools/sitl_gazebo/worlds/iris.world 可以调整光照、物理引擎参数等创建新启动配置 复制~/PX4_Firmware/posix-configs/SITL/init下的配置文件 修改对应的参数和模型设置集成传感器插件 在~/PX4_Firmware/Tools/sitl_gazebo/src目录下添加新插件 修改CMakeLists.txt文件进行编译配置多机仿真 使用以下命令启动多个实例./Tools/sitl_multiple_run.sh -n 2 -m iris