我為什么要讀APM的源碼,一是為了學(xué)習(xí),想知道飛控和大型項目是如何組織的。二是為了移植的需要,項目的需要。額,最近幾年少兒編程大火,然后這些廠子也首當其沖的發(fā)布了一些產(chǎn)品,但是都是空心杯的產(chǎn)品,然后帶來的問題就是動力不足,接著就是這個東西本身的擴展性不夠。很多任務(wù)需要IO或者圖像識別的幫助。
所以我就在想,APM裁剪版的飛控+空心杯電機+樹莓派zero(可以是別的)可以使用ROS,Mavlink等東西組裝一個無人機。
只是一種想法而已,目前沒有可以參考的東西,我也在做。 F4的飛控,百來塊錢
10塊錢的電調(diào) 小槳葉 移植成功以后,其實使用便宜的MCU也可以,只是想利用已經(jīng)比較完善的生態(tài)罷了,我覺得300多一個無刷無人機也可以,將高性能引入少兒教育,怎么看都是一件比較有趣的事情。
如果非要便宜的話,ESP8266+MPU6050+4個MOS管,一共也不要20塊錢 https://ardupilot.org/dev/docs/ap-peripheral-landing-page.html
AP_Periph 是 ArduPilot Peripheral 的縮寫,即。基于現(xiàn)有 ArduPilot 自動駕駛儀代碼的 ArduPilot 外圍設(shè)備。它采用了 ArduPilot 的外圍設(shè)備驅(qū)動程序庫,并使其適應(yīng)運行在獨立的外圍設(shè)備上,這些外圍設(shè)備通過 CAN、MSP 或其他外圍總線協(xié)議與主飛控通信。我有點沒看懂,好像是就單主控+單傳感器的設(shè)置方案。 代碼的位置再Tools里面: 位置在此 也可以使用瀏覽器打開,看一些英文的注釋 這個APM可以使用make編譯,也可以使用一個叫WAF的東西編譯:其實就是Python的一個包,沒有使用新的語言什么的。
先走馬觀花的看下來,細節(jié)遇到再看:
這里是所有的構(gòu)建環(huán)境的安裝 Ubuntu下開發(fā)是個正經(jīng)事情:
Tools/environment_install/install-prereqs-ubuntu.sh -y
安裝 生效
構(gòu)建后可以使用這個清楚編譯的垃圾文件
接下來看看編譯步驟
先把庫拉下來: git clone --recursive https://github.com/ArduPilot/ardupilot.git cd ardupilot
waf應(yīng)該在APM的根目錄下運行,而且是每次都應(yīng)該這樣
./waf configure --board CubeBlack ./waf copter
第一個命令一般就使用一次,選擇你要編譯的硬件
二是編譯一個直升飛機出來 ./waf configure --board skyviper-v2450 ./waf copter
如果更改的話就是這樣
./waf configure --board bebop --static ./waf copter
這個是編譯一共二進制的固件,使用一共參數(shù),靜態(tài)構(gòu)建 獲取支持的板子
./waf configure --board bebop --static # Bebop or Bebop2 ./waf configure --board edge # emlid edge ./waf configure --board fmuv3 # 3DR Pixhawk 2 boards ./waf configure --board navio2 # emlid navio2 ./waf configure --board Pixhawk1 # Pixhawk1 ./waf configure --board CubeBlack # Hex/ProfiCNC Cube Black (formerly known as Pixhawk 2.1) ./waf configure --board Pixracer # Pixracer ./waf configure --board skyviper-v2450 # SkyRocket's SkyViper GPS drone using ChibiOS ./waf configure --board sitl # software-in-the-loop simulator ./waf configure --board sitl --debug # software-in-the-loop simulator with debug symbols
出現(xiàn)了這么多的板子
./waf configure --board satl #軟件在環(huán)模擬器 ./waf configure --board satl --debug #帶調(diào)試符號的軟件在環(huán)模擬器
未來我們主要看這個東西,在機器上面仿真
./waf copter # All multirotor types ./waf heli # Helicopter types ./waf plane # Fixed wing airplanes including VTOL ./waf rover # Ground-based rovers and surface boats ./waf sub # ROV and other submarines ./waf antennatracker # Antenna trackers
可以構(gòu)建出來的項目類型。
清理構(gòu)建:
命令clean和distclean都可以用來清理 構(gòu)建,第一個會保留配置的信息,只是清理板子的對象,第二個比較徹底,要啥沒啥。一般來說別來執(zhí)行這東西,因為現(xiàn)在大多數(shù)的編譯系統(tǒng)都是增量編譯的,就是編譯前會檢查哪些內(nèi)容需要重新編譯,如果不需要就用以前的。學(xué)過c語言都知道源碼到成品,是需要經(jīng)過鏈接的,其實構(gòu)建系統(tǒng)就是在搞鏈接。 ./waf --targets bin/arducopter --upload
上傳參數(shù)可以將構(gòu)建好的二進制文件傳到板子上面(PIxhawk和Linux的板子) ./waf configure --board <board> --rsync-dest <destination>
語法是這樣的
對Linux板子來說,還需要配置IP ./waf configure --board navio2 --rsync-dest root@192.168.1.2:/ ./waf --target bin/arducopter --upload
連起來就是這樣。
./waf copter DESTDIR=/my/temporary/location ./waf install
還可以進行安裝,到某個臨時目錄 # Quad frame of ArduCopter ./waf --targets bin/arducopter
# unit test of our math functions ./waf --targets tests/test_math
只構(gòu)建一個二進制文件 可以輸出所有的幫助文檔
# Configure the Linux board ./waf configure --board=linux
用于配置板子的類型選項
# Build programs from bin group ./waf
# Waf also accepts '-j' option to parallelize the build. ./waf -j8
waf = waf build,就使用waf就行。
j是并行編譯,j8(jb)真快。一般來講,不用你寡b的設(shè)置這個東西,自動就是加j了,如果想更快,哥們兒牛逼。
cd /usr/lib/ccache sudo ln -s /usr/bin/ccache arm-none-eabi-g++ sudo ln -s /usr/bin/ccache arm-none-eabi-gcc
還可以使用ccahe,大幅度的提升編譯的速度,你要是真搞開發(fā),就不用用Windows,或者是遠程搞個Linux。 干說不練怎么行?我正好有WLS2,安裝一下:
git@github.com:yunswj/ardupilot.git
切到自己的分支,搞了下我的GT沒配置,算球了。 構(gòu)建完出現(xiàn)的文件類型 飛控板+Linux主機,這個Linux主機上面就是運行的我下面寫的這個庫,控制飛控板的運行. https://dronekit-python.readthedocs.io/en/latest/
DroneKit-Python 2.x 可幫助您為無人機創(chuàng)建強大的應(yīng)用程序。這些應(yīng)用程序在無人機的配套計算機上運行,并通過執(zhí)行計算密集型和需要低延遲鏈接(例如計算機視覺)的任務(wù)來增強自動駕駛儀。我記得是Python2 的庫,emmmm https://github.com/dronekit/dronekit-python
GitHub地址
一些簡單的描述
鏈接的時候,使用串口就行 或是這樣,PC->Pi ,Pi->RC 需要上面的電臺,距離會很遠。 APM的代碼只有對直升飛機詳細解釋的,四軸的沒有,有的看就行。
就是這個Copter
這個構(gòu)架圖真好 其實讀源碼除了對細節(jié)的把控,更需要的是宏觀的理解。
硬件就是PX4和Linux的變形板 因為任務(wù)多,所以引入了操作系統(tǒng) 這是我們在意的東西,飛行代碼 抽象的硬件層
共享的庫,傳感器,EKF算法 一些特殊的代碼
飛控這么多的信息,比如電池電量,姿態(tài)等,使用MAVLink協(xié)議發(fā)送,接著就是給高層的應(yīng)用,地面站以及你加了機載的計算機。 對上面的一個總結(jié) 這是對上面層的 目錄里面的這個文件是說明當前的所有依賴 這個目錄里面的文件歸所有的頂層項目共有 這是核心庫 傳感器 其它庫 cd $ARDUPILOT_HOME # the top-level of an AruPilot repository ./waf configure --board=Pixhawk1 ./waf build --target examples/INS_generic --upload
編譯的命令 ,先轉(zhuǎn)到庫的位置 然后編譯,后面是編譯的東西+上傳 cd $ARDUPILOT_HOME ./waf list | grep 'examples'
這樣是可以輸出所有的例子,就用了個grep的函數(shù)
如果你安裝了MAVProxy,就可以執(zhí)行下面的命令來看輸出了。 https://ardupilot.org/mavproxy/docs/getting_started/download_and_installation.html#mavproxy-downloadinstallwindows
安裝位置在此 mavproxy.py --setup --master /dev/serial/by-id/usb-3D_Robotics_PX4_FMU_v2.x_0-if00
執(zhí)行的命令如上,使用 –setup 選項將 mavproxy 置于原始串口模式,而不是已處理的 MAVLink 模式。 cd $ARDUPILOT_HOME # the top-level of an AruPilot repository ./waf configure --board sitl ./waf build --target examples/RCProtocolDecoder
在環(huán)仿真用這個,這個是RC協(xié)議解碼 ./build/sitl/examples/RCProtocolDecoder -M quad -C
開始運行。
|