ROS使用APM SITL/gazebo進行仿真練習

參考文章:https://blog.csdn.net/weixin_44479297/article/details/95218005
https://www.cnblogs.com/spa147/p/10088003.html
感謝這位大大給的思路,但是很多情況由於沒有解釋清楚,或者由於版本更迭,所以,這裏給自己mark一下,以免以後自己再次踩坑。

SITL (軟件在環仿真)可以用來檢測設計初期飛控是不是正確。

1.操作環境

ubuntu 16.04 LTS
地面站是MAVProxy

2.流程

安裝APM飛控

基本流程跟上述原文的步驟一樣:

下載開源項目

git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git submodule update --init --recursive

值得一提的是,在運行到最後一步驟時,出現一堆error,一開始以爲是python 2.7的問題,於是去改了python 3,但是後來仔細看看發現,是read timeout ,於是去網上找了關於pip鏡像的解決辦法,附上原文:https://blog.csdn.net/change_can/article/details/83781243。
方法如下:

  1. 先安裝pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
  1. 更換PIP源(特別重要)
#创建目录
mkdir -p ~/.pip
#修改配置文件
vim  ~/.pip/pip.conf
#写入以下内容并保存
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

檢查

這一部分在原文中沒有詳細展開,只是講了輸入指令啓動,但是如果不更該路徑的話,每次都要加入~/Tools/autoset/就很麻煩,於是改進了一下。

getdit ~/.profile

然後將下述的代碼加入其中

export PATH=$PATH:$HOME/src/ardupilot/ardupilot/Tools/autotest
export PATH=/usr/lib/ccache:$PATH

然後運行

source ~/.profile

接下來便是測試APM

sim_vehicle.py --map --console

安裝 octomap/mavlink/OMPL

sudo apt install liboctomap-dev
sudo apt install ros-kinetic-mavlink
sudo apt install ros-kinetic-ompl

安装FCL

git clone https://github.com/danfis/libccd
cd libccd
mkdir build && cd build
cmake -G "Unix Makefiles" -DBUILD_SHARED_LIBS=ON ..
make && sudo make install
 
git clone https://github.com/flexible-collision-library/fcl
cd fcl
mkdir build
cd build
cmake ..
sudo make install

安装OctomapPlanner

git clone https://github.com/ardupilot/OctomapPlanner
cd OctomapPlanner
mkdir build
cd build
cmake ..
make
cp -r ../models/* ~/.gazebo/models/

值得一提的是,在make的時候,如果使用的gazebo 7.0,他會提示不行,這個時候需要升級至gazebo 8.1.1
步驟如下

sudo apt-get install libignition-math3 libsdformat5 //會自動刪除gazebo 7.0
sudo apt-get install gazebo8 libgazebo8
sudo apt-get install ros-kinetic-gazebo8-*
gazebo -v //檢查版本
sudo apt-get install libgazebo7-dev

另外,在最後一步cp -r ../models/* ~/.gazebo/models/會出現不存在models這種情況,這時候需要自己去補全models這個包

cd ~/.gazebo/
mkdir -p models
cd ~/.gazebo/models/
wget http://file.ncnynl.com/ros/gazebo_models.txt
wget -i gazebo_models.txt
ls model.tar.g* | xargs -n1 tar xzvf

然後是安裝插件

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

完成後需要更改環境變量

gedit ~/.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}

最後記得

source ~/.bashrc

運行仿真

因爲本人的方向是關於無人機的,所以只關注無人幾的情況

首先打開一個終端

sim_vehicle.py -v ArduCopter -f gazebo-iris -m --mav10 --map --console -I0

然後等APM運行起來後,再打開另一個終端,其實同時都可以的哈哈哈

注意注意注意!!!!
這時候要先輸入source /usr/share/gazebo/setup.sh,用來setup接下來的gazebo
然後再輸入指令運行gazebo

gazebo --verbose iris_ardupilot.world

另外備注上指令控制飛機

mode guided #启动引导模式,这个模式下可以输入起飞指令
arm throttle #无人机自检,只有通过自检后才可以执行起飞指令
takeoff 40 #起飞到40米处

mode circle # 启动转圈模式,在无人机飞到空中后才能切换到此模式
param set circle_radius 2000 #设置转圈半径为2000厘米

wp load …\Tools\autotest\CMAC-circuit.txt #载入任务,此目录下还有其他任务文件,任务文件要和地图匹配(基于经纬度)
mode auto #模式切换到自动模式
wp set 2 #去掉第二个任务点(任务中包含了多个有序位置点)
wp loop #设置任务点循环,即执行完最后一个任务点后重新开始这个任务

mode #查看有哪些模式
param show fence* # 显示以fence开头的参数有哪些
param set fence_enable 1 # 设置fence_enable参数的值为1

mode land #设置到land模式,即无人机落地,落到当前位置的地面
mode rtl #设置到rtl模式,即无人机返回到起飞的位置

–完結撒花

你可能感兴趣的:(ROS使用APM SITL/gazebo進行仿真練習)