版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、By2016/3/16 第一次編輯時(shí)間:201412月第二次整理時(shí)間:2016 3 16 源代碼:參考手冊目錄列表1 支持的硬件當(dāng)前ArduPilot/APM括 Pixhawk:下一代PX4FMU:32位ARM,基By2016/3/16 第一次編輯時(shí)間:201412月第二次整理時(shí)間:2016 3 16 源代碼:參考手冊目錄列表1 支持的硬件當(dāng)前ArduPilot/APM括 Pixhawk:下一代PX4FMU:32位ARM,基亍NuttX實(shí)時(shí)操作系統(tǒng) oneBlack基亍 Linux系統(tǒng)APM2:AVR25608位CPUArduPilot/APM源代碼基亍AP-HAL 硬件抽象層,便移植同種類板
2、子上,詳了解見 blog t所有開源項(xiàng)目APM:Plane(wiki,code)APM:Copter(wiki,code)APM:Roverwikicodeautopilot Planner(wiki,code)themost commonlyusedgroundionwritteninC#forwindowsbutalsorunsonLinuxandvia mono,地面站APMPlanner2.0wikicodeis agroundionspecificallyforAPMwritteninCusingtheQtlibraries,地面站,APMdlineorientedandscript
3、ablegroundion(mostlyusedby (wiki) (wiki,code)on-screendisplayofflightplayandroidground(userguide,DroneAPI(tutorial,droneshare)AdeveloperAPIfordronesorsandwebplayandroidground(wiki, ionwritteninCusingtheQtlibraries,地面站 PX4 (wiki) designers of the PX4FMU and owners of the underlying libraries upon whi
4、ch APM:Plane/Copter/Rover use runningonthe MAVLink (wiki) the protocol for communication n the ground ion, flight controller and some periphers including OSDADummysGuidetoworkingwithMAVLinkis here.MAVLink通訊 入門參考目CommunicatingwithRaspberryPiorODroidU3via2 整個(gè)APM工程源碼都采用 git(譯者注:一和開源分布式版本控系統(tǒng))行代碼管理,并托管 c
5、ode可 入門參考目CommunicatingwithRaspberryPiorODroidU3via2 整個(gè)APM工程源碼都采用 git(譯者注:一和開源分布式版本控系統(tǒng))行代碼管理,并托管 code可 HYPERLINK http:/wiki/where-to-get-the-code/ 獲源碼EZInstalltheArdupilotSourceCodeonYourComputerUsingEZGetArduinoandInitializeittoWorkEZArduinoCompileandUploadtheArdupilotFirmwaretoYourDebuggingwithSub
6、mittingPatchesbacktoEZDeveloperWalkThroughsInstall andset upadevelopment system,gettheArduPilotcodeandcompileandloadittoyour SettingupSITLonSettingupSITLonUsingReplaytoreruntheflightwiththelatestheLoopwithX-Plane(ArduplaneEditingthecodewithNotePad+,EclipseorMSVisual Git guideLoadthecodeontoLoadtheco
7、deonto aoneBuildingthecode編譯代LoadingthecodeontoLibraryAttitudeHowto addHowtocreate anewflightHowto runyournewHowto add anewMAVLinkWheretogetthecodeLearningtheArduPilotcodebase基礎(chǔ) 地面站Planner 包含在Planner代碼庫中2.1 預(yù)備知Git 在絕大多數(shù)操 地面站Planner 包含在Planner代碼庫中2.1 預(yù)備知Git 在絕大多數(shù)操 用操客戶端程序 ,如果你剛開始接觸這種源代碼控系統(tǒng),那舉, window
8、s 版 戒 Mac 版 何使用 Git時(shí)使用Windows版用戶界面和OSX/Linux作如果你想要直接向APM官網(wǎng)代碼庫中提交代碼,那舉你需要如何安裝git:源碼2 詳參考: HYPERLINK http:/wiki/learning-the-ardupilot-codebase/ 2.1 詳參考: HYPERLINK http:/wiki/learning-ardupilot- http:/wiki/learning-ardupilot- roduction/ ArduPilot 代碼分為 5 個(gè)主要部分,基本結(jié)構(gòu)分類如下:vehicletoolsdirectories externals
9、upportcode 當(dāng)前共有4種模型:ArduPlane,ArduCopter, APMrover2 and AntennaTracker。都是.pde文件,就是為了兼容2、AP_HAL 硬件抽其中AP_HAL 目錄定了一個(gè)通用接口。其他目。AP_HAL_AVR 目對亍 當(dāng)前共有4種模型:ArduPlane,ArduCopter, APMrover2 and AntennaTracker。都是.pde文件,就是為了兼容2、AP_HAL 硬件抽其中AP_HAL 目錄定了一個(gè)通用接口。其他目。AP_HAL_AVR 目對亍,AP_HAL_PX4對應(yīng),AP_HAL_Linux3、toolsdirec
10、tories工具目主要提供支持。For es, tools/autotest provides the autotest infrastructure behind the site tools/Replayprovidesourlogreplayutility。主要用亍測試4、externalsupportcode外部支持其,需要外部支持代碼。例如 Pixhawk、PX4下PX4NuttX 板載實(shí)時(shí)系統(tǒng)。thecoreNuttXRTOSusedonPX4PX4Firmware PX4 固件。the base PX4 middleware and drivers used on PX4 boa
11、rds uavcan 飛行器CAN 通信協(xié)議。the uavcan CANBUS implemenionusedinArduPilot mavlink Mavlink 通信協(xié)議。the mavlink protocol and code generator5、系統(tǒng)編用“ makemake apm2 makepx4-v1 /the APM1/the APM2/the /比如: make apm2-octa -j8s.mk編譯環(huán)境為px4toolchain,請自行。:/dev/toolchain installation win EDpdadyVCscYEQ6W8 Fcn9nNeQS52jL2Dp
12、Ogx 2.2 學(xué)習(xí)sketch詳參考: HYPERLINK http:/wiki/learning-ardupilot-the-ex http:/ sketch,是指使用 .pde 文件編寫主程序。下面癿 le-p將在 PixhawkAP_GPS例程sketchcd 將在 PixhawkAP_GPS例程sketchcd make px4-v2 正確理解sketch 例程代碼,我仧以GPS_AUTO_test.pde 代碼為例(目錄1、 pde 2 ;3、 代碼非常簡單;用來測試GPS數(shù)據(jù)。通過串口輸出GPS 4、 setup() 和 loop()#include #include pr ln
13、(GPSAUTOlibraryvoidicu 32_tlast_msg_ms; if(last_msg_ms!=gps.last_message_time_ms() last_msg_ms=constLocation&locgps.location();/ 獲叏GPS位置數(shù)hal.console-pr (Lat: );/ 輸出維度 pr _l on(hal.console, loc.lat); hal.console-pr Lon輸出經(jīng)度 pr _l on(hal.console, loc.lng);hal.console-pr f( Alt: %.2fm GSP: %.2fm/s CoG:
14、%d SAT: %d TIM: %u/%lu SUS:%un, loc.alt * 0.01f,( )gps.ground_course_cd()/100, 1、include文pde文件轉(zhuǎn)發(fā)為C+2、const AP_HAL:HAL& hal = AP_HAL_BOARD_DRIVER;/ pixhawk 的定義為AP_HAL_PX4飛控器硬件接口,比如console終端、定時(shí)器、I2C、SPI接口等。實(shí)際定是在 HAL_PX4_Class.cpp 中定,如1、include文pde文件轉(zhuǎn)發(fā)為C+2、const AP_HAL:HAL& hal = AP_HAL_BOARD_DRIVER;/
15、pixhawk 的定義為AP_HAL_PX4飛控器硬件接口,比如console終端、定時(shí)器、I2C、SPI接口等。實(shí)際定是在 HAL_PX4_Class.cpp 中定,如下:L_PX4hal是針對 AP_HAL_PX4 癿。終端字符輸出。hal.console-pr f()and hal.console-pr f_P()to strings(usethe_Ptouseless memory on hal.scheduler-millisandhal.scheduler-microstogetthetimesince延時(shí)。hal.scheduler-delayandhal.scheduler-d
16、elay_microsecondstosleepforashortIO輸入輸出。hal.gpio-I2C SPI 操作ode(),hal.gpio-read()andhal.gpio-write()forsingGPIO3、setup()每個(gè) sketch 都有一個(gè) setup()和 loop()數(shù)。板子啟 setup()被調(diào)用。這些調(diào)用都來自 HAL 代碼中癿 main() 務(wù)4、AP_HAL_MAIN()宏指每一個(gè)sketch(.pde文件)最底部,都有一個(gè)“AP_HAL_MAIN();”指令,它是一個(gè)HAL宏,用定一個(gè) C+main 數(shù),整個(gè)程序AP_HAL_PX4_Main.h中。#d
17、efineAP_HAL_MAIN()externC argc,char*constargv);argc,char*constargv)hal.init(argc,argv); return OK; 點(diǎn),在 AP_HAL_MAIN()里,就正式調(diào)用了hal.init()是程序起點(diǎn)sketch 中癿setuploop()2.3APM 詳參考: HYPERLINK http:/wiki/learning-ardupilot-threading/ 對亍 APM1、APM2 硬件板,支持多線程,所以只能通過簡單定時(shí)器加回調(diào)數(shù)來實(shí)現(xiàn)。類似PX4 和Linux 硬件板支持1、 定時(shí)回2、 HAL 3線4、
18、APM 驅(qū)56、 AP_Scheduler 任務(wù)調(diào)度系統(tǒng) 7、 信號燈(任務(wù)隊(duì)列互鎖用) 8、 lockless data structures1、定時(shí)回調(diào)Thetimer每個(gè)飛 ”一來獲叏 1kHz定時(shí)功能。所4、 APM 驅(qū)56、 AP_Scheduler 任務(wù)調(diào)度系統(tǒng) 7、 信號燈(任務(wù)隊(duì)列互鎖用) 8、 lockless data structures1、定時(shí)回調(diào)Thetimer每個(gè)飛 ”一來獲叏 1kHz定時(shí)功能。所上面代碼是以 MS5611 氣壓計(jì)驅(qū)為例,其中 AP_HAL_MEMBROC()宏,主要作用是將一個(gè)C+成員函數(shù)包裝起來,作為一個(gè)回調(diào)參數(shù)。其定在 AP_HAL_Name
19、space.h 文件中,如下:/macrotohidethe detailsof#define () () 好了,你可以試著自己編一個(gè)簡單癿sketch,在setup()loop()中下 1秒鐘向USB符2、HAL 專屬線程(有待測試以PX4為例,HAL1、 UART行接口數(shù)據(jù)(包括 2、 定時(shí)器線程,支持1kHz3、 IO線程,支持寫microSD、EEPROM、FRAM等對亍Pixhawk,請準(zhǔn)備一條調(diào)試電纜,連接到nshconsole(serial5 端口特率57600。如果已經(jīng)連接,試下”ps”命令,你會(huì)得 andidle下:AP_Terrain librarymicroSD 卡寫地注
20、意:IO 線程優(yōu)先級59,相比定時(shí)器181 多3、Driver專屬線。s() 和 AHRS 線UART線IO 線4、APM 驅(qū)動(dòng)與板級(原生)驅(qū)看刡 MPU6000APM版本,在libraries/AP_InertalSensor/AP_InertialSensor_MPU6000.cpp,另一個(gè)為原生代碼版本,在PX4Firmware/src/drivers/mpu6000。注 意 , 對 亍 Pixhawk , 4、APM 驅(qū)動(dòng)與板級(原生)驅(qū)看刡 MPU6000APM版本,在libraries/AP_InertalSensor/AP_InertialSensor_MPU6000.cpp,
21、另一個(gè)為原生代碼版本,在PX4Firmware/src/drivers/mpu6000。注 意 , 對 亍 Pixhawk , APM 代 碼 使 用 癿Pixhawk 原 生 驅(qū) 勱, 因 為 原 生 驅(qū) 勱已 經(jīng) 做 得 徆好 了 在非AP_InertialSensor_MPU6000.cpp 就用 PX4 原生驅(qū)勱5、板級專屬線程、在上面第2 節(jié)“HAL與屬線程”刡 ”ps”命令顯示線程。多都AP_HAL_PX4Schedule啟線程 ,這些線程列如下idletaskcalledwhenthere isnothingelsetoinit usedtostartupthepx4iohand
22、lethecommunicationwiththePX4IOco-hpworkPX4handlethreadbasedPX4driversmainlyI2Cdrivers) lpwork PX4 程。 handle thread based low priority work (eg. IO)fmuservoAUX輸出。handletalkingtotheuavcanhandletheuavcanCANBUSoutputs onthe這些任務(wù)啟,由 類文件,增加一sleep echo 命令,那舉當(dāng)PX4 通過 debug console(也就serial5)可以顯示出來rc.APMAPM在PX
23、4。 ,在rc.APMhrt_call_every(&_call,1000,_call_ erval,oline,等同亍AP_HAL中癿hal.scheduler-s()。上述代碼意思是,HRT (highresolutiontimer)高精度定時(shí)器,1000 微秒周期調(diào)用 MPU6000:measure_troline數(shù)。這些操作是 oline,this,處理 I2C 設(shè)備。改為 LPWORK任6、AP_Scheduler 任務(wù)調(diào)度系1、等待一個(gè)新IMU 采樣;2、在每一個(gè)IMU 采樣每一個(gè)飛行器都有一個(gè)AP_Scheduler:Tasktable任務(wù)列表,參考代碼(ardupilotlib
24、rariesAP_SchedulerScheduler_test.pde)類似icconstAP_Scheduler:Taskscheduler_tasksPROGMEM=ins_update,1,1000 one_hz_pr , 50,1000five_second_call,250,1800結(jié)構(gòu)體第12列,調(diào)用頻率(也叫tick,一個(gè)tick,就是一個(gè)最小時(shí)間單元,pixhawk最小時(shí) 那舉這個(gè)任務(wù)就pass 行。 1塞2能調(diào)用 sleepfunction3你可以修改Scheduler_test.pde盤、 GPS、更新AHRS輸出roll/pitch。時(shí)pixhawk 采#defineM
25、AIN_LOOP_RATE icconst le_rate=2能調(diào)用 sleepfunction3你可以修改Scheduler_test.pde盤、 GPS、更新AHRS輸出roll/pitch。時(shí)pixhawk 采#defineMAIN_LOOP_RATE icconst le_rate=7、信號3 種方例 如 : I2C 驅(qū) 勱可 以 通 過 信 號 量 , 確 保 同 一 時(shí) 間 , 只 有 一 個(gè) I2C 設(shè) 備 被 使 用 。 可 以 查 看pass_HMC5843.cpp8、LocklessDataLocklessDataStructures比信號量要方便,例子見the_share
26、d_datastructureintheringbuffersusedinnumerous.Agood leis Go and have a look at these two les,and proveto tthey aresafe for concurrent s. For DataFlash_File look atuseofthe_writebuf_headand_writebuf_tail9、PX4ORB(ObjectRequestBroker)PX4。另外兩種PX4下:ioctlcalls(seethe lesinread/writecalls(see_timer_tickin2
27、.4 UART 詳參考: HYPERLINK http:/wiki/learning-ardupilot-uarts-and-the-console/ http:/ UART 重要,用調(diào)試輸出,數(shù)傳、 GPS 模等。1、5 5個(gè)UART是uartA 串行終端,通常是MicroUSB 接口,運(yùn)行MAVLink協(xié)議uartBGPS1 uartC 主數(shù)傳接口,也就是em1 接口uartD 次數(shù)傳接口,也就em2 接口uartEGPS2 有些UART具備雙重角色,比如通過修改SERIAL2_PROTOCOL參數(shù),可以將uartD癿emetry 數(shù)傳更改為 /thebusisbusy-tryagainl
28、ater boolresult=測試les/UART_test目錄下癿le sketch5個(gè)UART 都輸o 消息。使用USB 轉(zhuǎn)串口工具2、調(diào)試終端Debug作為5個(gè)UART有額外癿還有一個(gè) debugconsole調(diào)試終端。你可以通過檢查 如#if :pr f( o如果定了 3、測試les/UART_test目錄下癿le sketch5個(gè)UART 都輸o 消息。使用USB 轉(zhuǎn)串口工具2、調(diào)試終端Debug作為5個(gè)UART有額外癿還有一個(gè) debugconsole調(diào)試終端。你可以通過檢查 如#if :pr f( o如果定了 3、UART函每個(gè)UART fformattedf_P format
29、ted prwithprogmemstring(savesmemoryonAVRboards) ln prand line feedwrite writeabunchofreadread someavailablecheckif anybytes aretxspace check how much outgoing buffer space is available get_flow_control check if the UARsflowcontrolcapabilities可以刡AP_HAL 中查看他定,并使 試 眾多UART結(jié)如下,歡迎郵件 2.5RCInputand HYPERLIN
30、K http:/wiki/learning-ardupilot-rc-input-output/ RCInput,也就是裝置。 ArduPilot RCinput(PPMSumonPX4,Pixhawk,LinuxandSBUSonPX4,PixhawkandSpektrum/DSMonPX4,PixhawkandonAPM1andRCOverride(MAVLink)all其中SBUS and Spektrum/DSM是串行協(xié)議,SBUS100kbps反UART 協(xié)議,Spektrum/DSM115200bps UART 協(xié)議。對亍這些協(xié)議是通過硬件UARTs有些 Linux系統(tǒng)是通 sim
31、plementtheseusing UARTs(suchasonPX4)andsomeimplementthemasbit-bangedsoftwareUARTs(on代碼定PCB 電路Serial標(biāo)說APMPixhawk 標(biāo)外PCB Micro接USB,支持MAVLink協(xié)Serial 接GPS 另 CAN2 接Serial 接第1 數(shù)傳模Serial 接第2 數(shù)傳模Serial 一般接GPS2 DebugSerial DebugConsole 調(diào)RCOutputRC上。RCOutput默認(rèn) 信號。對亍1、RCInput對象RCInput 對:libraries/AP RCOutputRC上
32、。RCOutput默認(rèn) 信號。對亍1、RCInput對象RCInput 對:libraries/AP 手柄,看看輸出 是否符合預(yù)期。2、RCOutput對象RCOutput:器、 I2C、經(jīng)由協(xié)處理器(PX4IO)輸出等程序les/RCOutput/RCOutput.pde 這段程序從1通道刡14通道速3、RC_Channel對hal.rcin hal.rcout 級癿 RC_Channel 對象來實(shí)現(xiàn)RC input 和 output通道 ax/trim值,同時(shí)支持輔劣AUX可對 inputoutput 相關(guān)例程:libraries/RC les/RC Channel/RC Channel.
33、pde例程教你如何setup、read、copyinputtooutput4、RC_Channel奇怪的input/output 設(shè)例用在 input 和output 上:=_out*_reverse) +上述代碼中癿radio_trim,是一個(gè)trim疊加,用來修轉(zhuǎn)向 亍 (漂移模式)pitch 飛, roll (而丌是傳統(tǒng) yaw 。以后, APM 團(tuán)隊(duì)會(huì)將其糾正過來,將這兩個(gè)概念分開。大家知道這舉回事就 OK 了。5、RC_Channel_aux 對類RC_Channel_aux class,它是 RC_Channel 以理 1,RC_Channel_aux,function, (cha
34、nnel都將輸出滿偏(4500就是滿偏最大值)。在相應(yīng)癿update_aux_servo_function()代碼中,case);/ function = 21。那舉其他使用了21 通道,將會(huì)被通道 6 混控(這個(gè)復(fù)雜,我也沒太明白,對這個(gè)有更好理解,請一定告訴我,F(xiàn)UNCTION 1-27,function 參數(shù) FUNCTION 1-27,function 參數(shù) = = = = = = = = = = = = = =/ manual,justpass-thrutheRCin/flap /unused/mountyaw/mountpitch/mount/mountopen(deploy)/c
35、lose/camera/egg/mount2yaw/mount2pitch/mount2/mount2open(deploy)/close/differentialspoiler1(left/differentialspoiler2(right/aileron,withrc/elevator,withrc/secondaryrudder/cropump/cropsprayerspinner/ron,leftron,right /groundsteering,usedtoseparatefrom/parachute/epm /Thismustbethelastenumvalue(onlyaddn
36、ewvalues_before_thisAP_ /=4096-8192 分配給了PX4 版 ,5932, 2132,/leave128bytegap/ andPX4#ifSTORAGE_NUM_AREAS=/ 8192-16384 分配給了 Pixhawk 版 / 類 ,10028, 6228,/leave 128bytegap for分布,我可以觀察AVR版本用地址是 0-4095PX4 4096-8191,Pixhawk址 , 用這個(gè) API les/StorageTest.pde)對StoageManagerlayer和AP_HAL:Storageobject試。對隨機(jī)偏移量隨機(jī)長度行了
37、隨機(jī)IO操作這也就意味可能會(huì)出現(xiàn)跨邊這個(gè)例程非常有用它用對 API移植 ArduPilot硬它對 EEPROM試注意StorageTest將會(huì)sss , 用這個(gè) API les/StorageTest.pde)對StoageManagerlayer和AP_HAL:Storageobject試。對隨機(jī)偏移量隨機(jī)長度行了隨機(jī)IO操作這也就意味可能會(huì)出現(xiàn)跨邊這個(gè)例程非常有用它用對 API移植 ArduPilot硬它對 EEPROM試注意StorageTest將會(huì)ssss3、DataFlash 癿,這個(gè)基亍DataFlash library是為 現(xiàn)在DataFlashAPI GPS傳感器日志這些數(shù)據(jù),
38、它同時(shí)也對其他庫提供相應(yīng)癿APIs日志。LOG件癿 FMT消息。FMT據(jù)相關(guān)例程les/DataFlash test/DataFlash test.pde據(jù)第一點(diǎn),在.log FMT,130,45,GPS,BIHBcLLeeEefI,S FMT,131,31,IMU,FMT,132,67,MSG,Z,第二點(diǎn)代碼 (參見 FMT, GPS, BIHBcLLeeEefI,S LOG_IMU_MSG,sizeof(log_IMU), IMU, 上述結(jié)構(gòu),以 LOG_IMU_MSG解信息類型數(shù)據(jù)大信 息數(shù) 據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)I 整-IMU,46481,0.000703,-0.000190,
39、-0.000359,-0.133995,0.034236,-/messagetypesforcommon / 對應(yīng) FMT .log #defineIMU,46481,0.000703,-0.000190,-0.000359,-0.133995,0.034236,-/messagetypesforcommon / 對應(yīng) FMT .log #define #define#define LOG_IMU_MSG #define LOG_RCIN_MSG #define LOG_RCOUT_MSG #define LOG_IMU2_MSG第五點(diǎn)log_IMUstructPACKEDlog_IMU341
40、212 = 31 字節(jié)/ / / 4*3= / 4*3= u 32_t; cel_x,accel_y,第六點(diǎn)下代 碼一樣增加。 u 16_tv1,v2,v3,v4; 32_t l1, l2;icconststructLogStructurelog_structurePROGMEM=LOG_TEST_MSG,/ / log_num = DataFlash.StartNewLog(); DataFlashAPI 隱藏了底層如log PixhawkorLinux ixIO 件在microSDLOGS接抽出 SD卡4ixixAPILinux和NuttX。AP_Terrainlibrary就是對亍 。
41、DataFlashAPI 就夠靈活了,同時(shí) 有ixIO支持,也就沒必要再用DataFlash了查看AP HAL Boards.h 文件,確認(rèn)IX_IO 宏已定,如下。 DataFlashAPI 就夠靈活了,同時(shí) 有ixIO支持,也就沒必要再用DataFlash了查看AP HAL Boards.h 文件,確認(rèn)IX_IO 宏已定,如下/ #defineIX_IO 下面給出了LOG 和 TERRAIN LOG 日志文件地#defineHAL_BOARD_TERRAIN_DIRECTORYfs/microsd/APM/TERRAIN / ixIO ixIO IOtimer 用。IO 592、要通過其他
42、 API直接調(diào)用,哪怕是簡單()數(shù),都可以,除非你 長得太帥,數(shù)據(jù)長度小,盡量少用seek(搜尋)功能SD卡癿IO操作有可能花上一秒鐘,這段時(shí)間足夠讓你癿飛行器翻轉(zhuǎn),垂直掉落,直接炸雞了。Pixhawk SD 卡讀寫操作一般幾毫秒,偶爾花費(fèi)時(shí)間會(huì)長。現(xiàn)在在你知道 怎舉做了?相關(guān)例程libraries/AP errainIO.cpp現(xiàn)處理 IO狀態(tài)機(jī)都是通過 AP_Terrain:io_timer3 APM:Copter代碼主要放在ArduCopterArduPlaneArduRover使用同樣癿庫文件 HYPERLINK http:/wiki/apmcopter-code-overview/
43、3.1APM:Copter HYPERLINK http:/wiki/apmcopt 這些庫文件也同樣被ArduPlane和ArduRover所使用。下面將列出一系次庫說明和它3.1APM:Copter HYPERLINK http:/wiki/apmcopt 這些庫文件也同樣被ArduPlane和ArduRover所使用。下面將列出一系次庫說明和它數(shù)說明1AP AHRS:采用DCM(方向余弦矩陣方法)戒EKF(擴(kuò)展卡爾曼濾波方法)預(yù)估飛行器姿態(tài)AP Common:所有執(zhí)行文件(sketch格式,arduinoIDE)AP Math:包含 AC AP_InertialNav:擴(kuò)展帶有g(shù)ps A
44、C AttitudeControl:姿態(tài)控關(guān)庫 AP WPNav:航點(diǎn) AP Motors:多旋翼和傳統(tǒng)直升 RC APM_RC 通 AP HAL,AP HAL AVR,AP HAL PX4:硬件抽象層庫,提供給其他高級控代碼一致接口,而必?fù)?dān)心底層同硬2、傳感器相關(guān) degs,/sAP RangerFinder:聲吶和紅互 AP Baro:氣壓計(jì)相關(guān)庫 AP GPS:GPS 相關(guān)庫AP Compass:三軸羅AP OpticalFlow:光流3、其他AP Mount,AP CameraAP Relay:相機(jī)安 AP : 從eeprom(電可擦只器 AP Buffer:慣性棧( FIFO)緩沖
45、3.2 HYPERLINK http:/wiki/apmcopt 3.2 HYPERLINK http:/wiki/apmcopt 為 首先次文件flight_mode.pde中癿update_flight_mode()過檢查control_mode發(fā)量模 癿 為 首先次文件flight_mode.pde中癿update_flight_mode()過檢查control_mode發(fā)量模 癿 等。執(zhí)行_run命名(比如:control stabilize.pde,control rtl.pde 等_run (從 g.rc_1.control_in,g.rc_2.control_in 等讀入) _r
46、un 數(shù)最后還必項(xiàng)要完成就是 將預(yù)期角度、速率等參數(shù)傳送給姿態(tài)/方位控(它都放在 AC AttitiudeControl 文件夾內(nèi)。AC AttitiudeControl庫提供了5調(diào)整飛行 為, roll1000, pitch1500, yaw500 代表飛行器此時(shí)向左傾斜10 yaw = 500 表飛行器北偏東roll1000, pitch1500, yaw500 代表飛行器此時(shí)左10/s,低頭速率15/s,繞Z軸速率為5/s調(diào)用 AC AttitudeControl:rate controller run()和 set throttle 送給 AP Motors庫AC 復(fù)雜3D(例如懸停L
47、oiter)“AC WPNav set roll,set pitch,set rate bf roll pitch angle ef roll pitch angle ef roll pitch rate ef control_write()數(shù)將接刡來自AP_Motors類中指定端口(pin 端3.3 HYPERLINK http:/wiki/code-overview-adding-a-ne 1、在主執(zhí)行代碼中添加參在文件 Parameters.h 參數(shù)類中枚發(fā)量( enum)合適位置,像下面代碼最后一行一樣添加你自己新參數(shù)。你需要 確保你添加參數(shù)區(qū)域中還可以添加新參數(shù)。檢查是否能繼續(xù)添加參
48、數(shù)方法是:檢查參數(shù)計(jì)數(shù),確保你所添加癿參數(shù)癿上一個(gè)元素要小亍你癿下一部分代碼癿。比如Misc 部分癿第一個(gè)參數(shù)起始亍 #20,my_new_parameter是#36。如果下一部分參數(shù)開始亍#36 要在參數(shù)旁邊用“棄用(deprecated)”戒“移除(remove)”做注解,這是因?yàn)橐恍┦褂谜邔⒋俗⑨層米髟趀eprom上 enum/deprecated-removewithnexteepromnumber/ k_param_log_bitmask=/ *Deprecated-/withnexteeprom/ /THOR The /locationfor/YawRate1 =/2 =med,
49、3= Stepset roll(),set pitch(),set Control:update xy Control:update z /deprecated-/ /第二步Step發(fā)量可型包括 支持 / 8; emetry88 88 / 0=XL, 1= / 2 =XLL(XL with10m/ 3 =8/0=disabled,3=voltage/4=voltageand8/Batterypackcapacitylessfailsafe_battery_enabled; /batteryfailsafe /deprecated-/ /第二步Step發(fā)量可型包括 支持 / 8; emetry8
50、8 88 / 0=XL, 1= / 2 =XLL(XL with10m/ 3 =8/0=disabled,3=voltage/4=voltageand8/Batterypackcapacitylessfailsafe_battery_enabled; /batteryfailsafe 88 /gpsfailsafe/groundionfailsafe/GPSHdopvaluebelowwhichrepresenta/myrametersdescriptiongoes第四步Step在config.h #ifndef2、向庫中添加參同樣可以使用下列步驟向庫中添加新第四步Step在config.h
51、#ifndef2、向庫中添加參同樣可以使用下列步驟向庫中添加新參數(shù)。以 AP Compass庫為例第一步Step首先在庫代碼癿.h 頭文件添加新發(fā)量 (如Compass h)??墒褂妙愋桶?AP_ 8,AP_Step #2 中使用。#defineclass 16_t/ product16_t/magneticfieldlongtheX16_t/ magneticfieldlongtheY 16_tmag_z;/ magnetic field strenglongtheZaxis u 32_t last_update;/ micros() time of last updatebool/tru
52、eiflastread/ (并非庫中)諸如 g.my_new_parameter這樣來# define/defaultvalueformy第三步Step在Parameters.pde(.cpp)文件中向var_info表中添加發(fā)量/Param:/DisplayName:My/Description:Adescriptionof myrametergoes/Range:-32768/User: 地面站(如ParamUser 注釋第二步Step然后在.cpp文件(如Compass.cpp)中添加發(fā)量包含有ParamIncrement癿var_info表信息,以便允講GCS(地面站)向用戶第二步St
53、ep然后在.cpp文件(如Compass.cpp)中添加發(fā)量包含有ParamIncrement癿var_info表信息,以便允講GCS(地面站)向用戶稱(如 MY_NEW_P) 16個(gè)字COMPASS_” /index0wasusedforthe oldion/Param:OFS /DisplayName:CompassoffsetsontheX/Description:Offsettobeaddedtothecompassx-axisvaluestocompensateforhe/Range:-400/Increment:/Param:/DisplayName:Compass/Descrip
54、tion:Theionofthecompassrelativetotheautopilot/Values: ion,/Param:/DisplayName:MyNewLibrary/Description:Thenewlibraryparameterdescriptiongoes/Range:-32768/User: AP_ 8 _orien AP_Vector3f_offset; AP_Float_declination;AP_ 8/enableuseforyawAP_ 8/enableautomaticdeclination16/descriptionofmyStep Parameters
55、.pde 文件癿var_info 數(shù)組列表中去。下3.4 Step Parameters.pde 文件癿var_info 數(shù)組列表中去。下3.4 “the (洋蔥頭工程)級刪姿態(tài)控制頁面面并沒有提供給想Step1:在文件defines.h中用#define 行模式 ,然后將飛行模式數(shù)量NUM_MODES 1/AutoPilot #defineSTABILIZE0/hold#defineACRO1/rate#defineALT_HOLD2/AUTO#defineAUTO3/AUTO#defineGUIDED4/ AUTO#define LOITER5/Holdasingle#defineRTL6
56、/AUTO HYPERLINK http:/wiki/apmcopter-adding-a-new-flight-mode/ constAP_Param:Infovar_infoPROGMEM=/Param:/DisplayName:Eepromformat/Description:Thisvalueisincrementedwhenchangesaremadetotheeeprom/User: , /Group:/Path: /Group: INS_, AP_InertialSensor),第三步_my_new_lib_parameter包含在庫中是protected外被發(fā)為 public
57、中使用 compass._my_new_lib_parameter 參數(shù)了。void/-*-void/-*-tab-width:4;Mode:C+;c-basic-offset:4;indent-tabs-mode:nil-*control_newflightmode.pde-initandruncallsfornewflight/newflightmode init-initialiseflighticboolnewflightmode_init(bool/doanyrequiredinitialisationoftheflight mode/thiscodewillbecalledwhen
58、evertheoperatoro this/returntrueinitialisationsful,falseifit/ilse is returned here the vehicle will remainhepreviousflightmode returntrue;/newflightmode_run-runsthemain/willbecalled at 100hzoricvoid/if notarmedorthrottleatzero,setthrottletozeroandexitimmedia y if(!motors.armed() | g.rc 3.control in
59、= 0) attitude_control.set_throttle_out(0, false);/convertpilotodesiredvehicleanglesoriong.rc_1.control_in:pilotsrollherange -4500 g.rc_2.control_in:pilotpitchherange -4500Step #2:類似相似飛行模式癿 control stabilize.pde 者 control de 文件,創(chuàng)建新飛行模式癿pr caseStep6:在文件Parameters.pde中向FLTMODE1 FLTMODE6式/Param:列表中/Disp
60、layName:FlightMode/Description:FlightmodewhenChannelis1230,1230,= ition,9:Land,10:OF /User: Planner顯示器 HUD和飛行模式組件中代碼。關(guān)亍Planner如何編譯問題,請參考我另外一篇文章: .cn/s/blog 402c071e0102v4kx.html3.5 HYPERLINK http:/wiki/code-overview-scheduling-your-new-code-to-run- /wiki/code-overview-scheduling-your-new-code-to-run
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于區(qū)塊鏈的VRAR版權(quán)數(shù)據(jù)動(dòng)態(tài)認(rèn)證與安全防護(hù)
- 基于遙感的水分脅迫評估
- 2025年河北省公需課學(xué)習(xí)-《中華人民共和國立法法》修訂解讀
- 游戲知識競賽題庫及答案
- 患者處理醫(yī)患關(guān)系的技巧
- 2025年韶關(guān)市始興縣公安局公開招聘警務(wù)輔助人員9人備考題庫及完整答案詳解1套
- 2025年湖南省中西醫(yī)結(jié)合醫(yī)院湖南省中醫(yī)藥研究院附屬醫(yī)院高層次人才公開招聘13人備考題庫及一套答案詳解
- 2025年東莞仲裁委員會(huì)新疆生產(chǎn)建設(shè)兵團(tuán)第三師分會(huì)招聘備考題庫附答案詳解
- 2025年南京大學(xué)公開招聘水處理與水環(huán)境修復(fù)教育部工程研究中心主任備考題庫及參考答案詳解1套
- 2026年公路水運(yùn)工程施工企業(yè)安全生產(chǎn)管理人員復(fù)審考試題及答案
- 非開挖頂管合同范本
- 2026年公安機(jī)關(guān)理論考試題庫300道(培優(yōu)a卷)
- 橋機(jī)安裝拆卸監(jiān)理實(shí)施細(xì)則
- 志愿者服務(wù)品牌建設(shè)方案
- 清潔清掃項(xiàng)目投標(biāo)書
- 2025年個(gè)人信息保護(hù)專項(xiàng)工作總結(jié)與整改報(bào)告
- 傳遞正能量做好員工
- 2025北京市科學(xué)技術(shù)研究院及所屬事業(yè)單位第三批招聘37人備考題庫附答案
- 網(wǎng)優(yōu)項(xiàng)目年終總結(jié)
- 2025江蘇鎮(zhèn)江市京口產(chǎn)業(yè)投資發(fā)展集團(tuán)有限公司招聘2人備考題庫含答案詳解
- 2025年秋季學(xué)期國家開放大學(xué)《人文英語3》形考任務(wù)綜合測試完整答案(不含聽力部分)
評論
0/150
提交評論