APM飛控學習之路:3 APM系統介紹與開發環境搭建

        “工欲善其事,必先利其器”。在進行無人機飛控開發時,選擇一個合適的軟硬件平臺以及IDE是十分重要的。目前,APM飛控成熟度高,開發工具齊全,社區建設完善,開發者文檔豐富,適合開源選手入門和二次開發。因此,本系列博客以APM飛控作爲切入點,在Windows環境下介紹其代碼結構和開發應用。


APM系統介紹


        APM全稱ArduPilotMega,Ardu源自Arduino,Pilot意指飛行,Mega代表主芯片爲ATMEGA2560(Atmel公司的8位AVR單片機)。是的,沒有看錯,一個簡單8位單片機竟完成了如此複雜的飛控任務! 51單片機表示哭暈在廁所,同爲8位出身,命運截然不同。筆者大概是2011年接觸的單片機,當時也同大多數初學者一樣,從經典的51單片機入門,一個個模塊、寄存器的學習,曲線雖說不上陡峭,但至少不那麼友好。反觀Arduino,近3年在國內迅速崛起,除了Geek文化和開源文化的普及,一個很關鍵的原因在於Arduino讓不懂硬件電路的普通人(甚至小學生)也能輕鬆上手硬件了。沒有了煩人的寄存器,沒有了紛繁的頭文件,一個setup()和一個loop(),再加一個自帶教程的簡潔IDE,Arduino名副其實——源自意大利的男姓用名,意爲“強壯的朋友”。世界如此美好,我想和Arduino做朋友。

        APM內置六軸MEMS傳感器MPU6000,氣壓計MS-5611,三軸磁力計HMC5883,一般還會配置GPS模塊,以便更精確的慣性導航。其中,MPU6000整合了三軸陀螺儀和三軸加速度計,積分可得速度和位姿。MS-5611通過測量氣壓得到高度,輔助GPS定位。HMC5883通過測量地磁場得到方位,輔助無人機定向。飛控採集並融合多種傳感器的數據,計算並校正無人機的位姿。給APM一張正面裸板特寫!


APM與PIXHAWK的關係        

        說到APM,就不得不提它的進化版:PX4和PIXHAWK,來自蘇黎世聯邦理工大學。“PX4是一個軟硬件開源項目(遵守BSD協議),目的在於爲學術、愛好和工業團體提供一款低成本、高性能的高端自駕儀。PX4FMU自駕儀模塊運行高效的實時操作系統(RTOS),Nuttx提供可移植操作系統接口(POSIX)類型的環境。由3DR聯合APM小組與PX4小組於2014年推出的PIXHAWK飛控是PX4飛控的升級版本,擁有PX4和APM(ArduPilot)兩套固件和相應的地面站軟件,也是目前全世界飛控產品中硬件規格最高的產品。”

        好了說人話,目前主流就2種:APMPIXHAWK。有時指硬件,有時指軟件(固件),爲了明確,在此做個區分。硬件分2種:APM和PIXHAWK。APM的版本有2.5,2.6和2.8,PIXHAWK的版本有v1和v2。軟件也分2種:APM和PX4。軟件版本就多了去了,詳見github。APM硬件由於存儲空間有限,最高支持到3.2.1的APM軟件。PIXHAWK硬件是STM32F4,存儲空間大,對APM軟件(3.2.1之後的版本也支持)和PX4都支持。

        APM和PIXHAWK都開源,不過二者遵守的開源協議不同。APM多用於DIY和小型產品,某寶上大量的無人機就採用APM,成本低。公司商用一般採用PIXHAWK。目前很多PIXHAWK裏跑的還是APM固件,個人認爲有幾大原因:1. APM固件出來的更早,使用人羣習慣的延續;2. APM固件成熟度更高、資料更全。3. APM固件走開源路線更徹底,遵守GPL V3協議,PX4更傾向商業和實驗用途,遵守BSD協議。目前APM小組已和PX4小組分道揚鑣,詳見新聞:ArduPilot脫離Dronecode真相

APM固件下載


        剛提到APM硬件的最高版本爲2.8,現在說說APM固件(源碼)的版本。既然是開源項目,那麼在github上肯定有倉庫。曾經的APM源碼存於code.google.com,後來github席捲全球,成爲廣泛接受的代碼倉庫,於是谷歌把自己的倉庫關了(反正國內也上不去:-()。github上的源頭在此:https://github.com/ArduPilot/ardupilot。其中的ArduCopter支持多旋翼、直升機等,四旋翼源碼即在其中,但是別急着下載,先點擊release看看源碼版本。可以看到帶Copter的最新版本是“Copter-3.4.0”,帶ArduCopter的最新版本是“ArduCopter-3.2.1-apm-px4”,很多朋友直接參照網上的《通過Arduino給APM編譯下載最新固件》用git克隆代碼到本地,發現無法使用,問題就在於git獲取的是最新版,而APM支持的最高版本是“ArduCopter-3.2.1-apm-px4”,從命名也可以發現,該版本固件同時支持APM和PX4。


        獲取ArduCopter-3.2.1版本的源碼有2種方式:I. 在github頁面點擊release,往下翻幾頁,找到“ArduCopter-3.2.1-apm-px4”下載即可。II. 喜歡git的朋友在克隆最新代碼後,也可以回退到3.2.1的版本,與第一種方法獲得的源碼無異。

git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot/
git branch -a
git checkout -b arducopter-3.2.1 origin/ArduCopter-3.2.1

        使用方法解壓之後就可以看到源碼啦,結構如下。其中,APMrover2支持地面車輛,ArduPlane支持固定翼,ArduCopter支持多旋翼和直升機。對於四旋翼的開發,就對應ArduCopter文件夾。值得一提的是,打開ArduCopter文件夾後,可以看到一大波.pde文件,.pde爲Arduino文件的舊版後綴,新版的爲.ino(Arduino的後3個字母),可以簡單類比成.cpp文件。熟悉C++的朋友可能會想去找main文件,這回改頭換面了,主文件叫ArduCopter.pde。


APM開發環境


        巧婦難爲無米之炊”,現在米有了,用什麼工具做飯呢。先把火備好,即編譯的工具鏈和驅動:MHV_AVR_Tools_20121007.exe(AVR單片機編譯和下載程序用)和MissionPlanner-latest.msi(飛控地面站,含APM的USB接口驅動)。接下來就是用什麼竈臺做飯了,以Windows平臺爲例,竈臺根據方便程度有2種:I. 土竈:ArduPilot-Arduino-1.0.3-gcc-4.7.2-windows(爲ArdupPilot定製的Arduino IDE)。II. 電磁爐:Visual Studio配合Visual Micro插件(Arduino for Visual Studio插件)。二者本質沒有區別,可以看到都是調用gcc工具鏈,Visual Studio只是通過Visual Micro在上層封裝了操作接口,便於程序員查看和編寫代碼。強烈建議使用Visual Studio!!!


環境I(輕量). Arduino IDE


        先介紹Arduino派的IDE:ArduPilot-Arduino-1.0.3-gcc-4.7.2-windows,此IDE不同於普通的Arduino IDE,而是爲ArdupPilot定製的。解壓之後,打開“arduino.exe”,一張白板撲面而來。唯一和飛控有關的就在菜單欄上,相比通用ArduinoIDE多了“ArduPilot”一項。工具欄的“√”是編譯,“→”是下載。


        點擊“文件->參數設置”,可設置程序庫的位置,即APM源碼位置,注意不要勾選“啓動時檢查更新”,因爲本IDE專爲ArduPilot定製。其他選項可根據個人喜好設置。

        設置完成後退出再重開,以保證程序庫位置生效。點擊“文件->程序庫->ArduCopter”,源代碼一覽無餘。之後配置APM固件,主芯片:“工具->板卡->Arduino Mega 2560 or Mega ADK”,串口:“工具->串口->相應USB串口”(確保驅動已安裝),編程器:“工具->編程器->AVRISP mkll”(默認),APM硬件型號:“ArduPilot->HALBoard->ArduPilot Mega 2.x”。


        至此,Arduino IDE的完畢,可以點擊編譯了。等待3分鐘左右,編譯完畢,生成一個hex文件用於下載到APM板。


        切記:不要下載!不要下載!不要下載!下載會變磚!


環境II(推薦). Visual Studio&Visual Micro


        Arduino IDE編譯APM的代碼還可以,但要是用來瀏覽和編寫代碼,那就是千絲萬縷扭不清了,所以ArduinoIDE的設置裏也機智地留下一條後路:“□使用外部編輯器”。
        Visual Studio(以下簡稱VS)作爲宇宙最強IDE,怎麼能不支持下Arduino,感謝微軟救民於水火。以VS2012爲例,點擊“工具->擴展和更新->聯機”,搜索“Visual Micro”,下載安裝即可。順便推薦下Visual Assist,VS下最好的代碼補全工具,以前寫1行代碼的功夫,現在可以寫3行~

        安裝好之後,VS的菜單欄多了一些振奮人心的東西。“VMICRO”中可設置Arduino的選項,點擊“VMICOR->Visual Micro Explorer”,如下圖所示。對比Arduino IDE可發現,編譯、下載、COM口應有盡有,還可適配不同的Arduino 版本。

        點擊“Configure”進行配置,選擇Arduino版本:1.0,配置Arduino目錄,筆者的是:D:\Fly\ArduPilot-Arduino-1.0.3-windows,即ArduPilot-Arduino-1.0.3-gcc-4.7.2-windows解壓後的文件夾。注意此插件的名字是“Arduino IDE for Visual Studio”,並不是專爲Ardupilot/APM定製,因此還需適配apm硬件信息(點擊藍字鏈接下載,解壓後爲一名爲apm的文件夾,內僅含boards.txt)。將該apm文件夾放入D:\Fly\ArduPilot-Arduino-1.0.3-windows\hardware中。配置完成之後,可在“Installed”選項卡中查看支持的硬件類型,如所需的“Arduino Mega 2560 HAL (Apm 2)”,插上APM後在COM口選擇對應的串口號。此外,在“Examles”選項卡中可查看Arduino和ArduCopter的例程。

        重啓VS,點擊“文件->打開->Arduino Project”,選擇ArduCopter文件夾中的ArduCopter.pde打開,即可在“解決方案資源管理器”中看到APM的源碼結構。解釋一下,ArduCopter.pde相當於平時常見的Main.cpp,在ArduCopter.pde的最後一行是真正的main函數。
AP_HAL_MAIN();
        除此之外,有一點需要注意,在“VMICRO”中,“Debugger”取消勾選“Automatic Debug(Release/Debug)”,否則會編譯失敗。因爲APM2.8不支持在線Debug,同時對於“多線程”程序,Debug本身意義不大,一般採用串口print進行調試以便觀察程序流程。對於普通Arduino板(如nano)可以勾選,下載後會自動進入調試狀態。

        至此,Visual Studio&Visual Micro的配置完畢,又可以愉快地編譯了。同樣等待大概3分鐘左右,可以看到編譯完成,生成一個hex文件用於下載到APM板。對於編譯,第1次會較慢,修改代碼再次編譯就很快了。

        切記:不要下載!不要下載!不要下載!下載會變磚!
        在此給出筆者用VS2012編譯的工程:APM3.2.1固件-VS2012工程,打開ArduCopter文件夾中的ArduCopter.sln即可使用。如果你好奇心太重點了下載,也沒關係,筆者會在下一篇博客讓板磚起死回生:)

APM資料說明


        有關APM的資料,首推ArduPilot官網:http://ardupilot.org/ardupilot/。如果是開發四旋翼,左側的“Copter”和“Developers”是你經常要去逛的。裏面詳細介紹了APM的方方面面,值得反覆咀嚼。網上的APM資料,很多就是翻譯自ArduPilot官網,但是良莠不齊。不要懼怕英文而選擇逃避,蔡康永有一段很有名的話,“15歲覺得游泳難,放棄游泳,到18歲遇到一個你喜歡的人約你去游泳,你只好說"我不會耶”。18歲覺得英文難,放棄英文,28歲出現一個很棒但要會英文的工作,你只好說“我不會耶”。人生前期越嫌麻煩,越懶得學,後來就越可能錯過讓你動心的人和事,錯過新風景。”萬事開頭難,但也不要放大開頭的困難,跨過去就好了。

        國內的資料,主要推薦“模友之吧”裏“泡泡老師”的視頻教程,教你一步步上手APM2.8:[泡泡老師教程] 新手課堂:APM2.8的使用方法

        個人收集的2個資料:新編APM-2.8.0中文入門手冊APM2.8接口介紹

        PS:無人機系列的第3篇至此結束,主要介紹了APM的固件和開發環境搭建,至於爲何“不要下載!”,且看下回分解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章