基於RT-Thread的開源飛控StarryPilot


背景描述

近年來無人機應用市場日趨火熱,無人機開始被應用在多個領域之中,比如航拍,植保,運輸,安防等。隨着應用場景的增加,對於無人機的大腦一飛控,的性能和功能要求也變得越來越高。國內具有一大批優質的無人機企業,如DJI,零度,億航,極飛等。可是這些企業的飛控系統並不開源,而開源飛控市場卻基本被國外所壟斷,比如APM, PX4, Autoquad等,國內目前還沒有一款開源飛控可以與之抗衡,在國際上也沒有令人熟知的“國產”開源飛控。 正是基於開發出一款世界知名的中國的開源飛控,我從2016年開始了StarryPilot這個項目。飛控的設計理念是一款輕量,功能強大的飛控,主要面向科研和無人機行業應用,使得無人機開發技術更加普及,也更容易將無人機技術應用到各個行業。

無人機整機

Pixhawk

 室外定高飛行

 Gazebo HITL(硬件在環)仿真

Msh shell系統

開發環境

  • 主控:STM32F427 + STM32F100(從控制器)

  • 編譯環境: Keil MDK5.23

  • RT-Thread版本: RTT-2.1.0

硬件設計

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

其主要性能參數如下:

  • 168MHz / 256 MIPS Cortex M4F

  • 14路 PWM/伺服 輸出

  • 外擴總線接口 (I2C,CAN,UART)

  • 冗余電源輸入

  • 外部安全開關

  • 多色LED指示燈

  • 外置microSD卡槽

傳感器:

  • ST Micro L3GD20 16位陀螺儀

  • ST Micro LSM303D 16位加速度計/磁力計

  • Invensense MPU 6000 三軸加速度計/陀螺儀

  • MEAS MS5611 氣壓計

接口:

  • 5x UART, 2x CAN, I2C, SPI

  • DSM/DSM2/DSM-X 衛星兼容輸入

  • PPWM, S-BUS

  • 3.3 和 6.6V ADC輸入

  • microUSB

整個系統除了Pixhawk之外,還有一些外接的電子設備,如無刷電機,GPS,電調,數傳,RC接收機,Lidar-Lite激光雷達等。整體的系統框架圖如下圖所示:

軟件設計

軟件采用分層結構設計,如下圖所示,從底層到上層分別是Driver層,RTOS(RTT + Fatfs),HAL硬件虛擬層,Framework層和應用層。

一、Driver層

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

- 設備初始化函數

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

- init()函數

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

- read()函數

read()函數實現設備數據讀取的功能,如原始磁場數據和標定后的磁場數據讀取。

- ioctrl()函數

Ioctrl()函數主要實現一些設備的配置功能,如設置測量磁場的范圍,采樣頻率等。

二、RTOS層

RTOS采用RT-Thread嵌入式操作系統,它的功能強大,除了提供基本的線程調度,內存管理,同步等基本功能外,還提供了如msh的shell系統,device設備驅動系統,使得系統的整體架構更加清晰,功能也更加完善。

三、HAL層

HAL層主要是對底層驅動設備進行進一步封裝,將具體的設備抽象為一個類別的設備。以串口設備為例,不同的硬件平台,串口的底層驅動會有差異,通過HAL層,將串口設備封裝為統一的接口,這樣當系統移植到不同平台的時候,上層代碼不需要做任何改變,而只需要將對應底層驅動進行簡單替換就行。這將大大降低系統移植的復雜程度。

四、Framework層

Framework層實現了飛控設備的主要功能,如姿態估計,位置估計,控制器,通信,日志管理等等。可以說,這一層是整個系統的核心,大部分的功能模塊都在這一層來實現。

五、Application層

應用層是將飛控的各個大的功能進行分割,變成一個個小的功能。每個功能在系統中為一個單獨的線程,每個線程負責執行自己的任務,並且跟其他線程通過IPC進行通信。Vehicle線程具有最高優先級,執行周期為1ms。其負責實現無人機飛行相關的所有功能,如狀態估計和電機的控制。

啟動流程

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

演示視頻

控制算法和飛行效果測試( ADRC vs PID )  暫時無法上傳 可以關注 “RT-Thread物聯網操作系統”公眾號瀏覽

 

項目特色

  • 使用RT-Thread嵌入式操作系統, Fatfs文件系統,完整的系統功能支持(如跨進程通信,文件管理,參數系統等)

  • 基於Pixhawk硬件平台開發,完美支持Pixhawk硬件

  • ADRC控制和PID(串級)控制

  • 支持Mavlink協議(QGC地面站)

  • 支持Gazebo硬件在環(HITL)仿真

  • Msh指令系統,提供豐富以及可擴展的系統指令

  • Log日志系統,方便抓取飛行日志信息,並提供相應的日志查看工具。

  • 基於最小二乘法的最優橢球擬合校准算法(可校准零偏誤差,縮放誤差,非正交誤差),可用於磁力計和加速度計的校准

軟件代碼: https://github.com/JcZou/StarryPilot


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM