前言

Ubuntu20.04
APM 4.4.0
参考链接:
https://ardupilot.org/dev/docs/building-setup-linux.html

APM二次开发零基础教程:APM搭建gazebo、MAVROS仿真环境

APM无人船效果展示(欢迎关注B站,持续更新视频)

开源无人船自主避障演示

附上已经配置好环境的虚拟机
链接:https://pan.baidu.com/s/1mKAFPeBwnH-qw-t4DR0vPQ?pwd=2tyf
提取码:2tyf
–来自百度网盘超级会员V6的分享

一、下载源码

git clone https://github.com/ArduPilot/ardupilot.git

下载完之后

cd ardupilot
git submodule init
git submodule update

在执行git submodule update时若出现报错没有更新完毕子模块,则继续执行该命令,直至更新完毕。

附上已经下载完全的源码:
链接:https://pan.baidu.com/s/1TQxyEM6PtStOkCGekGWCZw?pwd=u04f
提取码: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,这个分支时开发者分支,正常使用的话建议使用稳定版分支
下面的命令查看所有的tag

git tag

我这里最新的copter分支是4.3.1
在这里插入图片描述
使用下面命令切换

git checkout Copter-4.3.1

切换成功后,使用git branch查看如下:
在这里插入图片描述
然后再编译下载,看到固件版本如下:如果用master分支,会看到固件版本是dev版
在这里插入图片描述

四、仿真

以无人车为例,在ardupilot/Rover目录下执行:

../Tools/autotest/sim_vehicle.py -f rover

执行完毕后会弹出下面的页面,然后打开地面站就可以链接到仿真的无人车了
在这里插入图片描述
仿真水下机器人的话,就在ardupilot/ArduSub目录下执行:

sim_vehicle.py -L RATBeach --out=udp:0.0.0.0:14550 --map --console

执行成功后如下
在这里插入图片描述

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 update
sudo 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 ft=xml noet : -->
	<!-- example launch script for ArduPilot based FCU's -->

	<arg name="fcu_url" default="udp://127.0.0.1:14551@14555" />
	<arg name="gcs_url" default="" />
	<arg name="tgt_system" default="1" />
	<arg name="tgt_component" default="1" />
	<arg name="log_output" default="screen" />
	<arg name="fcu_protocol" default="v2.0" />
	<arg name="respawn_mavros" default="false" />

	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg tgt_system)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
		<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
		<arg name="respawn_mavros" value="$(arg respawn_mavros)" />
	</include>
</launch>

然后启动

roslaunch apm.launch

出现下面的提示说明mavros启动成功
请添加图片描述

六、多机仿真

以无人车为例,在ardupilot/Rover目录下打开两个终端,分别执行:

../Tools/autotest/sim_vehicle.py -f rover -I0 --sysid=1
../Tools/autotest/sim_vehicle.py -f rover -I1 --sysid=2

可以看到弹出了两个仿真,可以看到TCP的地址
在这里插入图片描述
但是地面站只自动连接了一个,另一个要手动连接,地址就是上面提示的地址
在这里插入图片描述
连接后如下:
在这里插入图片描述
如果仿真无人机的话,就在ArduCopter目录下执行下面的命令

sim_vehicle.py -v copter -I0 --sysid=1
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐