IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> [连载二]如何从零开始写出性能媲美ardupilot/px4的飞控软件 -> 正文阅读

[游戏开发][连载二]如何从零开始写出性能媲美ardupilot/px4的飞控软件

项目链接:https://gitee.com/breederbai/grapilot

微信号:grapilot

目录

前言

第四步 文件管理&参数

第五步 线程间通信模块

第六步 串口管理&地面站通信

第七步 数字飞机

第八步 日志记录

第九步 PID&电机混控&遥控器管理

第十步 存储管理库

第十一步 姿态控制

后记


前言

上一篇描述了我心中理想的飞控软件的样子,今天回过头来讲下,实现这个样子重要的一步,软件工程的目录如何安排,这个问题仁者见仁,智者见智,我主要是参考了ardupilot的文件目录。

图片

  • copter:存放多旋翼飞行任务相关的代码

  • libraries:存放一些库文件,如基础公共库、pid、姿态控制、位置控制、参数、日志等

  • modules:存放一些子模块,如ecl库、矩阵计算库(用于ecl)、mavlink、rtthread等

  • platform:存放用于适配不同飞控硬件的代码

设计这个目录结构主要是为了,增强可扩展性,比如增加新的硬件支持,增加新的无人设备,比如无人车、固定翼飞机、无人船等。下面接着上篇的继续。

第四步 文件管理&参数

文件管理库主要是做对文件系统操作,即创建文件夹、文件,读写文件等。参数库,主要是支持其他模块,比如姿态控制、位置控制等。这些模块需要一些掉电不丢失的数据。参数库,会把参数以xml文件的形式存在SD卡中,初始化的时候会把这些参数从SD卡加载到ram里。参数库十分重要,是很多模块的基础,所以要先实现。

第五步 线程间通信模块

线程间通信模块在工程中叫uITC,主要用于线程间的数据传递。有了uITC模块,可以降低各个模块间的耦合,比如,你现在要写日志记录模块,需要记录传感器数据,如果没有这个模块,就只能调用函数,来获取传感器数据,那你就需要先把传感器数据的接口写出来,这样就像拔出萝卜带出泥,想干意见事情,结果要先干好几件事情。在比如说,姿态控制,需要姿态数据,姿态数据在纯软仿真和实物中,数据来源不一样,这样就需要在程序中做额外的处理,有了uITC模块就不需要那么复杂的处理了。

图片

第六步 串口管理&地面站通信

串口管理模块主要是为了实现,类似ardupilot那样,可以通过参数,配置串口的功能和波特率,方便用户使用,也方便使用相同串口的功能模块并存,比如说,GPS和激光雷达,都要使用串口1,如果写死在代码中,那就需要修改代码,通过宏定义来屏蔽一个,当然也可以给他们分配不同的串口,但问题是,如果又有另一个传感器要使用串口1呢?还需要再改代码,一般来说需要适配的传感器要比串口数量多,虽然不一定会同时使用,但适配传感器,驱动总是要先写出来吧。有了串口管理模块,可以通过串口功能号来分配串口给相应的模块,大大增加了灵活性,也使得代码更加简洁。

地面站通信模块,就不用多说了,主要负责和地面站交互,发送遥测数据,接收遥控数据。目前使用的是mavlink2.0协议。

图片

第七步 数字飞机

数字飞机是纯软仿真的基础,纯软仿真可以采用,和外部数字飞机交互的方式,比如jsbsim、airsim等,也可以采用内置数字飞机的方式。我之所以采用内置数字飞机的方式,主要是一来方便使用,而且避免了时钟不同步带的问题。

比如说,飞控有一个任务200Hz,在硬件上没问题,但是在windows下,因为windows的特性和rtthread,200Hz的任务运行一次不是5毫秒,有可能是6、7、8等,而外部的数字飞机时钟也有可能存在这个问题,有可能准,有可能不准。时钟不同步,就会对控制造成影响。

比数字飞机放到飞控工程中,这样,即使时钟不准,它们也都是按照相同步数运行的,有可能响应会慢一些,但不会出错。

图片

第八步 日志记录

日志记录,主要记录飞控运行时的一些信息,方便调试和定位问题。也是十分关键的模块,不能没有。

图片

第九步 PID&电机混控&遥控器管理

PID用于姿态控制、位置控制等。

电机混控,用于适配不同的机型,四轴、六轴、八轴等。电机混控也十分重要,都飞机的操控性能有着很重要的影响。

遥控器管理库,主要是对遥控器各个通道功能的分装,借鉴了ardupilot,可以通过配置某一通道的功能参数,让其实现特定的功能。这个对功能易用性来讲,很重要。

图片

第十步 存储管理库

用于对外接存储器的读写,如flash、SD卡。主要是为了支撑航点的读写。

图片

第十一步 姿态控制

这个库,功能和名字一样,主要是借鉴了ardupilot的姿态控制库。

图片

后记

目前,飞控还在开发过程中,以上的步骤,也是我写代码的顺序。边写边记录,比写完了再总结,也许对想要自己开发飞控的同学,更加的有意义。

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:48:06  更:2021-10-12 23:49:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:52:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码