你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于RT-Thread的开源飞控StarryPilot

[复制链接]
fillmoreand 发布时间:2018-12-10 16:36
背景描述

近年来无人机应用市场日趋火热,无人机开始被应用在多个领域之中,比如航拍,植保,运输,安防等。随着应用场景的增加,对于无人机的大脑一飞控,的性能和功能要求也变得越来越高。国内具有一大批优质的无人机企业,如DJI,零度,亿航,极飞等。可是这些企业的飞控系统并不开源,而开源飞控市场却基本被国外所垄断,比如APM, PX4, Autoquad等,国内目前还没有一款开源飞控可以与之抗衡,在国际上也没有令人熟知的“国产”开源飞控。正是基于开发出一款世界知名的中国的开源飞控,我从2016年开始了StarryPilot这个项目。飞控的设计理念是一款轻量,功能强大的飞控,主要面向科研和无人机行业应用,使得无人机开发技术更加普及,也更容易将无人机技术应用到各个行业。

开源飞控1.jpg ; U7 j. m( a' S  r  L; O6 g

无人机整机

开源飞控2 pixhawk.jpg
8 e' ~2 Y( A6 h) v+ T

Pixhawk

开源飞控3 室外定高飞行.jpg 3 k3 p6 Y$ H+ J- m- {

室外定高飞行

fang'zheng开源飞控4 Gazebo HITL (硬件在环)仿真.jpg % \5 w& W' z+ D% Y) D8 \  p

Gazebo HITL(硬件在环)仿真

开源飞控5 Mshshell.jpg % S+ x/ Z3 E3 f, |2 n  H3 \; p0 H

Msh shell系统

开发环境
  • 主控:STM32F427 + STM32F100(从控制器)
  • 编译环境: Keil MDK5.23
  • RT-Thread版本: RTT-2.1.0
    , h% P/ O  w! e% N6 e9 U2 [' K# |
硬件设计

硬件采用国外开源的自驾仪Pixhawk(http://pixhawk.org/modules/pixhawk), 如下图所示。Pixhawk也是目前世界上应用最广,支持的飞控系统最多的开源飞控硬件。

开源飞控6.jpg
" |1 |8 t4 \6 C  ^

其主要性能参数如下:
  • 168MHz / 256 MIPS Cortex M4F
  • 14路 PWM/伺服 输出
  • 外扩总线接口 (I2C,CAN,UART)
  • 冗余电源输入
  • 外部安全开关
  • 多色LED指示灯
  • 外置microSD卡槽

    5 Q  o; Z  n% G5 D. Z5 ^
传感器:
  • ST Micro L3GD20 16位陀螺仪
  • ST Micro LSM303D 16位加速度计/磁力计
  • Invensense MPU 6000 三轴加速度计/陀螺仪
  • MEAS MS5611 气压计
    $ i+ @6 n( F+ d( O
接口:
  • 5x UART, 2x CAN, I2C, SPI
  • DSM/DSM2/DSM-X 卫星兼容输入
  • PPWM, S-BUS
  • 3.3 和 6.6V ADC输入
  • microUSB

    + U, x, d2 n; k% J0 d7 V

整个系统除了Pixhawk之外,还有一些外接的电子设备,如无刷电机,GPS,电调,数传,RC接收机,Lidar-Lite激光雷达等。整体的系统框架图如下图所示:

开源飞控7.jpg   h- Q) F8 X) l3 R- ^

软件设计

软件采用分层结构设计,如下图所示,从底层到上层分别是Driver层,RTOS(RTT + Fatfs),HAL硬件虚拟层,Framework层和应用层。

开源飞控8.jpg
" ~2 ]1 f8 @2 o; l. {

一、Driver层

Driver层实现了Pixhawk板载的所有硬件设备的驱动,如传感器设备(陀螺仪,加速度计,磁力计,气压计等),总线设备(UART, I2C, SPI等),USB,电机驱动,SD卡驱动,GPS驱动,LED灯以及一些板载设备的驱动。各个驱动以Device的形式向RTT进行注册,并且提供各自的init(), read(), write, ioctrl()函数供上层调用。这里仅以hmc5883磁力计的驱动举例说明驱动程序的一般设计步骤。

- 设备初始化函数5 |( d$ k% E$ @) y$ ?/ q& n

如下为hmc5883的初始化函数。首先对设备的功能函数进行函数指针赋值,这里定义了init(), read()和ioctrl()三个函数。然后向RTT注册名为hmc5883的驱动设备,上层可以通过查找设备名的方式来获取该驱动设备。接下来就是给hmc5883设置对应的总线设备。这里 hmc5883使用的是i2c通信,所以初始化中会为其查找对应的i2c设备。

开源飞控9.jpg 8 N  @* Q% F1 e; C2 O

- init()函数

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

开源飞控10.jpg - v5 r: F. e+ N% Q. }

- read()函数
9 Z* H$ V& T" u9 y+ Q

read()函数实现设备数据读取的功能,如原始磁场数据和标定后的磁场数据读取。

开源飞控11.jpg
: H4 r9 C3 t% p

- ioctrl()函数

Ioctrl()函数主要实现一些设备的配置功能,如设置测量磁场的范围,采样频率等。

开源飞控12.png 5 j5 y2 x( r& b: Z+ H

二、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 )

# k4 f* a' Q& G( b0 V

项目特色
  • 使用RT-Thread嵌入式操作系统, Fatfs文件系统,完整的系统功能支持(如跨进程通信,文件管理,参数系统等)
  • 基于Pixhawk硬件平台开发,完美支持Pixhawk硬件
  • ADRC控制和PID(串级)控制
  • 支持Mavlink协议(QGC地面站)
  • 支持Gazebo硬件在环(HITL)仿真
  • Msh指令系统,提供丰富以及可扩展的系统指令
  • Log日志系统,方便抓取飞行日志信息,并提供相应的日志查看工具。
  • 基于最小二乘法的最优椭球拟合校准算法(可校准零偏误差,缩放误差,非正交误差),可用于磁力计和加速度计的校准

    ; H9 R6 ]) e& S0 O9 ~

软件代码: http://github.com/JcZou/StarryPilot

: I- c: \/ C5 w* ~; x) m8 x9 E9 B1 z

% N- @+ Q" j) ~* d5 y
0 f( X$ Z/ W. g5 i2 O& t/ H& j
收藏 6 评论8 发布时间:2018-12-10 16:36

举报

8个回答
andey 回答时间:2018-12-11 10:41:02
提示: 作者被禁止或删除 内容自动屏蔽
STMWoodData 回答时间:2018-12-11 11:41:31
提示: 作者被禁止或删除 内容自动屏蔽
andrewsss 回答时间:2018-12-11 14:27:21
收藏,厉害了
greedyhao 回答时间:2019-4-23 22:40:50
看了视频,很强啊,正好可以学习这份控制系统的框架
Kevin_G 回答时间:2019-4-28 18:16:45
已收藏
rtthread 回答时间:2019-5-7 15:49:45
(๑•̀ㅂ•́)و✧ 顶一下楼主
奔跑的蜗牛321 回答时间:2019-11-27 11:56:15
框图好模糊,有高清的嘛
" E- D% I' ?* w) q% R
fillmoreand 回答时间:2020-1-14 15:07:05
shmily53 发表于 2019-11-27 11:56
9 Q( f3 f! D6 d$ r- G  J- h  h框图好模糊,有高清的嘛
9 c" L0 |" j+ Q2 H
关注RTT公众号看吧,公众号ID:RTThread

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版