Ubuntu搭建APM固件编译环境
APM 4.2.3。
前言
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)