[SITL仿真] Ardupilot基于ROS-Gazebo的仿真模拟

Gazebo仿真器是一款功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的是其开源免费的特性。支持旋翼,固定翼,倾转,小车等,支持平台较多,与ROS绑定。
就目前来讲,Ardupilot官方提供了基于Gazebo的SITL仿真,但众所周知Gazebo可以单独使用也可以与ROS一起使用,当Gazebo单独使用时我们无法读取模型中的虚拟摄像头信息或控制模型云台,本文将为解决以上问题提供现有的解决方案。
系统:Ubuntu20.04.6

1、搭建Ardupilot基础开发环境

cd ~
git clone https://github.com/ArduPilot/ardupilot --recursive
cd ardupilot/Tools/environment_install
./install-prereqs-ubuntu.sh

随后重启电脑(或注销)以重置环境变量

cd ardupilot/Tools/ArduCopter   #后续仿真中的参数变更会存在这里
sim_vehicle.py --console --map  

出现以下界面表示基础开发环境配置完成


· 后续仿真过程在可能会报错:Main loop slow (222Hz < 300Hz)
· 解决方法:ARMING_CHECK参数设置为0
参考:SITL + AirSim can not arm: Main loop slow (222Hz < 300Hz) · Issue #4817 · microsoft/AirSim · GitHub

2、安装ROS-noetic
我使用的是来自鱼香ROS的一键ROS安装,相对来说会省心许多,同时使用这种安装方法会自动安装gazebo,不需要再花时间安装
输入以下命令即可:

wget http://fishros.com/install -O fishros && . fishros

或者使用官方教程安装
ROS官网:noetic - ROS Wiki
鱼香ROS官网:https://www.fishros.com/

3、安装测试
在这里使用来自SwiftGust的仓库,相对于khancyr提供的版本,SwiftGust提供了更多示例和更多文档。两者都使用相同的插件,它们仅在提供的文档和示例方面有所不同。

git clone https://github.com/SwiftGust/ardupilot_gazebo
sudo apt-get install libgazebo11-dev
cd ardupilot_gazebo
mkdir build
cd build
cmake ..
make -j4
sudo make install

下一步编辑环境变量:

sudo vim ~/.bashrc

加入以下内容:

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}

进行测试
打开两个终端,在第一个终端运行

sim_vehicle.py -v ArduCopter -f gazebo-iris  --map --console 

在第二个终端运行

gazebo --verbose iris_ardupilot.world

您应该能看到以下画面,这代表gazebo-sitl仿真能够正常工作



参考文档:

https://ardupilot.org/dev/docs/sitl-with-gazebo-legacy.html

4、安装QGC(用于读取飞控信息与修改参数)
安装必要软件包

sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libqt5gui5 -y
sudo apt install libfuse2 -y

安装QGC

#首先前往官网下载对应的QGroundControl.AppImage文件
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage  (or double click)

可以看到解锁时报错如下:


修改对应参数后重启仿真,再次起飞,可以实现飞行器的基础试飞

参考文档:
http://qgroundcontrol.com/
https://docs.qgroundcontrol.com/master/en/getting_started/download_and_install.html

5、安装mavros功能包(这里使用二进制软件包,源码编译请自行寻找相关教程)

sudo apt install ros-noetic-mavros* -y  #都装了,不差这点空间
cd /opt/ros/noetic/lib/mavros
sudo chmod +x install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh 

等待一段时间即可,需要注意的是QGC和mavros不能同时使用

测试命令

roslaunch mavros apm.launch fcu_url:=udp://:14855@ #14855换成仿真输出端口

6、ROS-Gazebo通信
在此使用来自Intelligent Quads的工程

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/Intelligent-Quads/iq_sim.git
catkin build
cd ~/catkin_ws
source devel/setup.bash

随后将bashrc中之前输入的地址注释掉,输入

GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:$HOME/catkin_ws/src/iq_sim/models

运行

#终端1
roslaunch iq_sim runway.launch #此处默认调用drone_with_camera模型,可以浏览更改为其他所需模型
#终端2
cd ~/ardupilot/ArduCopter/ && sim_vehicle.py -v ArduCopter -f gazebo-iris --console

运行结果如图,可以看到开启rqt之后可以正常读取gazebo中的图像数据


基于以上内容,您可以完成针对Ardupilot固件在MAVROS下的一系列仿真与开发工作。
总的来说Ardupilot在实际开发中具有以下特点:支持传感器种类多,不需要重复造论子;但相应的Ardupilot开发教程并不如px4全面。

基于mavros仿真,您可以尝试学习运行以下实例作为入门:
https://masoudir.github.io/mavros_tutorial/

很棒的分享 :+1: :+1: