| |
|
开发:
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的飞控软件 |
目录 前言上一篇描述了我心中理想的飞控软件的样子,今天回过头来讲下,实现这个样子重要的一步,软件工程的目录如何安排,这个问题仁者见仁,智者见智,我主要是参考了ardupilot的文件目录。
设计这个目录结构主要是为了,增强可扩展性,比如增加新的硬件支持,增加新的无人设备,比如无人车、固定翼飞机、无人船等。下面接着上篇的继续。 第四步 文件管理&参数文件管理库主要是做对文件系统操作,即创建文件夹、文件,读写文件等。参数库,主要是支持其他模块,比如姿态控制、位置控制等。这些模块需要一些掉电不丢失的数据。参数库,会把参数以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的姿态控制库。 后记目前,飞控还在开发过程中,以上的步骤,也是我写代码的顺序。边写边记录,比写完了再总结,也许对想要自己开发飞控的同学,更加的有意义。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |