天,給大家介紹下PX4開源飛控項目中一個強大的功能-Gazebo仿真。
Gazebo仿真是PX4提供眾多仿真工具中的一個。它在PX4代碼中(Firmware/Tools/ sitl_gazebo)也是一個單獨出來的倉庫。
官方介紹請移步:https://dev.px4.io/master/en/simulation/index.html
仿真首先分為軟件在環仿真(SITL)和硬件在環仿真(HITL)。目前來看,軟件在環仿真更簡單實現及方便。我就讀的課題組就是專門做導彈的半實物仿真的,個人認為硬件在環仿真需要加上轉臺才能真正意義發揮出作用,不然只是在Pixhawk板子上跑仿真環境,毫無指導意義。
軟件在環仿真一共是有jMAVSim、Gazebo、AirSim這三種。jMAVSim是一個輕量級的仿真器,目前只支持四旋翼仿真。AirSim我不太清楚,沒有使用過,這里就不評價了。Gazebo是我們今天的主角,支持旋翼、固定翼、傾轉、小車等,是所有仿真器里支持平臺最多的,也能支持多個無人機的仿真,在各個仿真器比較的表格里,PX4官方是這么說Gazebo仿真的:This simulator is highly recommended.
一般而言,如果我是修改了PX4固件內的代碼,比如修改了姿態控制器,我會用jMAVSim調試,同時打開地面站,利用定點及自穩模式進行飛行測試,還能下載log看看記錄的量對不對。jMAVSim不吃電腦配置,運行比較流暢,適合快速驗證PX4內部代碼邏輯及檢查修改固件后的BUG。
如果我需要用到px4_command及mavros包來進行offboard模式的測試,我會使用Gazebo仿真。比如我在機載電腦中修改了一些控制邏輯,打開Gazebo仿真,同時運行mavros及相應節點,將仿真的無人機切換至offboard模式,在Gazebo中測試我修改的代碼是否正確,十分好用!
這只是我個人的使用習慣,正常來講,我后面說的那個功能用jMAVSim也能做,但你既然都跑ROS了,肯定用一個和ROS相關的仿真器更加好用一點。jMAVSim比不過Gazebo的一點是它無法進行固定翼、小車的仿真(但我也沒試過),以及無法進行視覺類的仿真,無法修改飛行環境等等。具體Gazebo還能做什么,可以自行百度,或參閱Gazebo官網,畢竟光學Gazebo就夠一個人學一段時間的了(這點就和ROS一樣,但放到我們場景中來說,還是你需要什么就學什么,不然你永遠都學不完)。
總而言之,Gazebo仿真功能強大,值得推薦!
Flight stack代表飛控即PX4,Simulator代表仿真器(如Gazebo)。所有仿真器與PX4的通訊都是通過MAVLink消息來進行的,SITL使用simulator模塊中的simulator_mavlink.cpp來處理這些消息,而HITL是使用mavlink模塊中的mavlink_receiver.cpp來處理這些消息。梳理一下這里的消息流向:
PX4到仿真器。PX4給仿真器只會發送一個HIL_ACTUATOR_CONTROLS的MAVLink消息,熟悉PX4的應該知道這個對應的uORB消息是actuator_outputs.msg,也就是姿態控制器最后的輸出控制量。這里也就意味著,混控是在仿真器中進行的,仿真器中也包含電機的模型。
仿真器到PX4。仿真器的作用就是模擬真實飛行,即模擬計算出真實飛行時的傳感器狀態,包括GPS,IMU等,將這些信息發送給飛控后,再由飛控中的估計模塊計算出飛機狀態量。
外部到PX4。這里的外部就比如地面站QGC(可以外接遙控器),Mavros,Dronecode SDK等,這里也就可以模擬我們平時控制飛機的方式。
端口號:
PX4是使用UDP來進行這些消息通訊的。單個飛機仿真時,默認的UDP設置如下:
如果不涉及多個飛機的仿真,端口號默認都是設置好的,不需要修改及配置。如果是多個飛機的仿真,則需要配置每個飛機的端口號,不能重復,后續會詳細介紹配置。
上述介紹適用所有的仿真器。
環境搭建我這里基本就是照搬+翻譯PX4的開發手冊了,如有疑惑,請留言或移步手冊。還是和以前的看法一致,千萬不要百度,里面的解答大部分都是帶著你走歪路。
首先,你要成功搭建PX4固件開發環境,你要能成功編譯PX4代碼。(這一步都沒成功,那就先搞好這一步)如果你在搭建PX4環境時,沒有順帶裝一下Gazebo,可能需要單獨安裝(打開終端輸入gazebo可以檢測你的電腦是否安裝gazebo)。
下面的內容我將分成非ROS下的Gazebo仿真和ROS下的Gazebo仿真。個人是推薦后者的,如果你不使用ROS,也沒必要上Gazebo仿真了。
可以發現,在PX4固件中有一個文件夾Firmware/Tools這里面就是包含了jMAVSim、Gazebo仿真等一系列代碼。而Gazebo仿真對應的文件夾是sitl_gazebo,這其實是一個子庫,即sitl_gazebo這個git倉庫。
大致看看這個文件夾里都有些什么內容。
個人認為涉及到Gazebo仿真二次開發就是如上三個文件夾(如果你只是使用Gazebo仿真工具,這里你什么都不需要修改,因為已經完全搭建好了),分別對應修改模型、修改模型參數、修改世界。
按照PX4手冊中的Gazebo仿真教程,進行四旋翼仿真應該是
cd ~/src/Firmware
make px4_sitl gazebo
我的固件用這個指令失敗了,但其他小伙伴執行這一步卻正常運行了。原因暫不清楚,這里待補充。
除了上述的教程,在PX4開發手冊中,還有一個屬于Gazebo仿真的教程:ROS with Gazebo Simulation。這就是指導大家如何在ROS環境下,聯合Mavros功能包進行仿真調試。我的固件按照這個教程一步一步走下來,沒有任何問題。(PX4項目太大,各個部件分散,也不是商業項目,坑還是多~)
對于ROS、Mavros、Offboard模式還不清楚的小伙伴,先去補補相關概念,這里就不多做介紹了。
注意:第一步和第二步只需要做一次,設置成功后,每次直接執行第三步。但如果修改了PX4固件,那你需要重新執行第一步。
第一步:編譯。
cd ~/src/Firmware
make px4_sitl_default gazebo
第二步:source。了解ros功能包應該知道這一步是為了讓系統知道有這個功能包存在,相當于設置環境變量,這樣終端執行的時候就不會報找不到功能包的錯誤。
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_gazebo
推薦大家手動source,打開終端輸入gedit .bashrc。在彈出的txt文件最后一行,加入上述內容。值得注意的是,$(pwd)是要替換成對應的目錄路徑(PX4固件所在目錄),我的路徑是/home/fly_vision/px4_amov/Firmware(fly_vision是我的電腦名字,px4_amov是我存放固件的文件夾名字)。于是我的修改內容如下:
source /home/fly_vision/px4_amov/Firmware/Tools/setup_gazebo.bash /home/fly_vision/px4_amov/Firmware /home/fly_vision/px4_amov/Firmware/build/posix_sitl_default export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/fly_vision/px4_amov/Firmwareexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/fly_vision/px4_amov/Firmware/Tools/sitl_gazebo
第三步:運行Gazebo仿真
roslaunch px4 posix_sitl.launch因為會運行Gazebo,第一次啟動會比較慢,耐心等待(如果報錯,請關閉終端再次嘗試,我的i5筆記本經常啟動失敗,這是你的筆記本提示你該花錢了的正常現象)。啟動成功后,會看到Gazebo中有一個iris無人機。這時你可以打開QGC地面站,地面站會默認連接這臺飛機,你可以嘗試利用地面站發送起飛指令測試。
這個啟動腳本位于Firmware/launch文件夾中,同時在此文件夾中,你還能看到其他類似的啟動腳本。這里建議大家單獨啟動Mavros,而不是用它提供的另一個啟動腳本同時啟動(因為一個終端顯示太多東西的話,報錯你都看不到)。
第四步:運行Mavros
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"此處我建議Mavros功能包使用二進制安裝,比較省事。可以看到這里啟動mavros時配置了一些端口參數(端口匹配才能成功連接),后續我會在PX4仿真模塊中找到與之對應的參數配置。
嘗試讀取飛空的IMU數據,打開終端,輸入
rostopic echo /mavros/imu/data當然,除去imu消息,還有很多其他消息,可以使用下面指令查看都有哪些消息。
rostopic list
第五步:運行px4_command
px4_command功能包是阿木社區最新推出的科研無人機P200中的核心代碼,暫時未開源。有需求的小伙伴可以聯系我或者阿木社區負責人購買。
目前,我利用Gazebo仿真復現了px4_command功能包中的除去視覺之外的絕大部分功能,比如慣性系移動、機體系移動、懸停、降落等控制邏輯。除此之外,重新設計了位置控制器,設計了基于UDE的外環控制器,在仿真環境中進行了測試。總體用下來,感覺Gazebo仿真是進行二次開發的利器。比如,我修改了一些px4_command中控制無人機的上層代碼,以前我只能通過真實飛行進行測試,那樣有炸雞危險。現在,我只需要使用Gazebo仿真,模擬真實飛行中的命令,在仿真環境中查看飛機的表現。值得注意的是,目前還只能檢查代碼的邏輯錯誤,及發送給飛控指令是否正確。自然不能100%仿真復現真實飛行中的軌跡,這是由于飛機的模型,傳感器的模型,執行機構的模型都不是你真實飛行時的模型。
在單個飛機仿真沒問題之后,才能執行這一步。
roslaunch px4 multi_uav_mavros_sitl.launch
這是官方提供的多機仿真啟動腳本,只提供了兩架飛機,現在給出如何增加一臺飛機的方法。
創建一個新的rcS啟動文件:
這里比較混亂,建議大家親手做一遍,加深理解。但是,我也會分享我修改后的兩個文件給大家參考。
前言:
對于開發者而言問的最多的問題就是,編譯環境問題,各自工具鏈安裝不上。操作系統對于庫的版本依賴比較嚴格,還有一些網絡問題,為了節省大家的時間,幫助大家提高效率,Z410工程師專門制作了穩定可用的鏡像,免費提供給大家使用。
獲取本期教程文檔及相關軟件鏡像安裝包:查看評論區
此開發環境集成了如下工具鏈:
sudo apt-get update操作系統:Ubuntu18.04
軟件:ArduPilot集成開發環境、ArduPilot SITL(2D軟件在環仿真)、Gazebo9(3D軟件在環仿真)、OpenCV3、QGroundControl、Dronekit等。
對于一般的ArduPilot初學者研究,這個開發環境鏡像基本都可以滿足,尤其是那些剛剛入手ArduPilot開發的同學。
仿真鏡像特點:
本次仿真鏡像是基于VMware WorkStation16制作的,用戶只需根據阿木實驗室提供的下載鏈接下載對應文件,并參照安裝手冊安裝即可。本次鏡像內置ArduPilot Copter-4.1.0源碼及其完整子模塊,并集成了編譯源碼需要的交叉編譯鏈,用戶可直接對源碼進行編譯并上傳到飛控;此外鏡像還集成了ArduPilot SITL(2D軟件在環仿真)、Gazebo9(3D軟件在環仿真)、OpenCV3、QGroundControl、Dronekit等,參考Z410開發配套課程《ArduPilot飛控開發入門》和《樹莓派機器視覺入門》,可直接在本次鏡像中完成對應例程的開發。
演示效果:
<script src="https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
建議電腦配置:
考慮到有的同學電腦配置不是很高,我們提供的鏡像為了能3D仿真所以會占用較多的系統資源,假如電腦配置不高的學生用我們鏡像會比較卡,為此我們特意提供了另外一個教程,您可以參照教程自己制作一個沒有3D仿真的鏡像,話不多說,接下來就進入正題吧。
第一步:虛擬機VMware WorkStation 16軟件安裝與破解
“VMware WorkStation 16”安裝包百度網盤鏈接:
https://pan.baidu.com/s/1mtPhlO4RyvawLJtDZcJAag
提取碼:m63p
(1)下載“VMware Workstation Pro 16”到計算機任意硬盤目錄下,雙擊打開文件夾“VMware Workstation Pro 16”,可看到文件“VMware-workstation-full-16.0.0-16894299.exe”與“VMware Workstation Pro 16許可證密鑰.txt”。雙擊“VMware-workstation-full-16.0.0-16894299.exe”。出現如下界面,點擊“下一步”
(2)勾選“我接受許可協議中的條款(A)”,點擊“下一步”
(3)自定義軟件安裝目錄,點擊“確定”
(4)保留默認,點擊“下一步”
(5)取消“啟動時檢查產品更新(C)”和“加入VMware客戶體驗提升計劃(J)”,點擊“下一步”
(6)勾選“桌面(D)”和“開始菜單程序文件夾(S)”,點擊“下一步”
(7)點擊“安裝”
(8)安裝過程如下
(9)安裝完成之后出現如下界面,點擊“許可證(L)”
(10)打開“VMware Workstation Pro 16許可證秘鑰.txt”,復制任意一行秘鑰到許可證秘鑰框里,點擊“確定”,即可完成破解。
第二步:虛擬機鏡像使用方法
虛擬機鏡像百度網盤鏈接:
https://pan.baidu.com/s/1_FrR0lHPauOhDsomQeYCGg
提取碼:wr1k
1、根據阿木實驗室提供的下載鏈接下載虛擬機鏡像“AMOVLAB-Z410(UBUNTU18).zip”,并把“AMOVLAB-Z410(UBUNTU18).zip”解壓到大于90G的硬盤里。
2、打開剛剛安裝好的VMware WorkStation16虛擬機按以下步驟操作
(注意:密碼為:amovlab(小寫)
仿真鏡像安裝完成。
如果您的電腦配置不是很高,您可以參照以下教程自己制作一個沒有3D仿真的鏡像:
第一步:同上安裝和破解VMware WorkStation 16;
第二步:基于VMware WorkStation 16軟件下的Ubuntu18.05操作系統部署。
“Ubuntu18.05”安裝包百度網盤鏈接:
https://pan.baidu.com/s/1COfpI17CKMrFlPmTSwDUWQ
提取碼:yu88
(1)雙擊電腦桌面“VMware Workstation Pro 16”,點擊“創建新的虛擬機”
(2)選中“自定義(高級)(C)”,點擊“下一步”
(3)點擊“下一步”
(4)選中“稍后安裝操作系統(S)”,點擊“下一步”
(5)選中“Lniux(L)”和“Ubuntu 64位”,點擊“下一步”
(6) 創建“虛擬機名稱(V)”以及虛擬機的位置。點擊“下一步”
(7)配置處理器(注意:處理器核心數量依據自己電腦配置進行修改,過多的處理器核心數量可能會造成開啟虛擬機后物理機卡頓),點擊“下一步”
(8)給虛擬機分配內存(注意:內存大小依據物理機大小來定,虛擬機內存大小應小于物理機內存大小的一半),點擊“下一步”
(9)選中“使用網絡地址轉換(NAT)(E)”,點擊“下一步”
(10)選中“LSI Logic(L)”,點擊“下一步”
(11)選中“SCSI(S)”,點擊“下一步”
(12)選中“創建新虛擬磁盤(V)”,點擊“下一步”
(13)指定最大磁盤大小為40G(注意:硬盤大小可根據自己的實際需求進行修改),選中“將虛擬磁盤存儲為單個文件(O)”,點擊“下一步”
(14)指定磁盤目錄(建議與虛擬機系統信息放同一目錄,方便查找與拷貝),點擊“下一步”
(15)彈出“虛擬機”信息,確認無誤后,點擊“完成”
(16)鼠標左鍵單擊“編輯虛擬機設置”
(17)選中下載好的“Ubuntu18.05”操作系統鏡像,點擊“確定”
(18)鼠標左鍵單擊“開啟此虛擬機”
(19)鼠標左鍵單擊“Install Ubuntu”
(20)默認值,點擊“Continue”
(21)選中“Minimal installation”和“Download updates while installing Ubuntu”,點擊“Continue”
(22)選中“Erase disk and install Ubuntu”,點擊“Install Now”
(23)點擊“Continue”
(24)選擇時區為“Shanghai”,點擊“Continue”
(25)設置username、password,選中“Log in automatically”,點擊“Continue”
(26)進入安裝界面,安裝速度與網速有關
(27)安裝完成后會提示需要重啟,點擊“Restart Now”
(28)重啟時會報錯,未能正常進入系統(原因:medium還掛載操作系統鏡像,需要取消)。
(29)選中“使用物理驅動器(P)”即可取消操作系統鏡像文件掛載,點擊“確定”
(30)重新啟動虛擬機,彈出如下對話框,點擊“否(N)”,即可正常進入操作系統。
(31)安裝VMware Tool,點擊VMware Workstation菜單欄“虛擬機->安裝VMware Tools”,這時系統會提示,是否需要升級到“Ubuntu 20.04”,點擊“Don’t Upgrade”(注意:切記不可升級操作系統,會造成仿真系統安裝python2依賴報錯)
(32)雙擊桌面“VMware Tools”,把文件里面的“VMwareTools”壓縮包拖動到桌面。
(33)鍵盤組合鍵“CTRL+ALT+T”組合鍵打開Terminal,輸入指令“tar –zxvf VMwareTools-10.3.22-15902021.1.tar.gz”解壓縮。解壓縮完畢之后,輸入指令“ls”,此時當前目錄會出現一個“vmware-tools-distrib”的文件夾
(34)輸入指令“cd vmware-tools-distrib”,運行“sudo ./vmware-install.pl”,此時會提示輸入超級用戶密碼,輸入之前設置的密碼即可。之后按照提示默認安裝即可。
至此,Ubuntu18.05操作系統的安裝部署完畢。
Ubuntu Ardupilot開發環境及仿真環境搭建
注意:開發環境及仿真環境的搭建過程中需要在github等其他網站下載數據,因此搭建過程是否順利取決于網絡環境,筆者在搭建環境的過程中使用了科學上網工具,整個過程非常順利且耗時較短,對Linux操作系統不熟悉或者還沒掌握科學上網方法的用戶,可直接使用由阿木實驗室制作好的虛擬機鏡像包,里面已經安裝好所需的所有工具。
一、ArduPilot開發環境搭建
1、修改Ubuntu操作系統的軟件源。
sudo mv /etc/ apt/sources.list /etc/ apt/sources.list_backup(備份原生軟件源)
sudo gedit /etc/ apt/sources.list
復制以下內容覆蓋sources.list原有內容并保存:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
sudo apt-get update
3、下載源碼
4、切換到穩定版進行開發(注意:默認的master版本可能存在諸多BUG,需要切換到穩定的版本進行開發)
5、拉取子模塊
6、運行自動化腳本安裝飛控開發環境(注意:安裝過程異常大多數情況下都是由網絡環境引起)
7、驗證Ardupilot開發環境是否正常
二、Gazebo及插件安裝
1、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
2、Gazebo插件安裝
cd ~
git clone https://github.com/khancyr/ardupilot_gazebo
cd ardupilot_gazebo
mkdir build
cd build
cmake ..
make -j4
sudo make install
echo 'source /usr/share/gazebo/setup.sh' >> ~/.bashrc
echo 'export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models' >> ~/.bashrc
echo 'export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}' >> ~/.bashrc
source ~/.bashrc
3、開啟仿真
Terminal(1):
gazebo --verbose worlds/iris_arducopter_runway.world
Terminal(2):
cd ~/Workspace/ardupilot/ArduCopter
../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map
注意:
(1)啟動Gazebo時會出現以下報錯:
解決辦法,將如下文件代碼注釋:
(1)打開Gazebo時一直無法打開圖形界面。
解決辦法:斷開網絡,等Gazebo啟動之后再打開網絡即可。
4、Dronekit安裝。
5、地面站軟件QGroundConrol安裝
(1)“Ubuntu18.04 QGroundControl”百度網盤鏈接
鏈接:
https://pan.baidu.com/s/1OYnm8pz_TzXPVaMWdsymzA
提取碼:yfm9
阿木實驗室致力于為機器人研發提供開源軟硬件工具和課程服務,讓研發更高效!
- End -
技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公眾號,我們將持續發布機器人行業最有價值的信息和技術。