中國(guó)福建網(wǎng)

當(dāng)前位置:中國(guó)福建網(wǎng) > 國(guó)內(nèi) > 正文

基于RT-Thread的開源飛控StarryPilot

作者: 編輯 來源:互聯(lián)網(wǎng) 發(fā)布時(shí)間:2018-07-23

┊文章閱讀:

本文為Echo(鄒佳池)參與RT-Thread應(yīng)用作品征集賽作品原創(chuàng)。只要你采用RT-Thread操作系統(tǒng)設(shè)計(jì)開發(fā),不限硬件(每人可提交作品數(shù)不限)就有機(jī)會(huì)獲得2000元現(xiàn)金大獎(jiǎng)哦!投稿:andychen@rt-thread.com

背景描述

近年來無人機(jī)應(yīng)用市場(chǎng)日趨火熱,無人機(jī)開始被應(yīng)用在多個(gè)領(lǐng)域之中,比如航拍,植保,運(yùn)輸,安防等。隨著應(yīng)用場(chǎng)景的增加,對(duì)于無人機(jī)的大腦一飛控,的性能和功能要求也變得越來越高。國(guó)內(nèi)具有一大批優(yōu)質(zhì)的無人機(jī)企業(yè),如DJI,零度,億航,極飛等??墒沁@些企業(yè)的飛控系統(tǒng)并不開源,而開源飛控市場(chǎng)卻基本被國(guó)外所壟斷,比如APM, PX4, Autoquad等,國(guó)內(nèi)目前還沒有一款開源飛控可以與之抗衡,在國(guó)際上也沒有令人熟知的“國(guó)產(chǎn)”開源飛控。

正是基于開發(fā)出一款世界知名的中國(guó)的開源飛控,我從2016年開始了StarryPilot這個(gè)項(xiàng)目。飛控的設(shè)計(jì)理念是一款輕量,功能強(qiáng)大的飛控,主要面向科研和無人機(jī)行業(yè)應(yīng)用,使得無人機(jī)開發(fā)技術(shù)更加普及,也更容易將無人機(jī)技術(shù)應(yīng)用到各個(gè)行業(yè)。

無人機(jī)整機(jī)

Pixhawk

室外定高飛行

Gazebo HITL(硬件在環(huán))仿真

Msh shell系統(tǒng)

開發(fā)環(huán)境

  • 主控:STM32F427 + STM32F100(從控制器)
  • 編譯環(huán)境: Keil MDK5.23
  • RT-Thread版本: RTT-2.1.0
硬件設(shè)計(jì)

硬件采用國(guó)外開源的自駕儀Pixhawk(https://pixhawk.org/modules/pixhawk), 如下圖所示。Pixhawk也是目前世界上應(yīng)用最廣,支持的飛控系統(tǒng)最多的開源飛控硬件。

其主要性能參數(shù)如下:

  • 168MHz / 256 MIPS Cortex M4F
  • 14路 PWM/伺服 輸出
  • 外擴(kuò)總線接口 (I2C,CAN,UART)
  • 冗余電源輸入
  • 外部安全開關(guān)
  • 多色LED指示燈
  • 外置microSD卡槽
傳感器:
  • ST Micro L3GD20 16位陀螺儀
  • ST Micro LSM303D 16位加速度計(jì)/磁力計(jì)
  • Invensense MPU 6000 三軸加速度計(jì)/陀螺儀
  • MEAS MS5611 氣壓計(jì)
接口:
  • 5x UART, 2x CAN, I2C, SPI
  • DSM/DSM2/DSM-X 衛(wèi)星兼容輸入
  • PPWM, S-BUS
  • 3.3 和 6.6V ADC輸入
  • microUSB

整個(gè)系統(tǒng)除了Pixhawk之外,還有一些外接的電子設(shè)備,如無刷電機(jī),GPS,電調(diào),數(shù)傳,RC接收機(jī),Lidar-Lite激光雷達(dá)等。整體的系統(tǒng)框架圖如下圖所示:

軟件設(shè)計(jì)

軟件采用分層結(jié)構(gòu)設(shè)計(jì),如下圖所示,從底層到上層分別是Driver層,RTOS(RTT + Fatfs),HAL硬件虛擬層,F(xiàn)ramework層和應(yīng)用層。

一、Driver層

Driver層實(shí)現(xiàn)了Pixhawk板載的所有硬件設(shè)備的驅(qū)動(dòng),如傳感器設(shè)備(陀螺儀,加速度計(jì),磁力計(jì),氣壓計(jì)等),總線設(shè)備(UART, I2C, SPI等),USB,電機(jī)驅(qū)動(dòng),SD卡驅(qū)動(dòng),GPS驅(qū)動(dòng),LED燈以及一些板載設(shè)備的驅(qū)動(dòng)。各個(gè)驅(qū)動(dòng)以Device的形式向RTT進(jìn)行注冊(cè),并且提供各自的init(), read(), write, ioctrl()函數(shù)供上層調(diào)用。這里僅以hmc5883磁力計(jì)的驅(qū)動(dòng)舉例說明驅(qū)動(dòng)程序的一般設(shè)計(jì)步驟。

- 設(shè)備初始化函數(shù)

如下為hmc5883的初始化函數(shù)。首先對(duì)設(shè)備的功能函數(shù)進(jìn)行函數(shù)指針賦值,這里定義了init(), read()和ioctrl()三個(gè)函數(shù)。然后向RTT注冊(cè)名為hmc5883的驅(qū)動(dòng)設(shè)備,上層可以通過查找設(shè)備名的方式來獲取該驅(qū)動(dòng)設(shè)備。接下來就是給hmc5883設(shè)置對(duì)應(yīng)的總線設(shè)備。這里 hmc5883使用的是i2c通信,所以初始化中會(huì)為其查找對(duì)應(yīng)的i2c設(shè)備。

- init()函數(shù)

Init()函數(shù)主要做一些芯片的初始化的工作,包括寄存器配置等。

- read()函數(shù)

read()函數(shù)實(shí)現(xiàn)設(shè)備數(shù)據(jù)讀取的功能,如原始磁場(chǎng)數(shù)據(jù)和標(biāo)定后的磁場(chǎng)數(shù)據(jù)讀取。

- ioctrl()函數(shù)

Ioctrl()函數(shù)主要實(shí)現(xiàn)一些設(shè)備的配置功能,如設(shè)置測(cè)量磁場(chǎng)的范圍,采樣頻率等。

二、RTOS層

RTOS采用RT-Thread嵌入式操作系統(tǒng),它的功能強(qiáng)大,除了提供基本的線程調(diào)度,內(nèi)存管理,同步等基本功能外,還提供了如msh的shell系統(tǒng),device設(shè)備驅(qū)動(dòng)系統(tǒng),使得系統(tǒng)的整體架構(gòu)更加清晰,功能也更加完善。

三、HAL層

HAL層主要是對(duì)底層驅(qū)動(dòng)設(shè)備進(jìn)行進(jìn)一步封裝,將具體的設(shè)備抽象為一個(gè)類別的設(shè)備。以串口設(shè)備為例,不同的硬件平臺(tái),串口的底層驅(qū)動(dòng)會(huì)有差異,通過HAL層,將串口設(shè)備封裝為統(tǒng)一的接口,這樣當(dāng)系統(tǒng)移植到不同平臺(tái)的時(shí)候,上層代碼不需要做任何改變,而只需要將對(duì)應(yīng)底層驅(qū)動(dòng)進(jìn)行簡(jiǎn)單替換就行。這將大大降低系統(tǒng)移植的復(fù)雜程度。

四、Framework層

Framework層實(shí)現(xiàn)了飛控設(shè)備的主要功能,如姿態(tài)估計(jì),位置估計(jì),控制器,通信,日志管理等等??梢哉f,這一層是整個(gè)系統(tǒng)的核心,大部分的功能模塊都在這一層來實(shí)現(xiàn)。

五、Application層

應(yīng)用層是將飛控的各個(gè)大的功能進(jìn)行分割,變成一個(gè)個(gè)小的功能。每個(gè)功能在系統(tǒng)中為一個(gè)單獨(dú)的線程,每個(gè)線程負(fù)責(zé)執(zhí)行自己的任務(wù),并且跟其他線程通過IPC進(jìn)行通信。Vehicle線程具有最高優(yōu)先級(jí),執(zhí)行周期為1ms。其負(fù)責(zé)實(shí)現(xiàn)無人機(jī)飛行相關(guān)的所有功能,如狀態(tài)估計(jì)和電機(jī)的控制。

啟動(dòng)流程

下面介紹一下系統(tǒng)的啟動(dòng)流程. 啟動(dòng)流程沿用RTT提供的原始結(jié)構(gòu)。首先在rtthread_startup()函數(shù)中進(jìn)行RTOS的一些初始化,然后進(jìn)入到rt_application_init()中。 在這個(gè)函數(shù)中會(huì)建立一個(gè)init的初始線程,在這個(gè)線程中,會(huì)對(duì)飛控各個(gè)模塊進(jìn)行初始化的工作。在初始化完成之后,會(huì)根據(jù)Application層的定義,建立各個(gè)線程,并喚醒,最后將init線程自己給銷毀掉,避免不必要的內(nèi)存消耗。

演示視頻

控制算法和飛行效果測(cè)試( ADRC vs PID )

項(xiàng)目特色

  • 使用RT-Thread嵌入式操作系統(tǒng), Fatfs文件系統(tǒng),完整的系統(tǒng)功能支持(如跨進(jìn)程通信,文件管理,參數(shù)系統(tǒng)等)
  • 基于Pixhawk硬件平臺(tái)開發(fā),完美支持Pixhawk硬件
  • ADRC控制和PID(串級(jí))控制
  • 支持Mavlink協(xié)議(QGC地面站)
  • 支持Gazebo硬件在環(huán)(HITL)仿真
  • Msh指令系統(tǒng),提供豐富以及可擴(kuò)展的系統(tǒng)指令
  • Log日志系統(tǒng),方便抓取飛行日志信息,并提供相應(yīng)的日志查看工具。
  • 基于最小二乘法的最優(yōu)橢球擬合校準(zhǔn)算法(可校準(zhǔn)零偏誤差,縮放誤差,非正交誤差),可用于磁力計(jì)和加速度計(jì)的校準(zhǔn)

軟件代碼:

https://github.com/JcZou/StarryPilot

  • 新浪新聞
  • 百度搜索
  • 搜狗搜索
  • 京東商城
  • 企業(yè)慧聰
  • 新浪科技
  • 科技訊
  • 鵪鶉蛋價(jià)格
  • 唯美圖片