“工欲善其事,必先利其器”。在進行無人機飛控開發時,選擇一個合適的軟硬件平臺以及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種:APM和PIXHAWK。有時指硬件,有時指軟件(固件),爲了明確,在此做個區分。硬件分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開發環境
環境I(輕量). Arduino IDE
先介紹Arduino派的IDE:ArduPilot-Arduino-1.0.3-gcc-4.7.2-windows,此IDE不同於普通的Arduino IDE,而是爲ArdupPilot定製的。解壓之後,打開“arduino.exe”,一張白板撲面而來。唯一和飛控有關的就在菜單欄上,相比通用ArduinoIDE多了“ArduPilot”一項。工具欄的“√”是編譯,“→”是下載。
至此,Arduino IDE的完畢,可以點擊編譯了。等待3分鐘左右,編譯完畢,生成一個hex文件用於下載到APM板。
切記:不要下載!不要下載!不要下載!下載會變磚!
環境II(推薦). Visual Studio&Visual Micro
AP_HAL_MAIN();
APM資料說明
個人收集的2個資料:新編APM-2.8.0中文入門手冊和APM2.8接口介紹。
PS:無人機系列的第3篇至此結束,主要介紹了APM的固件和開發環境搭建,至於爲何“不要下載!”,且看下回分解。