《PX4源碼開發(fā)人員文檔(一)——軟件架構》由會員分享,可在線閱讀,更多相關《PX4源碼開發(fā)人員文檔(一)——軟件架構(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、PX4源碼開發(fā)人員文檔(一)
軟件架構
軟件架構
PX4在廣播消息網(wǎng)絡內,按照一組節(jié)點
(nodes )的形式進行組織,網(wǎng)絡之間使用像 如“姿態(tài)”和“位置”之類的語義通道來傳遞系統(tǒng) 狀態(tài)。軟件的堆棧結構主要分為四層:
.應用程序接口:提供給app開發(fā)人員,使開
發(fā)人員可以使用ROS或者DroneAPI。這 一接口設計盡可能簡潔和扁平,并盡量多的 隱藏復雜性。
?應用框架:這是一組核心缺省應用程序(節(jié)
點),運行核心的飛行控制。
?函數(shù)庫:這一層包括針對機器核心操作的所 有系統(tǒng)函數(shù)庫和功能 通信、UAVCAN和故障安全(failsafe)系 統(tǒng)。
操作系統(tǒng):
最后一層,
2、
提供硬件驅動、
網(wǎng)絡
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
內部進程通信(Inter Pr
4、ocesscommunication, IPC)
PX4平臺的封裝提供了跨平臺的無鎖發(fā)布?訂
閱模式(publish-subscribe pattern)對象請求
處理器。取決于平臺/操作系統(tǒng),完成這個的后 端可能是uORB,或者Linux上的ROS / DDS
(data delivery service)0封裝可擴展,也可作
為消息系統(tǒng)提供支持,比如0MQ o所有這些后 端的共同特點是,它們都允許發(fā)送數(shù)據(jù)到一個像 如“位置”這樣的語義訂閱主題(topic),并使 多個接收器跨進程的收到這一數(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)
安全和保護模型 飛行核心與主要應用級處理過程隔離,以確保獨 立于高層級系統(tǒng)狀態(tài)的機器核心操作,保持穩(wěn) 定。
PX4應用程序框架
PX4應用程序
6、框架在所有平臺上代碼兼容,(比
如 Pixhawk / NuttX,又比如,SnapDragon /
Linux),獨立并將中間設備作為傳輸層。
publisher
publish。
subscriber
subscri be()
Object Request Broker
節(jié)點句柄(Node Handle)
節(jié)點句柄是每一個連接到中間設備的發(fā)布器
(publisher)或者訂閱器(subscriber)的核 心數(shù)據(jù)結構(一個節(jié)點可以同時是發(fā)布器和訂閱 器)。一個節(jié)點是一個邏輯單元,每一個進程都 可以有多于一個的節(jié)點(雖然這并不是典型的形 式)。
1. px4::Nod
7、eHandle n();
數(shù)據(jù)結構
對于所有相關的中間設備實現(xiàn),PX4根據(jù)儲存在 “msg”中的定義文件自動生成據(jù)結構。
發(fā)布(publication)
通過使用節(jié)點句柄通告(advertise)訂閱主題
(topic)來創(chuàng)建一個新的發(fā)布(publication)。
注意這個模板,
是訂閱主題的數(shù)據(jù)結構。
L px4::Publisher* rc_channels_pub = n.advertise()
從這個指向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) 通過訂閱一個訂閱主題創(chuàng)建一個新的發(fā)布。注意 模板,是訂閱主題的數(shù)據(jù)結構。使用訂閱共有三
個選擇:
1.
使用訂閱主題的句柄,進行手動復制操
作。
2. 作為函數(shù)的回調(callback),在訂閱
主題更新時,函數(shù)被調用。
3.
9、作為類方法的回調(相當于函數(shù),但是
是C++類型的)
單純訂閱
除非手動調用復制方法,否則數(shù)據(jù)不會被復制。
L unsigned min_interval =500;
2. _sub_rc_chan = _n.subscribe(min_interval);
函數(shù)回調
每次訂閱主題更新,則
rcchannelscallbackfunction被調用。
]view plaincopy
1. unsigned min_interval =500;
2. _n.subscribe(rc_channe
10、ls_callback_function> min_interval);
類方法回調
相當于前面函數(shù)的例子。
_n.subscribe(&SubscriberExample:crc-channels-callback, this ,min_interval);
混合系統(tǒng)
為了解決更高級別的挑戰(zhàn),比如基于視覺的避障 或者復雜控制問題,一個運行嵌入式Linux的伴 隨計算機將非常有用。
LINUX COMPANION
DEEPLY EMBEDDED
集成ROS
PX4可以通過兩種不同的API與ROS整合到一 起:或者自然地將每一個應用作為R
11、OS節(jié)點, 或者通過mavros在嵌入式自駕儀上唯一地運 行
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是一個高級應用程序接口,類似于一 個為遠程過程調用(RPC)提供語言綁定的函數(shù) 庫。從本質上講,它是面向告訴無人機去哪里或 做什么,而不是核心的機器人通訊/API的一部 分。