PX4的GAZEBO仿真模型擴展
在我們接觸飛控的過程中,可能會有許多有意思的想法,想去擴展一些其它設(shè)備,但是重新拼湊一架飛機和擴展可能會比較貴,而且在調(diào)試和驗證的過程中極有可能炸機。
PX4的設(shè)計者為我們提供了許多仿真方法來做我們自己喜歡的驗證,其中就包括非?;钴S的gazebo仿真平臺。其實縱觀PX4的代碼,我們會發(fā)現(xiàn)它的特別,PX4并不是傳統(tǒng)的STM32嵌入式程序,而是在NUTTX系統(tǒng)的基礎(chǔ)上進行應(yīng)用級程序的開發(fā)。NUTTX系統(tǒng)支持Posix編程標(biāo)準(zhǔn)接口,這種接口的兼容,使得PX4程序可以被編譯成在NUTTX操作系統(tǒng)下運行的程序,并打包成固件燒寫到Pixhawk當(dāng)中運行;也可以被編譯成在Linux操作系統(tǒng)下運行的程序,并在Linux系統(tǒng)下運行,進而提供進行仿真的條件。
針對ROS的仿真,我接下來的說法都是ROS1,參考官網(wǎng)的介紹有兩處,網(wǎng)址如下:https://docs.px4.io/master/en/simulation/ros_interface.html、
https://docs.px4.io/master/en/simulation/gazebo.html。
本文我們一起關(guān)注一下,px4的gazebo仿真啟動過程,以及在gazebo里進行無人機仿真時如何去嵌入其它的sdf模型,擴展仿真無人機的功能。
我們先看看啟動仿真的幾個launch文件
我所使用的PX4版本是1.11.3,環(huán)境搭建之類我就不說了,這里我們主要看一下,啟動仿真的過程中我們具體干了一些什么。
在源碼目錄下文件PX4-Autopilot/launch/posix_sitl.launch,這個文件一般在我們運行make px4_sitl_default gazebo后自動運行,我們看一下它的內(nèi)容。
我所使用的PX4版本是1.11.3,環(huán)境搭建之類我就不說了,這里我們主要看一下,啟動仿真的過程中我們具體干了一些什么。
在源碼目錄下文件PX4-Autopilot/launch/posix_sitl.launch,這個文件一般在我們運行make px4_sitl_default gazebo后自動運行,我們看一下它的內(nèi)容。

與我們平時啟動機器人仿真的內(nèi)容差不多,運行px4仿真程序、打開gazebo并加載world環(huán)境、加載仿真的model模型。
可以看到核心就是運行了px4這個可執(zhí)行文件,也就是我前面提到的被編譯成在Linux操作系統(tǒng)下運行的程序,而它的底層驅(qū)動明顯是針對對應(yīng)的gazebo插件寫的,具體可以去研究一下CMAKE里加入了哪些編譯。
這個文件里面主要的幾個點:
1.
<node name="sitl" pkg="px4" type="px4" output="screen" …… >
第一個參數(shù)是node名字,隨意;第二個是包名,對應(yīng)PX4-Autopilot/ ;第三個是可執(zhí)行文件名,對應(yīng)PX4-Autopilot/build/px4_sitl_default/bin/px4 。
2.
<env name="PX4_SIM_MODEL" value="$(arg vehicle)" />
<env name="PX4_ESTIMATOR" value="$(arg est)" />
<env/>標(biāo)簽 是環(huán)境變量設(shè)置,這兩個環(huán)境變量是要傳遞到/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/rcS,也就是飛控啟動腳本中的。
3.
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>
<env name="PX4_SIM_MODEL" value="$(arg vehicle)" />
這兩個應(yīng)該被分開設(shè)置,前者與加載的模型有關(guān),后者是對環(huán)境變量是設(shè)置。
PX4_SIM_MODEL 可以是 iris、rover、boat等等,具體可以看https://docs.px4.io/master/en/simulation/gazebo_vehicles.html
此時我們可以通過QGC連接到仿真,也可以通過 rostopic list可以看到話題:

這些都是gazebo的仿真話題,我們并沒有看到關(guān)于飛控狀態(tài)和控制的話題或者服務(wù),還需要啟動一個文件,roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557" ,這個時候可操作的東西就豐富起來了。
具體信息參照網(wǎng)址http://wiki.ros.org/mavros
這個時候我們可以訂閱到飛控的許多信息話題和充足的控制接口。
對與這兩個啟動文件我自己是比較喜歡各自開一個終端運行的,方便看打印信息。
整理了一下,我自己整理的啟動文件如下:

關(guān)于PX4 對gazebo仿真模型的擴展支持
通過mavros接口我們可以實現(xiàn)對飛機重要信息的讀取和控制。但是如果我需要一個攝像頭、或者其它的額外的傳感器呢?
首先想到的當(dāng)然是PX4所提供的“裝備庫”了。在源碼目錄PX4-Autopilot/Tools/sitl_gazebo/models/下有:

這些model模型里面,iris、solo、rover、r1_rover、typhoon_h480、uuv_hippocampus等等類似這樣子的模型值得我們注意,前面說到運行了px4這個可執(zhí)行文件,在我認(rèn)為,這個可執(zhí)行文件就是“面向”這幾個模型編程的。當(dāng)然,這幾個模型不建議去動它,除非我們有信心去修改好PX4針對此模型的gazebo插件的代碼。
我們要做的是在這幾個模型上做擴展、改動,我這里以 iris為例子。在launch文件里將sdf模型的參數(shù)改為
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris/iris.sdf"/>

如圖,飛機就來了,可以通過mavros去控制飛機、讀取飛機信息這個就不再談了。
現(xiàn)在我需要一個攝像頭,比如雙目攝像頭,如何去得到一個上面載著雙面攝像頭的飛機呢?這個其實PX4已經(jīng)有了,比較有借鑒意義,我們把launch文件里將sdf模型的參數(shù)改為
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris_stereo_camera/iris_stereo_camera.sdf"/>
效果:


可以看到飛機上多了一個小模型,也多了一些雙目攝像頭的話題。

通過rviz也可以看到左右視圖。
我認(rèn)為這是一個很好的例子,我們來看一下源碼目錄下文件
/PX4-Autopilot/Tools/sitl_gazebo/models/iris_stereo_camera/iris_stereo_camera.sdf

利用<include>標(biāo)簽載入模型、<joint>標(biāo)簽連接模型,當(dāng)然每個模型都有自己的物理參數(shù)需要設(shè)置好,具體需要去看<include>標(biāo)簽后的模型文件。
書寫自己的擴展應(yīng)用
PX4提供了很多擴展的模型,包括各種攝像頭、激光雷達(dá),但是不一定滿足所有需求,有時候我們需要自己去折騰。
gazebo提供的一些模型文件在:http://models.gazebosim.org/,也可以在github上下載:https://github.com/osrf/gazebo_models
通過gazebo去編輯一個sdf模型的例子看網(wǎng)址:http://gazebosim.org/tutorials?tut=model_editor&cat=model_editor_top
通過標(biāo)簽文件去編寫一個sdf模型的例子看網(wǎng)址:http://gazebosim.org/tutorials?tut=build_robot&cat=build_robot
關(guān)于sdf文件一些重要標(biāo)簽說明與使用看網(wǎng)址:http://sdformat.org/spec
gazebo提供的一些插件:http://gazebosim.org/tutorials?tut=ros_gzplugins
如何書寫自己的插件:http://gazebosim.org/tutorials?tut=ros_plugins&cat=connect_ros
肖坤老師的XTDrone項目 :https://github.com/robin-shaun/XTDrone
阿木實驗室的普羅米修斯項目:https://github.com/amov-lab/Prometheus
在開源飛控系統(tǒng)的推動下,無人機開發(fā)的系統(tǒng)結(jié)構(gòu)和功能都在不斷完善,同時仿真條件也在不斷擴展,借助活躍的開發(fā)論壇社區(qū),在PX4與ROS的基礎(chǔ)上,我們的探索工具會更加豐富,探索的想法也會更加的大膽精彩。每一個無人機愛好者都在提供參考經(jīng)驗和新的研究問題,在前人的積累上,我們一起讓有更多應(yīng)用場景的無人機從仿真走到實物、從實驗室進入到人們生活。

本文由西湖大學(xué)智能無人系統(tǒng)實驗室訪問學(xué)生劉金健原創(chuàng)
申請文章授權(quán)請聯(lián)系后臺相關(guān)運營人員
????
▌微信公眾號:空中機器人前沿
▌知乎:空中機器人前沿(本文鏈接:https://zhuanlan.zhihu.com/p/451664003)
▌Youtube:Aerial robotics @ Westlake University
▌實驗室網(wǎng)站:https://shiyuzhao.westlake.edu.cn/? ?
