Ubuntu搭建APM固件编译环境

张开发
2026/4/10 12:58:24 15 分钟阅读

分享文章

Ubuntu搭建APM固件编译环境
文章目录前言一、下载源码二、配置编译环境三、编译固件四、sitl仿真五、gazebo仿真六、仿真连接MAVROS七、多机仿真八、报错及解决方法前言Ubuntu20.04APM 4.4.0参考链接https://ardupilot.org/dev/docs/building-setup-linux.htmlAPM二次开发零基础教程APM搭建gazebo、MAVROS仿真环境APM无人船效果展示欢迎关注B站持续更新视频开源无人船自主避障演示附上已经配置好环境的虚拟机链接https://pan.baidu.com/s/1mKAFPeBwnH-qw-t4DR0vPQ?pwd2tyf提取码2tyf–来自百度网盘超级会员V6的分享一、下载源码git clone https://github.com/ArduPilot/ardupilot.git下载完之后cd ardupilotgit submodule initgit submodule update在执行git submodule update时若出现报错没有更新完毕子模块则继续执行该命令直至更新完毕。如果需要切换分支可以用git checkout 分支名如git checkout Copter-4.4.0附上已经下载完全的源码链接https://pan.baidu.com/s/1TQxyEM6PtStOkCGekGWCZw?pwdu04f提取码u04f–来自百度网盘超级会员V6的分享二、配置编译环境在ardupilot目录下执行下面的命令安装环境Tools/environment_install/install-prereqs-ubuntu.sh-y如果发生报错则重新执行上面的命令直至出现下面的提示说明环境安装成功配置成功后执行.~/.profile这里建议使用最新版的apm固件的环境安装脚本因为旧版固件的安装脚本安装完环境后能编译旧版固件但不一定能编译新版固件例如笔者使用4.3.1版的固件的脚本配置完环境后能编译4.3.1版固件但在编译4.3.7版固件时却报错解决办法也比较简单就是用4.3.7版固件的脚本再重新执行一遍就可以编译4.3.7版固件了。如果编译master版本的固件正常但是在切到Copter 4.3.7这个tag后执行./waf configure --board fmuv3时报下面的错解决办法也是在切到Copter 4.3.7这个tag后再执行一下配环境的脚本就可以了三、编译固件编译固件前要配置编译的固件的目标硬件我这里使用的是pix2.4.8飞控所以使用fmuv3的固件配置如下./waf configure--board fmuv3然后用下面的命令编译四旋翼固件./waf copter车/船./waf rover水下./waf sub编译成功如下编译后生成的固件在下图的目录清除编译./waf copter clean编译后自动下载./waf copter --upload设置git标签默认的git分支处于master这个分支时开发者分支正常使用的话建议使用稳定版分支下面的命令查看所有的taggit tag我这里最新的copter分支是4.3.1使用下面命令切换git checkout Copter-4.3.1切换成功后使用git branch查看如下然后再编译下载看到固件版本如下如果用master分支会看到固件版本是dev版四、sitl仿真以无人车为例在ardupilot/Rover目录下执行其中-f表示载具类型../Tools/autotest/sim_vehicle.py-f rover执行完毕后会弹出下面的页面然后打开地面站就可以链接到仿真的无人车了仿真垂起的话就在ardupilot/ArduPlane目录下执行sim_vehicle.py -v ArduPlane -f quadplane --console --map仿真水下机器人的话就在ardupilot/ArduSub目录下执行sim_vehicle.py -L RATBeach --outudp:0.0.0.0:14550 --map --console执行成功后如下仿真多旋翼的话就在ardupilot/ArduCopter目录下执行../Tools/autotest/sim_vehicle.py -v Copter如果需要指定仿真时的起始经纬度坐标可以用-l指定后面跟经纬高和航向./Tools/autotest/sim_vehicle.py -v Copter -I 0 -A --serial1uart:/dev/ttyUSB1 -l 34.760816,113.7855405,0.0,0 --outudp:192.168.17.170:14551所有支持的载具类型如下五、gazebo仿真gazebo安装sudo sh -c echo deb http://packages.osrfoundation.org/gazebo/ubuntu-stable lsb_release -cs main /etc/apt/sources.list.d/gazebo-stable.list wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt updatesudo apt install gazebo9 libgazebo9-dev安装成功后执行gazebo --verbose如果能弹出空的gazebo界面说明安装成功装gazebo插件git clone https://github.com/khancyr/ardupilot_gazebo cd ardupilot_gazebo mkdir build cd build cmake .. make -j4 sudo make install成功后如下修改环境变量在.bashrc中添加我这里ardupilot_gazebo在当前用户目录下如果在别的目录下面做相应修改source /usr/share/gazebo/setup.sh export GAZEBO_MODEL_PATH~/ardupilot_gazebo/models:${GAZEBO_MODEL_PATH} export GAZEBO_MODEL_PATH~/ardupilot_gazebo/models_gazebo:${GAZEBO_MODEL_PATH} export GAZEBO_RESOURCE_PATH~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH} export GAZEBO_PLUGIN_PATH~/ardupilot_gazebo/build:${GAZEBO_PLUGIN_PATH}然后启动仿真gazebo --verbose worlds/iris_arducopter_runway.world可以看到弹出一个gazebo页面里面有一架无人机如果没有无人机检查环境变量设置但此时的无人机无法连接地面站然后启动软件在环仿真进入~/ardupilot/ArduCopter目录执行../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map启动成功后如下此时就可以连接地面站了这时可以像真无人机一样规划航线但是解锁前需要将虚拟摇杆打到最低否则会报错六、仿真连接MAVROS第四步打开gazebo仿真后修改apm.launch如下launch !-- vim: set ftxml noet : -- !-- example launch script for ArduPilot based FCUs -- arg namefcu_url defaultudp://127.0.0.1:1455114555 / arg namegcs_url default / arg nametgt_system default1 / arg nametgt_component default1 / arg namelog_output defaultscreen / arg namefcu_protocol defaultv2.0 / arg namerespawn_mavros defaultfalse / include file$(find mavros)/launch/node.launch arg namepluginlists_yaml value$(find mavros)/launch/apm_pluginlists.yaml / arg nameconfig_yaml value$(find mavros)/launch/apm_config.yaml / arg namefcu_url value$(arg fcu_url) / arg namegcs_url value$(arg gcs_url) / arg nametgt_system value$(arg tgt_system) / arg nametgt_component value$(arg tgt_component) / arg namelog_output value$(arg log_output) / arg namefcu_protocol value$(arg fcu_protocol) / arg namerespawn_mavros value$(arg respawn_mavros) / /include /launch如果是垂起或者rov的话用tcp连接launch !-- vim: set ftxml noet : -- !-- example launch script for ArduPilot based FCUs -- arg namefcu_url defaulttcp://127.0.0.1:5762 / arg namegcs_url default / arg nametgt_system default1 / arg nametgt_component default1 / arg namelog_output defaultscreen / arg namefcu_protocol defaultv2.0 / arg namerespawn_mavros defaultfalse / include file$(find mavros)/launch/node.launch arg namepluginlists_yaml value$(find mavros)/launch/apm_pluginlists.yaml / arg nameconfig_yaml value$(find mavros)/launch/apm_config.yaml / arg namefcu_url value$(arg fcu_url) / arg namegcs_url value$(arg gcs_url) / arg nametgt_system value$(arg tgt_system) / arg nametgt_component value$(arg tgt_component) / arg namelog_output value$(arg log_output) / arg namefcu_protocol value$(arg fcu_protocol) / arg namerespawn_mavros value$(arg respawn_mavros) / /include /launch然后启动roslaunch apm.launch出现下面的提示说明mavros启动成功七、多机仿真以无人车为例在ardupilot/Rover目录下打开两个终端分别执行../Tools/autotest/sim_vehicle.py -f rover -I0 --sysid1../Tools/autotest/sim_vehicle.py -f rover -I1 --sysid2可以看到弹出了两个仿真可以看到TCP的地址但是地面站只自动连接了一个另一个要手动连接地址就是上面提示的地址连接后如下如果仿真无人机的话就在ArduCopter目录下执行下面的命令sim_vehicle.py -v copter -I0 --sysid1也可以通过下面的脚本一键启动多个无人机的仿真#!/bin/bash # 用法: ./start_multiVehicle_oneport.sh 数量 if [ -z $1 ]; then echo 请指定数量例如: $0 2; exit 1 fi NUM$1 for i in $(seq 0 $((NUM-1))); do sysid$((i1)) echo 启动第 $sysid 架 (-I$i, sysid$sysid) → 统一转发 UDP 14550 if [ $i -eq 0 ]; then ../Tools/autotest/sim_vehicle.py -v copter -I$i --sysid$sysid \ --speedup 1 \ --mavproxy-args--daemon --non-interactive --out127.0.0.1:14550 else ../Tools/autotest/sim_vehicle.py -v copter -I$i --sysid$sysid \ --speedup 1 --no-rebuild \ --mavproxy-args--daemon --non-interactive --out127.0.0.1:14550 fi sleep 2 done echo 已启动 $NUM 架。QGC 只需监听 UDP 14550。脚本后面加上无人机的数量八、报错及解决方法编译4.6.0版本的仿真时报下面的错原因是找不到路径修改把AP_BUILD_ROOT修改为实际的源码工程路径“/home/cwkj/ardupilot4.6.0/Tools/autotest”同理另一个改为“/home/cwkj/ardupilot4.6.0/libraries/SITL/SIM_AIS_data.txt”

更多文章