背景描述

近年来无人机应用市场日趋火热,无人机开始被应用在多个领域之中,比如航拍,植保,运输,安防等。随着应用场景的增加,对于无人机的大脑一飞控,的性能和功能要求也变得越来越高。国内具有一大批优质的无人机企业,如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

基于RT-Thread的开源飞控StarryPilot的更多相关文章

  1. RT Thread 通过ENV来配置SFUD,操作SPI Flash

    本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...

  2. NodeBB – 基于 Node.js 的开源论坛系统

    NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...

  3. 基于存储过程的MVC开源分页控件

    基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...

  4. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

  5. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  6. TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具

    怀着鸡动的心情跟大家介绍一款国产开源运维软件TriAquae,轻松帮你搞定大部分运维工作!TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具,可以允许用户通过一台控制端管理上千 ...

  7. 微信小程序--简约风博客小程序(基于云开发 - 全开源)

    微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...

  8. CountBoard 是一个基于Tkinter简单的,开源的桌面日程倒计时应用

    CountBoard 是一个基于Tkinter简单的,开源的桌面日程倒计时应用. 项目地址 https://github.com/Gaoyongxian666/CountBoard 基本功能 置顶功能 ...

  9. 基于tp5的免费开源企业官网系统

    基于tp5的免费开源企业官网系统 基本功能: 自定义菜单,单页 添加新闻文章前台展示 前台页面自动适配电脑与手机端等.后台模板用的是:AdminLTE 项目放在github上有兴趣开源下载看看 htt ...

随机推荐

  1. nyoj 1112-求次数 (string, substr(begin, length), map, pair)

    1112-求次数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:8 难度:2 题目描述: 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个新 ...

  2. MySQL数据库root账户密码忘记两种处理方法(保有效)

    方法1: 1.停止MySQL服务 # kill `cat /var/run/mysqld/mysqld.pid` 或者 # pkill mysqld 2.创建一个密码赋值语句的文本文件 # vi my ...

  3. Lombok 使用详解,简化Java编程

    前言 在 Java 应用程序中存在许多重复相似的.生成之后几乎不对其做更改的代码,但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求 比如,在 Java 应用程序开发中,我们几乎要为所有 ...

  4. Entity Framework Core For MySql查询中使用DateTime.Now的问题

    背景 最近一直忙于手上澳洲线上项目的整体迁移和升级的准备工作,导致博客和公众号停更.本周终于艰难的完成了任务,借此机会,总结一下项目中遇到的一些问题. EF Core一直是我们团队中中小型项目常用的O ...

  5. Flex调用JavaScript获取文件路径

    Flex的Web中有FileReference的类可以对文件操作,实现上传.下载的功能,但是没有办法获取到文件的路径. 普遍的方法是Flex调用JavaScript的文件浏览功能来获取文件路径. 1. ...

  6. Spring与Shiro整合

    Spring整合篇--Shiro 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Shiro? 链接:https://www.cnblogs.com/StanleyBlogs/ ...

  7. 2019-10-9:渗透测试,基础学习the-backdoor-factory-master(后门工厂)初接触

    该文章仅供学习,利用方法来自网络文章,仅供参考 the-backdoor-factory-master(后门工制造厂)原理:可执行二进制文件中有大量的00,这些00是不包含数据的,将这些数据替换成pa ...

  8. 教你用Java web实现多条件过滤功能

    生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...

  9. SpringBoot系列之集成Thymeleaf用法手册

    目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thy ...

  10. 迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用

    假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本.同时在1903以后的版本上,额外多出一个Ink的功能.那么我们就可以通过ApiInformation.IsApiContra ...