保姆级避坑指南:在Ubuntu 20.04上搞定APM固件无人机Gazebo仿真(附网络问题终极解决方案)
无人机仿真实战Ubuntu 20.04下APM固件与Gazebo的完美联调手册当你第一次尝试在Ubuntu上搭建APM固件的无人机仿真环境时可能会被各种依赖冲突、网络问题和版本不兼容搞得焦头烂额。作为一位经历过无数次踩坑的老手我将带你避开所有常见陷阱用最稳定的方式完成从零开始的Gazebo仿真环境搭建。1. 环境准备构建稳定的APM开发基础在开始之前请确保你的Ubuntu 20.04系统已经更新到最新状态。打开终端执行以下命令sudo apt update sudo apt upgrade -y1.1 系统依赖安装APM固件需要一系列基础依赖库才能正常工作。以下命令将安装所有必需组件sudo apt install -y git zip python3-pip python3-dev python3-opencv \ python3-wxgtk4.0 python3-matplotlib python3-lxml python3-pygame \ python3-yaml python3-psutil python3-serial python3-tk \ gcc g make cmake ccache注意如果你之前尝试过安装但失败了建议先清理残留文件sudo apt autoremove rm -rf ~/ardupilot1.2 获取APM源代码由于国内访问GitHub可能不稳定我们采用两种备选方案方案一推荐使用镜像源git clone https://gitee.com/mirrors/ardupilot.git ~/ardupilot cd ~/ardupilot git submodule update --init --recursive方案二手动下载压缩包访问Gitee镜像下载最新zip包解压到主目录并重命名为ardupilot进入目录执行子模块更新2. SITL仿真环境配置2.1 安装Python依赖APM的SITL仿真强烈建议使用系统自带的Python3环境避免Anaconda带来的兼容性问题pip3 install --user pymavlink MAVProxy future lxml验证安装是否成功mavproxy.py --version2.2 环境变量设置编辑~/.bashrc文件添加以下内容export PATH$PATH:$HOME/.local/bin export PATH$PATH:$HOME/ardupilot/Tools/autotest export PATH/usr/lib/ccache:$PATH使配置立即生效source ~/.bashrc3. Gazebo环境搭建与问题规避3.1 安装ROS与GazeboUbuntu 20.04对应ROS Noetic版本sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install -y ros-noetic-desktop-full初始化ROS环境echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc3.2 获取Gazebo模型库由于官方模型库地址变更我们需要手动配置mkdir -p ~/.gazebo/models wget https://github.com/osrf/gazebo_models/archive/refs/heads/master.zip -O /tmp/models.zip unzip /tmp/models.zip -d ~/.gazebo/ mv ~/.gazebo/gazebo_models-master ~/.gazebo/models更新Gazebo配置sudo sed -i s/http:\/\/gazebosim.org\/models/http:\/\/models.gazebosim.org/g /usr/share/gazebo*/setup.sh4. 联合仿真测试与排错指南4.1 启动基础仿真测试打开第一个终端启动SITLcd ~/ardupilot/ArduCopter sim_vehicle.py --map --console打开第二个终端启动Gazebogazebo --verbose4.2 常见问题解决方案问题1Gazebo模型加载失败症状[Err] [ModelDatabase.cc:294] Unable to download model manifests解决方案wget http://models.gazebosim.org/manifest.xml -P ~/.gazebo/问题2Protobuf版本冲突症状error: no matching function for call to google::protobuf::internal::ArenaStringPtr::GetNoArena解决方案sudo apt remove --purge libprotobuf-dev protobuf-compiler wget https://github.com/protocolbuffers/protobuf/releases/download/v3.15.8/protobuf-cpp-3.15.8.tar.gz tar -xzf protobuf-cpp-3.15.8.tar.gz cd protobuf-3.15.8 ./configure make -j$(nproc) sudo make install sudo ldconfig问题3MAVProxy模块加载失败症状Failed to load module: No module named console解决方案pip3 uninstall MAVProxy pymavlink pip3 install --user MAVProxy pymavlink5. 进阶配置与性能优化5.1 自定义仿真场景在ardupilot_gazebo/worlds目录下创建自定义场景?xml version1.0? sdf version1.6 world namecustom_demo include urimodel://sun/uri /include include urimodel://ground_plane/uri /include /world /sdf5.2 多机仿真配置编辑~/.bashrc添加多机仿真支持export ROS_HOSTNAMElocalhost export ROS_MASTER_URIhttp://localhost:11311启动多机仿真sim_vehicle.py -v ArduCopter -f gazebo-iris --console --map -I0 sim_vehicle.py -v ArduCopter -f gazebo-iris --console --map -I15.3 性能调优参数在SITL启动时添加优化参数sim_vehicle.py --map --console --speedup 2 --no-rebuildGazebo性能优化配置~/.gazebo/gui.ini[geometry] width1280 height720 [render_engine] typeogre2