《PX4源碼開發(fā)人員文檔(一)——軟件架構(gòu)》由會(huì)員分享,可在線閱讀,更多相關(guān)《PX4源碼開發(fā)人員文檔(一)——軟件架構(gòu)(10頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、PX4源碼開發(fā)人員文檔(一)
軟件架構(gòu)
軟件架構(gòu)
PX4在廣播消息網(wǎng)絡(luò)內(nèi),按照一組節(jié)點(diǎn)
(nodes )的形式進(jìn)行組織,網(wǎng)絡(luò)之間使用像 如“姿態(tài)”和“位置”之類的語義通道來傳遞系統(tǒng) 狀態(tài)。軟件的堆棧結(jié)構(gòu)主要分為四層:
.應(yīng)用程序接口:提供給app開發(fā)人員,使開
發(fā)人員可以使用ROS或者DroneAPI。這 一接口設(shè)計(jì)盡可能簡(jiǎn)潔和扁平,并盡量多的 隱藏復(fù)雜性。
?應(yīng)用框架:這是一組核心缺省應(yīng)用程序(節(jié)
點(diǎn)),運(yùn)行核心的飛行控制。
?函數(shù)庫(kù):這一層包括針對(duì)機(jī)器核心操作的所 有系統(tǒng)函數(shù)庫(kù)和功能 通信、UAVCAN和故障安全(failsafe)系 統(tǒng)。
操作系統(tǒng):
最后一層,
2、
提供硬件驅(qū)動(dòng)、
網(wǎng)絡(luò)
Application API (0MQ/ROS)
Surveys
Cargo
Follow-Me
SAR
1 Authentication - ROS or 0MQ pub/sub Broker
Application Framework
VI Odometry
Multicopter Ctrl.
[ VTOL Ctrl.]
MAVLInk Serial 1
State Estimation Fixed Wing Ctrl. Commander Navigator MAVROS
Libraries
Linux Kernel
3、
Camera Driver
Network
[ 4G/LTE 1
Storage
SDR Driver
I RTOS Kernel
pORB or MuORB pub/sub
UAVCAN Driver j Actuator Drivers
Failsafe System Sonsor Drivers
Estimation Ub
F MathLIbL j
E OpenCV Sj
xORB Wrapper
Control Lib 1
MAVLInk Lib
UAVCAN Lib
1 Mission Logic Lib
內(nèi)部進(jìn)程通信(Inter Pr
4、ocesscommunication, IPC)
PX4平臺(tái)的封裝提供了跨平臺(tái)的無鎖發(fā)布?訂
閱模式(publish-subscribe pattern)對(duì)象請(qǐng)求
處理器。取決于平臺(tái)/操作系統(tǒng),完成這個(gè)的后 端可能是uORB,或者Linux上的ROS / DDS
(data delivery service)0封裝可擴(kuò)展,也可作
為消息系統(tǒng)提供支持,比如0MQ o所有這些后 端的共同特點(diǎn)是,它們都允許發(fā)送數(shù)據(jù)到一個(gè)像 如“位置”這樣的語義訂閱主題(topic),并使 多個(gè)接收器跨進(jìn)程的收到這一數(shù)據(jù)。
IPC性能
發(fā)布(Publication)至[]訂閱(subscription)
5、
之間的延遲:
? uORB: 23 us @ 168 MHz STM32F4
? ROS: TBD
? ROS2/DDS:185 us @
1.6 GHz IntelPentium 4 and 2 GB RAM running Windows XP (details)
? ZeroMQ: 170 us @ 1.6 GHz IntelPentium 4 and 2 GB RAM running Windows XP (details)
安全和保護(hù)模型 飛行核心與主要應(yīng)用級(jí)處理過程隔離,以確保獨(dú) 立于高層級(jí)系統(tǒng)狀態(tài)的機(jī)器核心操作,保持穩(wěn) 定。
PX4應(yīng)用程序框架
PX4應(yīng)用程序
6、框架在所有平臺(tái)上代碼兼容,(比
如 Pixhawk / NuttX,又比如,SnapDragon /
Linux),獨(dú)立并將中間設(shè)備作為傳輸層。
publisher
publish。
subscriber
subscri be()
Object Request Broker
節(jié)點(diǎn)句柄(Node Handle)
節(jié)點(diǎn)句柄是每一個(gè)連接到中間設(shè)備的發(fā)布器
(publisher)或者訂閱器(subscriber)的核 心數(shù)據(jù)結(jié)構(gòu)(一個(gè)節(jié)點(diǎn)可以同時(shí)是發(fā)布器和訂閱 器)。一個(gè)節(jié)點(diǎn)是一個(gè)邏輯單元,每一個(gè)進(jìn)程都 可以有多于一個(gè)的節(jié)點(diǎn)(雖然這并不是典型的形 式)。
1. px4::Nod
7、eHandle n();
數(shù)據(jù)結(jié)構(gòu)
對(duì)于所有相關(guān)的中間設(shè)備實(shí)現(xiàn),PX4根據(jù)儲(chǔ)存在 “msg”中的定義文件自動(dòng)生成據(jù)結(jié)構(gòu)。
發(fā)布(publication)
通過使用節(jié)點(diǎn)句柄通告(advertise)訂閱主題
(topic)來創(chuàng)建一個(gè)新的發(fā)布(publication)。
注意這個(gè)模板,
是訂閱主題的數(shù)據(jù)結(jié)構(gòu)。
L px4::Publisher* rc_channels_pub = n.advertise()
從這個(gè)指向rc_channels_pub的句柄的指針, 可以用于發(fā)布數(shù)據(jù)
L
8、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) 通過訂閱一個(gè)訂閱主題創(chuàng)建一個(gè)新的發(fā)布。注意 模板,是訂閱主題的數(shù)據(jù)結(jié)構(gòu)。使用訂閱共有三
個(gè)選擇:
1.
使用訂閱主題的句柄,進(jìn)行手動(dòng)復(fù)制操
作。
2. 作為函數(shù)的回調(diào)(callback),在訂閱
主題更新時(shí),函數(shù)被調(diào)用。
3.
9、作為類方法的回調(diào)(相當(dāng)于函數(shù),但是
是C++類型的)
單純訂閱
除非手動(dòng)調(diào)用復(fù)制方法,否則數(shù)據(jù)不會(huì)被復(fù)制。
L unsigned min_interval =500;
2. _sub_rc_chan = _n.subscribe(min_interval);
函數(shù)回調(diào)
每次訂閱主題更新,則
rcchannelscallbackfunction被調(diào)用。
]view plaincopy
1. unsigned min_interval =500;
2. _n.subscribe(rc_channe
10、ls_callback_function> min_interval);
類方法回調(diào)
相當(dāng)于前面函數(shù)的例子。
_n.subscribe(&SubscriberExample:crc-channels-callback, this ,min_interval);
混合系統(tǒng)
為了解決更高級(jí)別的挑戰(zhàn),比如基于視覺的避障 或者復(fù)雜控制問題,一個(gè)運(yùn)行嵌入式Linux的伴 隨計(jì)算機(jī)將非常有用。
LINUX COMPANION
DEEPLY EMBEDDED
集成ROS
PX4可以通過兩種不同的API與ROS整合到一 起:或者自然地將每一個(gè)應(yīng)用作為R
11、OS節(jié)點(diǎn), 或者通過mavros在嵌入式自駕儀上唯一地運(yùn) 行
Linux Computer:
Odroid U3
Deeply Embedded: FMUv2 Board
ROS pub/sub bus
Simulation Environment
ROS
Logging
Fixed Wing
Atthude
Control
SITL
Flight
Simulator
DroneAPI
DroneAPI是一個(gè)高級(jí)應(yīng)用程序接口,類似于一 個(gè)為遠(yuǎn)程過程調(diào)用(RPC)提供語言綁定的函數(shù) 庫(kù)。從本質(zhì)上講,它是面向告訴無人機(jī)去哪里或 做什么,而不是核心的機(jī)器人通訊/API的一部 分。