国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

開源飛控初探(四)ArduPilot::Copter固件源碼分析

這篇具有很好參考價值的文章主要介紹了開源飛控初探(四)ArduPilot::Copter固件源碼分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2022.5.7,基于v4.0.5的分析。官網(wǎng)文檔沒及時更新,本文對當(dāng)前版本源碼的描述可能和官網(wǎng)不一樣。

1、無人機(jī)全棧分層結(jié)構(gòu)圖

開源飛控初探(四)ArduPilot::Copter固件源碼分析

2、Flight Code固件部分

上圖中的Flight Code層,分為5個部分:

  1. 車機(jī)層。一份代碼通過編譯配置,可以支持Rover(小車/船)、Copter(直升機(jī),包括多旋翼)、Plane(固定翼飛機(jī))、Sub(潛水器)、AntennaTracker(追蹤天線,會自動跟隨無人機(jī)所在方向轉(zhuǎn)動的雷達(dá))這些子項目。車機(jī)層是這幾種車機(jī)子項目的專屬代碼層。

  1. 通用組件庫。各種車機(jī)都依賴的基礎(chǔ)層,見源碼結(jié)構(gòu)小節(jié)的libraries/。

  1. 硬件抽象層HAL

  1. 工具。包括自動化測試等,見源碼結(jié)構(gòu)一節(jié)的Tools/。

  1. 依賴的三方項目,以git submodule形式存在。見源碼結(jié)構(gòu)小節(jié)modules/。

車機(jī)層實際支持的vehicle類型:

開源飛控初探(四)ArduPilot::Copter固件源碼分析

3、ArduCopter架構(gòu)與頂層設(shè)計

ArduCopter就是ArduPilot:Copter子項目的簡稱。整體架構(gòu)圖:

開源飛控初探(四)ArduPilot::Copter固件源碼分析

理解了頂層設(shè)計思路就行了:

  1. 每種板子都有自己的BootLoader bin文件,不需要再編譯的,直接打包進(jìn)最終bin。它是HAL硬件抽象層的實現(xiàn)。

  1. main函數(shù)是往HAL實現(xiàn)層注冊一個callback函數(shù),然后HAL::run()把控制權(quán)交給了BootLoader層。硬件初始化完畢會調(diào)用callback函數(shù),其中一個是setup(),讓車機(jī)層接著初始化。

  1. 每種車機(jī)子項目都有自己的主類,都繼承AP_Vehicle父類,它是HAL層回調(diào)函數(shù)的實體,例如Copter子項目有個Copter類。Copter::setup()會發(fā)起很多個計劃任務(wù),不同任務(wù)做不同的事,觸發(fā)頻率也不一樣(1~400Hz都有)。這些任務(wù)有三大類:

  1. 讀取不同傳感器的數(shù)據(jù),處理后保存計算結(jié)果。這些結(jié)果能表示車機(jī)的當(dāng)前狀態(tài)。

  1. 執(zhí)行地面站的各種命令,命令最終會轉(zhuǎn)化為車機(jī)的目標(biāo)狀態(tài)

  1. 根據(jù)當(dāng)前狀態(tài)和目標(biāo)狀態(tài)的差距,計算應(yīng)該如何通過調(diào)整不同電機(jī)的功率輸出(螺旋槳轉(zhuǎn)速)以達(dá)到目標(biāo)狀態(tài),并把計算結(jié)果轉(zhuǎn)換為電路控制信號。

  1. 飛行模式抽象為一個基類Mode,每種具體的飛行模式是一個子類。不同的子類,計算車機(jī)目標(biāo)狀態(tài)的結(jié)果會不一樣。即設(shè)計模式中的策略模式。Copter類有成員變量記錄當(dāng)前的Mode。

  1. Mission(航線規(guī)劃)item都可以用一種Mode來表示,item參數(shù)影響的是計算目標(biāo)狀態(tài)的結(jié)果。

用偽代碼來描述核心流程:

while True:
    receiveMavLinkControlMessage()
        changeTarget()
    readSensorValue()
        convertValueToStandardUnit()
        saveInMemory()
    computeWayToTarget()
        computeAttitudeForMoving()
        computeMotorRate()
        computeElectricCurrentValue()
    passValueToMotor()

4、源碼目錄文件結(jié)構(gòu)和用途

  • AntennaTracker/。追蹤天線子項目的專屬代碼

  • APMrover2/。rover子項目的專屬代碼

  • ArduCopter/。直升機(jī)子項目的專屬代碼(多旋翼也是直升機(jī),可以垂直起降的都算)

  • ArduPlane/。固定翼飛機(jī)子項目的專屬代碼(需要助跑的就不是直升機(jī)了)

  • ArduSub/。潛水器子項目的專屬代碼

  • benchmarks/AP_gbenchmark.h。只有兩個inline函數(shù),結(jié)合Google Benchmark使用的。

  • docs/。使用doxygen(文檔生成工具)來生成文檔的腳本和配置。

  • libraries/。有116個子目錄。重要的模塊包括:

  • AC_AttitudeControl/。ArduCopter的姿態(tài)、位置控制函數(shù)庫

  • AC_PID/。比例-積分-微分控制

  • AP_AHRS/。姿態(tài)估算,使用DCM或EKF算法

  • AP_Camera/。攝像頭控制

  • AP_InertialNav/。慣性導(dǎo)航處理,混合計算加速計的輸入,包括GPS和氣壓計數(shù)據(jù)

  • AP_InertialSensor/。讀取陀螺儀、加速計數(shù)據(jù),校準(zhǔn)和轉(zhuǎn)換成標(biāo)準(zhǔn)單位,供其它模塊使用

  • AP_Math/。各種數(shù)學(xué)函數(shù),包括向量操作。

  • AP_Mission/。存儲和讀取eeprom上的mission命令

  • AP_Motors/。電機(jī)混合計算

  • AP_OpticalFlow/。光流傳感器

  • AP_RangeFinder/。聲吶和遠(yuǎn)距離傳感器

  • AR_WPNav/。waypoint navigation,航點導(dǎo)航

  • RC_Channel/。轉(zhuǎn)換APM_RC到內(nèi)部單元的電平輸入輸出,例如角度

  • mk/check_modules.sh。檢查子倉庫有沒有clone和checkout成功

  • modules/。子目錄都是git submodule倉庫,是ArduPilot保存的副本

  • ChibiOS/。一個實時操作系統(tǒng),官網(wǎng)http://www.chibios.org/。ArduPilot基于它來開發(fā)。以前用的是NuttX系統(tǒng)。

  • gbenchmark/。google的性能測試工具。

  • gtest/。google的C++測試框架

  • libcanard/。一個uavcan/can協(xié)議的c語言實現(xiàn)

  • mavlink/。通信協(xié)議,見下一章

  • uavcan/。無人機(jī)控制器域網(wǎng)。

  • waf/。編譯工具

  • tests/。應(yīng)用gtest的代碼

  • Tools/。有26個子目錄,用途包括:BootLoader、外設(shè)管理、waf編譯、自動化測試、代碼風(fēng)格檢查、調(diào)試、環(huán)境依賴安裝、日志分析、mavproxy等

  • BUILD.md。描述了編譯各個子項目的命令和參數(shù)

  • README.md。主要是參考資料的網(wǎng)址和維護(hù)者的名單。

5、源碼編譯

環(huán)境為WSL - Ubuntu 20.04.4 LTS。

需要先安裝python2,并確保python --version和pip --version都顯示2.x版本。

# 先clone主倉庫
git clone https://github.com/ArduPilot/ardupilot.git

主倉庫的submodule地址寫了git://協(xié)議,在國內(nèi)是訪問不了,需要手動修改為https://。方法:

  1. 打開.gitmodules和.git/config,把所有的git://改成https://。

  1. MAVLink還有一個submodule,pymavlink。所以要打開modules/mavlink/.gitmodules和.git/modules/modules/mavlink/config,把所有的git://改成https://。

修改完后再clone子倉庫

git submodule update --init --recursive

ArduPilot帶有一個腳本來安裝環(huán)境依賴項,但是基于Ubuntu18的,在Ubuntu20需要修改腳本,因為Ubuntu20廢棄了python2的包,無法用apt安裝,可以改用pip安裝。文本編輯器打開Tools/environment_install/install-prereqs-ubuntu.sh,可全局搜索刪除這些包名python-pip python-matplotlib python-scipy python-empy python-serial python-opencv

使用自帶腳本安裝依賴:

pip install matplotlib scipy empy serial opencv-python==4.2.0.32
./Tools/environment_install/install-prereqs-ubuntu.sh -y
# 過程需要sudo權(quán)限,輸入密碼

ArduPilot使用waf編譯工具來組織編譯過程。waf的作用類似于Android系統(tǒng)的編譯工具ninja。

./waf list_boards命令可以列出支持的板子,現(xiàn)在支持的有:

aero airbotf4 bbbmini bebop bhat blue crazyflie2 CUAV-Nora CUAV-X7 CUAV_GPS CUAVv5 CUAVv5Nano CubeBlack CubeBlack+ CubeGreen-solo CubeOrange CubePurple CubeSolo CubeYellow dark disco DrotekP3Pro Durandal edge erleboard erlebrain2 f103-ADSB f103-GPS f103-HWESC f103-periph f103-RangeFinder f103-Trigger f303-GPS f303-HWESC f303-M10025 f303-M10070 f303-periph f303-Universal F35Lightning F4BY fmuv2 fmuv3 fmuv4 fmuv4-beta fmuv5 iomcu KakuteF4 KakuteF7 KakuteF7Mini linux luminousbee4 MatekF405 MatekF405-STD MatekF405-Wing MatekF765-Wing MatekH743 mindpx-v2 mini-pix mRoControlZeroF7 mRoNexus mRoPixracerPro mRoX21 mRoX21-777 navio navio2 NucleoH743 ocpoc_zynq omnibusf4 omnibusf4pro omnibusf4v6 OMNIBUSF7V2 OmnibusNanoV6 PH4-mini Pix32v5 Pixhawk1 Pixhawk1-1M Pixhawk4 Pixracer pocket pxf pxfmini R9Pilot revo-mini rst_zynq sitl SITL_arm_linux_gnueabihf SITL_static SITL_x86_64_linux_gnu skyviper-f412-rev1 skyviper-journey skyviper-v2450 sparky2 speedybeef4 SuccexF4 TBS-Colibri-F7 VRBrain-v51 VRBrain-v52 VRBrain-v54 VRCore-v10 VRUBrain-v51 ZubaxGNSS zynq

這里選Pixhawk4。

# 先配置板子
./waf configure --board Pixhawk4
# 編譯copter子項目
./waf -j8 --targets bin/arducopter

編譯過程中,編譯ChibiOS有103個步驟,ArduPilot本身有648個步驟,處理4個XML包含226種消息MAVLink。最終得到一個bin文件,要燒錄到飛控板子上。

6、仿真

源碼里有工具使得在PC機(jī)上運行固件,本機(jī)可通過tcp 5760端口連接并用MAVLink交互。

參考資料

  • ArduPilot源碼官方介紹

  • Code Overview (Copter)

  • Clone a repository文章來源地址http://www.zghlxwxcb.cn/news/detail-471050.html

到了這里,關(guān)于開源飛控初探(四)ArduPilot::Copter固件源碼分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Nooploop空循環(huán) 基于ArduPilot開源自動駕駛儀平臺(APM固件)的TOFSense/-F/-M全系列激光測距傳感器應(yīng)用圖文教程

    Nooploop空循環(huán) 基于ArduPilot開源自動駕駛儀平臺(APM固件)的TOFSense/-F/-M全系列激光測距傳感器應(yīng)用圖文教程

    自2023/7/10日起ArduPilot飛控固件開始支持深圳空循環(huán)科技有限公司的TOFSense系列產(chǎn)品。從Plane/Copter/Rover 4.5 開始,Ardupilot 固件添加了對 TOFSense協(xié)議的支持,用于避障和高度保持。用戶如果使用低于該版本的固件需要自行將相關(guān)文件進(jìn)行移植與適當(dāng)修改,才能支持TOFSense,TOFSense傳

    2024年02月04日
    瀏覽(172)
  • 無人機(jī)/飛控--ArduPilot、PX4學(xué)習(xí)記錄(5)

    無人機(jī)/飛控--ArduPilot、PX4學(xué)習(xí)記錄(5)

    這幾天看dronekit,做無人機(jī)失控保護(hù)。 PX4官網(wǎng)上的經(jīng)典案例,我做了很多注解,把代碼過了一遍。 無人機(jī)具體執(zhí)行了: ?先起飛,飛至正上空10m-向北移動10m-向東移動10m-向南移動10m-向西移動10m-回到初始起飛點(即home點),降落。 具體執(zhí)行之前,要打開JMAVSim,接下來會在JMAV

    2024年04月15日
    瀏覽(116)
  • 無人機(jī)/飛控--ArduPilot、PX4學(xué)習(xí)記錄(2)

    無人機(jī)/飛控--ArduPilot、PX4學(xué)習(xí)記錄(2)

    這是一篇碎碎念,零零碎碎的記錄了環(huán)境配置過程, 僅供本人記錄學(xué)習(xí)歷程和參考。 (記錄的挺亂的,但是文章鏈接里的博客寫的是真好) 本章主要完成的目標(biāo) : 安裝PX4 并 成功運行出3D無人機(jī)界面。 參考文章: 搭建PX4環(huán)境: PX4/Pixhawk - 編譯環(huán)境搭建_pix4 yu pixhawk-CSDN博客 使

    2024年03月21日
    瀏覽(89)
  • (3)將固件加載到已有ArduPilot固件的主板上

    (3)將固件加載到已有ArduPilot固件的主板上

    文章目錄 前言 3.1 將自動駕駛儀連接到電腦 3.2 選擇COM端口 3.3 安裝固件 3.4 使用測試版和開發(fā)版 3.5 測試 這些說明將告訴你如何將最新的固件下載到已經(jīng)安裝了 ArduPilot 固件的 自動駕駛儀 硬件上。這個過程將使用 Mission Planner 地面控制站。請參閱將固件加載到?jīng)]有 ArduPilot 固

    2024年02月11日
    瀏覽(21)
  • (5)將固件加載到?jīng)]有ArduPilot固件的主板上

    (5)將固件加載到?jīng)]有ArduPilot固件的主板上

    文章目錄 前言 4.1 下載驅(qū)動程序和燒錄工具 4.2 下載ArduPilot固件 4.3 使用測試版和開發(fā)版 4.3.1 測試版 4.3.2 最新開發(fā)版本 4.4 將固件上傳到自動駕駛儀 4.5 替代方法 4.6 將固件加載到帶有外部閃存的主板上 ArduPilot 的最新版本( Copter-3.6 , Plan-3.9 , Rover-3.5 )運行在相對較小的、非

    2024年02月14日
    瀏覽(18)
  • (4)將固件加載到已有ArduPilot固件的主板上

    (4)將固件加載到已有ArduPilot固件的主板上

    文章目錄 前言 3.1 將自動駕駛儀連接到電腦 3.2 選擇COM端口 3.3 安裝固件 3.4 使用測試版和開發(fā)版 3.5 測試 這些說明將告訴你如何將最新的固件下載到已經(jīng)安裝了 ArduPilot 固件的 自動駕駛儀 硬件上。這個過程將使用 Mission Planner 地面控制站。請參閱將固件加載到?jīng)]有 ArduPilot 固

    2024年02月14日
    瀏覽(22)
  • BetaFlight飛控AOCODARC-F7MINI固件編譯

    BetaFlight飛控AOCODARC-F7MINI固件編譯

    BetaFlight是一款非常出色的飛控航模開源軟件,而且是基于GPL V3協(xié)議,所以相應(yīng)的代碼修改,必須開源出來。與PX4的BSD協(xié)議不一樣,通常商業(yè)角度更多傾向于BSD協(xié)議。 本次編譯主要是針對AOCODARC-F7MINI飛控板,采用最新的代碼分支進(jìn)行編譯,以便進(jìn)行功能驗證。 控制器:STM32F

    2024年02月12日
    瀏覽(18)
  • Godot 4 源碼分析 - 初探

    Godot 4 源碼分析 - 初探

    準(zhǔn)備研究GoDot 4源碼。 獲取源代碼 在進(jìn)入 SCons 構(gòu)建系統(tǒng)并編譯 Godot 之前,你需要將 Godot 的源代碼下載到本地。 源代碼位于?GitHub?上, 雖然你可以通過網(wǎng)站手動下載它, 但是通常你希望通過? git ?版本控制系統(tǒng)來下載. 如果你是為了做貢獻(xiàn)或拉動請求而進(jìn)行編譯,你應(yīng)該遵循

    2024年02月06日
    瀏覽(19)
  • 初探 qiling ( 麒麟 ):開源的二進(jìn)制分析、高級代碼模擬框架

    初探 qiling ( 麒麟 ):開源的二進(jìn)制分析、高級代碼模擬框架

    官方介紹: 官網(wǎng):https://qiling.io/ :https://twitter.com/qiling_io github 地址:https://github.com/qilingframework/qiling ? qiling 基于 python 開發(fā),是一個開源的、可模擬多種架構(gòu)和平臺的二進(jìn)制 仿真(模擬) 框架,同時還提供跨架構(gòu)的調(diào)試能力,多種層次的 hook 方法,該工具由 Unicorn 引擎 驅(qū)動

    2023年04月24日
    瀏覽(25)
  • F4/F7飛控betaflight固件燒寫,地面站 BF無法讀取、不識別、未發(fā)現(xiàn)等飛控疑難雜癥問題解決與驅(qū)動安裝

    F4/F7飛控betaflight固件燒寫,地面站 BF無法讀取、不識別、未發(fā)現(xiàn)等飛控疑難雜癥問題解決與驅(qū)動安裝

    目錄 1.安裝驅(qū)動 2.測試固件 3.燒錄固件 4.尋找補(bǔ)充代碼 betaflight/unified_targets/configs/OMNIBUSF4SD.config 5.連接飛控,點擊cli命令行。 6.尋找其他穩(wěn)定版本 當(dāng)安裝完畢betaflight軟件后,第一次鏈接飛控與電腦,出現(xiàn)無法連接情況,點擊無反應(yīng)。 點擊計算機(jī)-管理-設(shè)備管理器-端口,出現(xiàn)

    2024年01月25日
    瀏覽(174)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包