1. 程式人生 > >PX4二次開發

PX4二次開發

軟體架構

PX4 在廣播訊息網路內,按照一組節點(nodes )的形式進行組織,網路之間使用像如“姿態”和“位置”之類的語義通道來傳遞系統狀態。軟體的堆疊結構主要分為四層:

  • 應用程式介面:提供給app開發人員,使開發人員可以使用ROS或者。這一介面設計儘可能簡潔和扁平,並儘量多的隱藏複雜性。
  • 應用框架:這是一組核心預設應用程式(節點),執行核心的飛行控制。
  • 函式庫:這一層包括針對機器核心操作的所有系統函式庫和功能
  • 作業系統:最後一層,提供硬體驅動、網路通訊、UAVCAN故障安全(failsafe)系統。

內部程序通訊(Inter ProcessCommunicationIPC

PX4 

平臺的封裝提供了跨平臺的無鎖釋出 -訂閱模式(物件請求處理器。取決於平臺/作業系統,完成這個的後端可能是uORB,或者Linux上的。封裝可擴充套件,也可作為訊息系統提供支援,比如ØMQ。所有這些後端的共同特點是,它們都允許傳送資料到一個像如位置這樣的語義訂閱主題(topic),並使多個接收器跨程序的收到這一資料。

IPC效能

釋出(Publication)到訂閱(subscription)之間的延遲:

  • uORB: 23 us @ 168MHzSTM32F4
  • ROS: TBD
  • ROS2 / DDS: 185 us @ 1.6GHzIntelPentium 4 and 2GBRAM running Windows XP (
    details
    )
  • ZeroMQ: 170 us @ 1.6GHzIntelPentium 4 and 2GBRAM running Windows XP (details)

安全和保護模型

飛行核心與主要應用級處理過程隔離,以確保獨立於高層級系統狀態的機器核心操作,保持穩定。

PX4應用程式框架

PX4應用程式框架在所有平臺上程式碼相容,(比如 Pixhawk / NuttX,又比如, SnapDragon / Linux),獨立並將中間裝置作為傳輸層。


節點控制代碼(Node Handle

節點控制代碼是每一個連線到中間裝置的釋出器(publisher)或者訂閱器(subscriber

)的核心資料結構(一個節點可以同時是釋出器和訂閱器)。一個節點是一個邏輯單元,每一個程序都可以有多於一個的節點(雖然這並不是典型的形式)。

  1. px4::NodeHandle n();  

資料結構

對於所有相關的中間裝置實現,PX4根據儲存在“msg”中的定義檔案自動生成據結構。

釋出(publication

通過使用節點控制代碼通告(advertise)訂閱主題( topic)來建立一個新的釋出(publication)。注意這個模板,是訂閱主題的資料結構。

  1. px4::Publisher<px4::px4_rc_channels>* rc_channels_pub = n.advertise<px4_rc_channels>()  

從這個指向rc_channels_pub的控制代碼的指標,可以用於釋出資料
  1. px4_rc_channels rc_channels_msg;  
  2. rc_channels_msg.data().timestamp_last_valid= px4::get_time_micros();  
  3. _rc_channels_pub->publish(rc_channels_msg);  

訂閱(Subscription

通過訂閱一個訂閱主題建立一個新的釋出。注意模板,是訂閱主題的資料結構。使用訂閱共有三個選擇:

1.           使用訂閱主題的控制代碼,進行手動複製操作。

2.           作為函式的回撥(callback),在訂閱主題更新時,函式被呼叫。

3.           作為類方法的回撥(相當於函式,但是是C++型別的)

單純訂閱

除非手動呼叫複製方法,否則資料不會被複制。

  1. unsigned min_interval =500;  
  2. _sub_rc_chan = _n.subscribe<px4_rc_channels>(min_interval);  
函式回撥

每次訂閱主題更新,則'rc_channels_callback_function'被呼叫。

  1. unsigned min_interval =500;  
  2. _n.subscribe<px4_rc_channels>(rc_channels_callback_function, min_interval);  
類方法回撥

相當於前面函式的例子。

  1. _n.subscribe<px4_rc_channels>(&SubscriberExample::rc_channels_callback, this, min_interval);  

混合系統

為了解決更高級別的挑戰,比如基於視覺的避障或者複雜控制問題,一個執行嵌入式Linux的伴隨計算機將非常有用。


整合ROS 

PX4可以通過兩種不同的APIROS整合到一起:或者自然地將每一個應用作為ROS節點,或者通過在嵌入式自駕儀上唯一地執行


DroneAPI

DroneAPI是一個高階應用程式介面,類似於一個為遠端過程呼叫(RPC)提供語言繫結的函式庫。從本質上講,它是面向告訴無人機去哪裡或做什麼,而不是核心的機器人通訊/ API的一部分。

參考

如下的同行評審論文描述了更高階的架構:

Lorenz Meier, DominikHonegger and Marc Pollefeys. PX4: A Node-Based Multithreaded Open SourceRobotics Framework for Deeply Embedded Platforms, ICRA (Int. Conf. on Roboticsand Automation) 2015. (to appear)

相關推薦

PX4開發

軟體架構 PX4 在廣播訊息網路內,按照一組節點(nodes )的形式進行組織,網路之間使用像如“姿態”和“位置”之類的語義通道來傳遞系統狀態。軟體的堆疊結構主要分為四層: 應用程式介面:提供給app開發人員,使開發人員可以使用ROS或者。這一介面設計儘可能簡潔和扁平

PX4開發——基於mahony演算法的姿態估計

    PX4裡面有兩種姿態估計演算法,一種是基於EKF的,還有一種是基於mahony的,雖然mahony演算法簡單而且計算量少,但效能並不輸EKF多少。這裡我們講一下基於mahony的姿態估計演算法,本來我還想在正式開始前為大家補充一下座標系、四元數、尤拉角和旋轉矩陣等一

dedecms開發:dedetemplate.class.php 動態模板類

filename 外部 運行 mpi public esc val net color dedecms二次開發目錄點這個:dedecms二次開發教程目錄 核心類文件 include/dedetemplate.class.php 用途:用於非核心模塊的動態頁面或列表頁的模板解

VB.Net實現下CATIA開發方法

ror 點擊 doc struct cat inf 定義 then ports 源自網絡。 在visual studio(vb,c#,c++)下使用CATIA進行二次開發有如下特點: -->需要引用CATIA的對象庫 -->需要對象聲明(visua

呼叫中心系統OA開發

清單 二次開發 工作 註意 分辨率 傳真 新增 歷史 有效 1. 既有修改 分辨率顯示自適應調整 工作流數據調整 2. 呼叫中心 語音電話 l 新建任務 字段:任務主題、語音主題、提

(6)微信開發 之 微信文本消息接口實現

微信 odin link 消息處理 nal puts 算法 帳號 接口實現 p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px SimSun } p.p2 { margin:

學習 MeteoInfo開發教程(一)

mat 沒有 組件 資源管理 img 教程 layer 添加 bbs 來自氣象家園:http://bbs.06climate.com/forum.php?mod=viewthread&tid=6631 按照教程,沒有太大問題,有些是對c#操作不熟悉導致。 1.添加d

學習 MeteoInfo開發教程(三)

開發教程 cnblogs false raw class .dll dll inf legend 1.breakList的問題 ((PolygonBreak) aLS.breakList[0]).DrawFill=false; 新的類庫將LegendScheme的brea

學習 MeteoInfo開發教程(四)

手動添加 map dem itl 數控 nas 字號 south title 教程四的問題不大。 1.private void AddMapFrame_ChinaSouthSea()、private void AddTitle()兩個函數和public Form1()函數並

Revit開發--Hello World

man dem users att try encoding cli 引用 類庫 部署完開發環境,就要進行每次學習新的技能,必寫的Hello World。 1、打開VS開發環境,新建一個項目類庫RevitDemo。 2、修改Class1名稱為Command。 3、在引

GTS-800開發基本流程總結

win highlight line names 關閉 參數 ble 名稱 速度 1、打開控制器         GT_Open 2、啟動伺服使能        GT_ClrSts 3、軸規劃位置清零       GT_SetPrfPos 4、軸運動模式        

AE開發,解決子窗體使用父窗體的AxControl控件

控件 con pri apc sha item object new end 在子窗體寫構造函數,然後再在父窗體按鈕點擊事件下寫 public frmIDW(AxMapControl axMapControl1) { Initia

學習MeteoInfo開發教程(十

odi 資源 level 無法訪問 .cn oid pub images bsp 1.添加新的Form窗體: 在解決方案資源管理器中,右鍵MeteoInfoDemo,“添加”,“Windows 窗體” 2.新窗體中添加好layersLegend1和Layout之後,要把la

一個星期實現開發,解決很多用戶無法解決的問題

解決方案 版本號 臨時性 開發 用戶 最近,收到一個用戶的體驗分享,他用一個星期完成對H3的從陌生到基本熟悉,再從基本屬性到基本二次自定義開發,對於他對我我們H3的支持,我們表示感謝~~以下是對該用戶的實例分享整理。-------------------------------------

java代碼生成器 快速開發平臺 開發 外包項目利器 springmvc SSM後臺框架源碼

java 下拉聯動 頭像裁剪 圖片裁剪 springmvc A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節 B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶

QGIS(PYTHON3.5、QT5.7.1、QGIS3)系列開發環境

qgis c++ python 二次開發 QGIS(PYTHON3.5、QT5.7.1、QGIS3系列二次開發環境,所有環境以虛擬機方式提供,以便研究或直接使用。 具體包括:獨立應用二次開發環境(WINDOWS,LINUX);android二次開發;獨立應用PYTHON二次開發環境(WI

AE開發中幾個功能速成歸納(符號設計器、創建要素、圖形編輯、屬性表編輯、緩沖區分析)

文件夾路徑 及其 基本框架 option 開啟 rgs database ets remove /* * 實習課上講進階功能所用文檔,因為趕時間從網上抄抄改改,湊合能用,記錄一下以備個人後用。 * * --------------------------------

k3 wise 序時簿開發2

eid 響應 idt eventid ins mar .get ont rdp             這是系統自帶的一些按鈕的事件ID和名稱 300014 單據拆分後事件 300013 單據拆分前事件 300012 單據合並後事件

Web報表工具FineReport開發JS之字符串

報表 獲取字符串 網頁 簡介 popu 能夠 int() 例如 位置 在報表開發過程中,有些需求可能無法通過現有的功能來實現。須要開發者二次開發,以FineReport為例。能夠使用網頁腳本、API接口等進行深入的開發與控制。考慮到JS腳本開發的使用較多。這裏先先簡介怎

結合Django+celery開發定時周期任務

由於 抓取 而是 文檔 code 機會 編輯 越來越大 內存泄漏 需求: 前端時間由於開發新上線一大批系統,上完之後沒有配套的報表系統、監控,於是乎開發、測試、產品、運營、業務部、財務等等各個部門就跟那饑渴的餓狼一樣需要 各種各樣的系統數據滿足他們。剛開