搜索
查看: 3132|回复: 8

[分享] 基于RT-Thread的开源飞控StarryPilot

[复制链接]

该用户从未签到

12

主题

38

帖子

0

蝴蝶豆

中级会员

最后登录
2020-9-29
发表于 2018-12-10 16:36:50 | 显示全部楼层 |阅读模式
背景描述

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

开源飞控1.jpg

无人机整机

开源飞控2 pixhawk.jpg

Pixhawk

开源飞控3 室外定高飞行.jpg

室外定高飞行

fang'zheng开源飞控4 Gazebo HITL (硬件在环)仿真.jpg

Gazebo HITL(硬件在环)仿真

开源飞控5 Mshshell.jpg

Msh shell系统

开发环境
  • 主控:STM32F427 + STM32F100(从控制器)
  • 编译环境: Keil MDK5.23
  • RT-Thread版本: RTT-2.1.0

硬件设计

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

开源飞控6.jpg

其主要性能参数如下:
  • 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激光雷达等。整体的系统框架图如下图所示:

开源飞控7.jpg

软件设计

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

开源飞控8.jpg

一、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设备。

开源飞控9.jpg

- init()函数

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

开源飞控10.jpg

- read()函数

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

开源飞控11.jpg

- ioctrl()函数

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

开源飞控12.png

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

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




回复

使用道具 举报

该用户从未签到

37

主题

2167

帖子

32

蝴蝶豆

论坛元老

最后登录
2023-2-9
发表于 2018-12-11 10:41:02 | 显示全部楼层
赞  牛
回复 支持 反对

使用道具 举报

该用户从未签到

10

主题

1665

帖子

65

蝴蝶豆

论坛元老

最后登录
2021-5-10
发表于 2018-12-11 11:41:31 | 显示全部楼层
赞一个
回复

使用道具 举报

该用户从未签到

7

主题

212

帖子

16

蝴蝶豆

高级会员

最后登录
2019-9-21
发表于 2018-12-11 14:27:21 | 显示全部楼层
收藏,厉害了
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

6

帖子

0

蝴蝶豆

初级会员

最后登录
2020-6-17
发表于 2019-4-23 22:40:50 | 显示全部楼层
看了视频,很强啊,正好可以学习这份控制系统的框架
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

1029

帖子

133

蝴蝶豆

金牌会员

最后登录
2021-4-24
发表于 2019-4-28 18:16:45 | 显示全部楼层
已收藏
回复

使用道具 举报

该用户从未签到

8

主题

14

帖子

0

蝴蝶豆

初级会员

最后登录
2020-10-12
发表于 2019-5-7 15:49:45 | 显示全部楼层
(๑•̀ㅂ•́)و✧ 顶一下楼主
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

15

帖子

0

蝴蝶豆

中级会员

最后登录
2020-10-19
发表于 2019-11-27 11:56:15 | 显示全部楼层
框图好模糊,有高清的嘛
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

38

帖子

0

蝴蝶豆

中级会员

最后登录
2020-9-29
 楼主| 发表于 2020-1-14 15:07:05 | 显示全部楼层
shmily53 发表于 2019-11-27 11:56
框图好模糊,有高清的嘛

关注RTT公众号看吧,公众号ID:RTThread
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 15:03 , Processed in 1.181677 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表