1. pixhawk 飛控學(xué)習(xí)一(系統(tǒng)概況)

PX4連線圖

1. 四旋翼無人機(jī)的組成

——通信鏈路

——客戶端地面站

——PPM編碼器:PPM編碼器接RC接口应闯,把接收機(jī)輸出的多個(gè)通道PWM信號(hào)編碼成PPM復(fù)合信號(hào)。

——GPS/羅盤

——飛控

——?jiǎng)恿ο到y(tǒng)



電調(diào)功能示意圖


pixhawk系統(tǒng)框圖

飛控系統(tǒng)主要由微控制器拨匆、傳感器、存儲(chǔ)模塊、驅(qū)動(dòng)模塊、外部接口構(gòu)成媳握。



pixhawk硬件總體方案

2. 四旋翼飛行原理

對(duì)四個(gè)電機(jī)轉(zhuǎn)速的控制可以產(chǎn)生飛機(jī)升力及姿態(tài)變化的力矩碱屁。

四旋翼在三維空間具有六個(gè)自由度磷脯,即分別沿三個(gè)坐標(biāo)軸作平移和旋轉(zhuǎn)運(yùn)動(dòng),但是只有四個(gè)電機(jī)作為輸入娩脾。更改其中一個(gè)電機(jī)的轉(zhuǎn)速將會(huì)導(dǎo)致兩個(gè)姿態(tài)的變化赵誓,因此四旋翼是一個(gè)欠驅(qū)動(dòng)系統(tǒng)。

四旋翼的基本運(yùn)動(dòng)可歸納為以下幾種基本的運(yùn)動(dòng)模式柿赊。

2.1 垂直運(yùn)動(dòng): 垂直方向主要有垂直升俩功、垂直降、懸停三個(gè)狀態(tài)碰声。

2.2 俯仰運(yùn)動(dòng):兩個(gè)槳速度增加诡蜓,兩個(gè)槳速度減小,最終導(dǎo)致Y軸上產(chǎn)生扭矩胰挑。

2.3 橫滾運(yùn)動(dòng):兩個(gè)槳速度增加蔓罚,兩個(gè)槳速度減小,最終導(dǎo)致X軸上產(chǎn)生扭矩瞻颂。

2.4 偏航運(yùn)動(dòng):對(duì)角槳速度增加豺谈、另一對(duì)對(duì)角槳速度減小,最終導(dǎo)致在飛行軸方向產(chǎn)生扭矩贡这。

3. 四旋翼軟件開發(fā)平臺(tái)


PX4軟件總體方案


飛行控制棧:主要完成飛控各項(xiàng)功能的實(shí)現(xiàn)茬末。

中間件(UORB):完成系統(tǒng)各個(gè)部分之間的通信工作。

實(shí)時(shí)操作系統(tǒng)(nuttx):操作系統(tǒng)作為系統(tǒng)運(yùn)行的基礎(chǔ)軟件平臺(tái)盖矫,提供任務(wù)調(diào)度和文件操作功能丽惭,與底層驅(qū)動(dòng)層相連接击奶,降低系統(tǒng)的耦合度,提高系統(tǒng)平臺(tái)可移植性责掏。底層驅(qū)動(dòng)是直接和硬件打交道的正歼,主要完成具體硬件平臺(tái)的控制功能。

PX4飛控系統(tǒng)是由一系列節(jié)點(diǎn)組織的拷橘,這些節(jié)點(diǎn)在一個(gè)廣播通訊網(wǎng)絡(luò)中使用像“姿態(tài)” 或“位置”這樣的語義通道來交流系統(tǒng)目前的狀態(tài)局义。

4. 多旋翼飛行器進(jìn)一步思考

——多旋翼飛行器在空中飛行的時(shí)候,是通過調(diào)自己的“姿態(tài)”來產(chǎn)生某個(gè)方向的推力的冗疮。

——為了能夠調(diào)整自己的姿態(tài)萄唇,就必須有辦法測(cè)量自己的姿態(tài)。姿態(tài)用三個(gè)角度表示术幔,因此也是三維的另萤。

——與三維位置、三維角度相對(duì)應(yīng)的是三維速度诅挑、三維加速度和三維角速度四敞,十五個(gè)需要測(cè)量的狀態(tài)。

——三軸數(shù)字羅盤用于確認(rèn)航向拔妥,氣壓計(jì)用于測(cè)量高度忿危,GPS用來測(cè)量飛機(jī)的絕對(duì)位置,陀螺儀用于測(cè)量旋轉(zhuǎn)速度没龙。

5. 飛控軟件系統(tǒng)


系統(tǒng)頂層的任務(wù)管理框圖

——每一個(gè)框圖都是一個(gè)單獨(dú)的模塊铺厨,以代碼的形式自我包含、依賴并運(yùn)行硬纤。

——每一個(gè)箭頭都是一種通過UORB進(jìn)行發(fā)布/訂閱調(diào)用的連接解滓。

——控制器/混控都是針對(duì)一種特殊的機(jī)型而言,需要適配機(jī)型筝家。但是頂層任務(wù)管理模塊如導(dǎo)航等是可以在不同平臺(tái)共享的洼裤。


6. 地面站通信架構(gòu)


地面站通信架構(gòu)

——commander制導(dǎo):用于接收地面站的一般命令,例如解鎖

——navigator導(dǎo)航:接受任務(wù)并將其轉(zhuǎn)為底層導(dǎo)航的原始數(shù)據(jù)溪王。

——mavlink應(yīng)用:用于接受MAVLink數(shù)據(jù)包并將其轉(zhuǎn)換為板載uORB數(shù)據(jù)結(jié)構(gòu)腮鞍。

7. NUTTX實(shí)時(shí)操作系統(tǒng)


主處理器的軟件設(shè)計(jì)

? ? ? ? NuttX 具有一系列優(yōu)秀的品質(zhì),其具有標(biāo)準(zhǔn)兼容的特性在扰,進(jìn)行核心任務(wù)管理缕减,采用模塊化設(shè)計(jì),完全可搶占芒珠,天然可擴(kuò)展桥狡,高度可配置。同時(shí)NuttX 容易擴(kuò)展到新的處理器架構(gòu)、SoC 架構(gòu)或板級(jí)架構(gòu)裹芝,可以構(gòu)建為開放的部逮、平面的嵌入式RTOS ,或單獨(dú)構(gòu)建為系統(tǒng)調(diào)用接口的微內(nèi)核嫂易,NuttX 支持類POSIX/ANSI 的任務(wù)控制兄朋、命名消息隊(duì)列、計(jì)數(shù)信號(hào)量怜械、時(shí)鐘/定時(shí)器颅和、信號(hào)、pthread 缕允、環(huán)境變量峡扩、文件系統(tǒng),支持ROMFS文件系統(tǒng)障本,確保能夠?qū)崟r(shí)的教届、確定性的支持優(yōu)先級(jí)繼承。并且NuttX 是在BSD 許可證下發(fā)布的驾霜,適合于進(jìn)行二次開發(fā)案训。

? ? ? ? NuttX 是一個(gè)flat addresss 的操作系統(tǒng),也就是說它不提供像Linux 那樣的進(jìn)程(processes) 粪糙。NuttX 只支持簡(jiǎn)單的運(yùn)行在同一地址空間的線程强霎。但是,它的程序模型使得task (任務(wù))與pthread (線程) 間有一定區(qū)別猜旬。

? ? ? ? ——tasks:有一定獨(dú)立性的線程

? ? ? ? ——pthreads:共享某些資源的線程脆栋。

PX4 有一個(gè)虛擬的文件系統(tǒng),被保存到2 到3 個(gè)不同的器件中:

1 ) 只讀文件系統(tǒng)(Read Only Memory File System, ROMFS) 洒擦,作用為保存啟動(dòng)腳本,這個(gè)文件系統(tǒng)保存在MCU(STM32) 的內(nèi)部Flash 中( 編譯時(shí)直接編譯到程序中了) 怕膛。這個(gè)文件被掛載在/etc 下熟嫩。

2 ) 可寫microSD 卡文件系統(tǒng)( 通常為FAT32 格式) 。作用是存儲(chǔ)log 文件褐捻,被掛載在/fs/microsd 下掸茅。

3 ) 可寫FRAM 文件系統(tǒng)( 被映射到FRAM 中的單個(gè)文件) , 掛載在/fs/mtd params 和/fs/mtd waypoints( 這個(gè)都在Flash 中) 下柠逞。用來存儲(chǔ)參數(shù)(parameters)和航點(diǎn)(waypoints) 昧狮。



PX4軟件架構(gòu)


PX4 IO 底層設(shè)計(jì)

8. PX4中間件

PX4 中間件運(yùn)行于操作系統(tǒng)之上,主要由內(nèi)置傳感器的驅(qū)動(dòng)和一個(gè)基于發(fā)布-訂閱( publish-subscribe ) 的中間件uORB ( Micro Object Request Broker, 微對(duì)象請(qǐng)求代理器) 組成板壮,其中uORB 用于將這些傳感器與飛行控制運(yùn)行的應(yīng)用程序進(jìn)行通訊連接逗鸣。

使用發(fā)布-訂閱計(jì)劃意味著:

? 系統(tǒng)是響應(yīng)式的,即當(dāng)有新的有效數(shù)據(jù)時(shí)系統(tǒng)能夠立即更新

? 系統(tǒng)是完全并行運(yùn)行的

? 系統(tǒng)組件能夠在線程安全的方式下從任何地方使用數(shù)據(jù)


uORB 是Pixhwak 系統(tǒng)中非常重要的且關(guān)鍵的一個(gè)模塊,它肩負(fù)了整個(gè)系統(tǒng)的數(shù)據(jù)傳輸任務(wù)撒璧,所有的傳感器數(shù)據(jù)透葛、GPS 、PPM 信號(hào)等都要從芯片獲取后通過uORB 進(jìn)行傳輸?shù)礁鱾€(gè)模塊進(jìn)行計(jì)算處理卿樱,是一種用于進(jìn)程間進(jìn)行異步發(fā)布和訂閱的消息機(jī)制API僚害。

———UORB架構(gòu)概述:

? ? ? ? uORB 實(shí)際是一套跨進(jìn)程的IPC(Inter-Process Communication, 進(jìn)程間通信) 通訊模塊,就是多個(gè)進(jìn)程打開同一個(gè)設(shè)備文件繁调,進(jìn)程間通過此文件節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互和共享萨蚕。在Pixhawk 中,所有的功能被獨(dú)立以進(jìn)程模塊為單位行實(shí)現(xiàn)并工作蹄胰。而進(jìn)程間的數(shù)據(jù)交互就變得尤為重要门岔,必須要能夠符合實(shí)時(shí)有序的特點(diǎn)。

? ? ? ? Pixhawk 使用了NuttX 實(shí)時(shí)ARM 系統(tǒng)烤送,而uORB 對(duì)于NuttX 而言寒随,它僅僅是一個(gè)普通的文件設(shè)備對(duì)象,這個(gè)設(shè)備支持Open 帮坚、Close 妻往、Read 、Write 试和、Ioctl 以及Poll 機(jī)制讯泣。通過這些接口的實(shí)現(xiàn),uORB 提供了一套“點(diǎn)對(duì)多”的跨進(jìn)程廣播通訊機(jī)制阅悍,“點(diǎn)”指的是通訊消息的“源”好渠,“多”指的是一個(gè)源可以有多個(gè)用戶來接收、處理节视。而“源”與“用戶”的關(guān)系在于拳锚,“源”不需要去考慮用戶是否可以收到某條被廣播的消息或什么時(shí)候收到這條消息。它只需要單純的把要廣播的數(shù)據(jù)推送到uORB 的消息“總線”上寻行。對(duì)于用戶而言霍掺,“源”推送了多少次的消息也不重要,重要的是取回最新的這條消息拌蜘。

———UORB的系統(tǒng)實(shí)現(xiàn):

? ? ? ? uORB 的實(shí)現(xiàn)位于固件源碼的Firmware/src/modules/uORB/uORB 目錄下杆烁。它通過重載CDev 基類來組織一個(gè)uORB 的設(shè)備實(shí)例。并且完成Read/Write 等功能的重載简卧。

? ? ? ? uORB 的入口點(diǎn)是uorb main 函數(shù)兔魂,在這里它檢查uORB 的啟動(dòng)參數(shù)來完成對(duì)應(yīng)的功能,uORB 支持start/test/status 這3 條啟動(dòng)參數(shù)举娩,在Pixhawk 的rcS 啟動(dòng)腳本中析校,使用start 參數(shù)來進(jìn)行初始化构罗,其他2 個(gè)參數(shù)分別用來進(jìn)行uORB 功能的自檢和列出uORB 的當(dāng)前狀態(tài)。

? ? ? ? 在rcS 中使用start 參數(shù)啟動(dòng)uORB 后勺良,uORB 會(huì)創(chuàng)建并初始化它的設(shè)備實(shí)例绰播,其中的實(shí)現(xiàn)大部分都在CDev 基類完成。這個(gè)過程類似于Linux 設(shè)備驅(qū)動(dòng)中的Probe 函數(shù)尚困,或者Windows 內(nèi)核的DriverEntry 蠢箩,通過init 初始化調(diào)用完成設(shè)備的創(chuàng)建,節(jié)點(diǎn)注冊(cè)以及派遣例程的設(shè)置等事甜。

———UORB的使用:

? ? ? ? 進(jìn)程( process )/應(yīng)用程序(application) 間通信( 如將傳感器信息從傳感器app 傳送到姿態(tài)濾波app ) 是PX4 飛控程序結(jié)構(gòu)的核心部分谬泌。進(jìn)程( 在此處被稱作節(jié)點(diǎn)(node))通過命名的總線(buses ) 交換的消息稱之為主題(topic) 。在PX4 軟件系統(tǒng)中逻谦,一個(gè)主題只包含一種信息類型(即數(shù)據(jù)結(jié)構(gòu))掌实,比如飛行器姿態(tài)(vehicle attitude) 這個(gè)主題將一個(gè)包含姿態(tài)結(jié)構(gòu)體( 橫滾、俯仰邦马、偏航) 的信息傳送出去贱鼻。節(jié)點(diǎn)可以在主題上發(fā)布(publish) 一個(gè)信息( 即發(fā)送數(shù)據(jù)) ,也可以向一個(gè)主題訂閱(subscribe ) 信息( 即接收數(shù)據(jù)) 滋将。節(jié)點(diǎn)并不知道它們?cè)诟l通信邻悬。一個(gè)主題可以面向多個(gè)發(fā)布者(publishers) 和多個(gè)訂閱者(subscribers) 。這種方式可以避免死鎖問題随闽,在機(jī)器人中很常見父丰。為達(dá)到有效率,在一條總線中掘宪,永遠(yuǎn)只有一條信息被傳送蛾扇,沒有保持隊(duì)列之說,這也就是說新來的信息會(huì)覆蓋之前的信息魏滚,不存在有一串信息排隊(duì)的情況镀首。應(yīng)用層中操作基礎(chǔ)飛行的應(yīng)用之間都是隔離的,這樣提供了一種安保模式栏赴,以確蹦⒏基礎(chǔ)操作獨(dú)立的高級(jí)別系統(tǒng)狀態(tài)的穩(wěn)定性。在PX4 中须眷,飛控所有的功能被獨(dú)立以進(jìn)程模塊為單位進(jìn)行實(shí)現(xiàn)并工作。因此進(jìn)程間的數(shù)據(jù)交互就顯得尤為重要沟突,必須要能夠符合實(shí)時(shí)花颗、有序的特點(diǎn)。在PX4 中是使用uORB 來完成這項(xiàng)任務(wù)的:


PX4的應(yīng)用程序框架

9. PX4飛行控制棧


板載程序結(jié)構(gòu)圖

飛行控制棧是各種自主無人機(jī)的導(dǎo)航與制導(dǎo)惠拭、控制算法的集合扩劝,包括固定翼庸论、多旋翼以及垂直起降機(jī)型的控制器以及飛行器姿態(tài)和位置的估計(jì)算法。遵循BSD 協(xié)議棒呛,可實(shí)現(xiàn)多旋翼和固定翼完全自主的航路點(diǎn)飛行聂示。采用了一套通用的基礎(chǔ)代碼和通用的飛行管理代碼,提供了一種靈活的簇秒、結(jié)構(gòu)化的方法

飛行控制椨愫恚可分為如下四部分:

1. 決策導(dǎo)航部分:根據(jù)飛行器自身安全狀態(tài)和接收到的命令,決定工作于什么模式趋观,下一步該怎么做扛禽。

2. 位置姿態(tài)估計(jì)部分:根據(jù)傳感器得到的自身位置和姿態(tài)信息,此部分主要涉及相關(guān)算法皱坛。

3. 位置姿態(tài)控制部分:根據(jù)期望位置和姿態(tài)設(shè)計(jì)控制結(jié)構(gòu)编曼,盡可能快、穩(wěn)的達(dá)到期望位置和姿態(tài)剩辟。

4. 控制器輸出部分:混控輸出和執(zhí)行器掐场,PWM限幅。


姿態(tài)估計(jì)及控制的典型實(shí)現(xiàn)過程


PX4系統(tǒng)設(shè)計(jì)


PX4控制流程

要對(duì)一架四旋翼進(jìn)行控制贩猎,首先要知道四旋翼當(dāng)前的姿態(tài)與位置熊户,PX4用到了姿態(tài)解算與位置估計(jì)算法,在獲得了四旋翼當(dāng)前的姿態(tài)與位置之后就可以利用姿態(tài)控制算法與位置控制算法對(duì)飛行器進(jìn)行精確控制了融欧。其中還包括了混控輸出與導(dǎo)航控制敏弃,由此構(gòu)成了四旋翼無人機(jī)的基本控制思路。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末噪馏,一起剝皮案震驚了整個(gè)濱河市麦到,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欠肾,老刑警劉巖瓶颠,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異刺桃,居然都是意外死亡粹淋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門瑟慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桃移,“玉大人州丹,你說我怎么就攤上這事管削。” “怎么了电抚?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵进泼,是天一觀的道長(zhǎng)蔗衡。 經(jīng)常有香客問我纤虽,道長(zhǎng),這世上最難降的妖魔是什么绞惦? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任逼纸,我火速辦了婚禮,結(jié)果婚禮上济蝉,老公的妹妹穿的比我還像新娘杰刽。我一直安慰自己,他們只是感情好堆生,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布专缠。 她就那樣靜靜地躺著,像睡著了一般淑仆。 火紅的嫁衣襯著肌膚如雪涝婉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天蔗怠,我揣著相機(jī)與錄音墩弯,去河邊找鬼。 笑死寞射,一個(gè)胖子當(dāng)著我的面吹牛渔工,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桥温,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼引矩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了侵浸?” 一聲冷哼從身側(cè)響起旺韭,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掏觉,沒想到半個(gè)月后区端,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澳腹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年织盼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酱塔。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沥邻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羊娃,到底是詐尸還是另有隱情谋国,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布迁沫,位于F島的核電站芦瘾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏集畅。R本人自食惡果不足惜近弟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挺智。 院中可真熱鬧祷愉,春花似錦、人聲如沸赦颇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媒怯。三九已至订讼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扇苞,已是汗流浹背欺殿。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳖敷,地道東北人脖苏。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像定踱,于是被迫代替她去往敵國(guó)和親棍潘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容