无人机基于Matlab/Simulink的模型开发(连载一)
“一切可以被控制的对象,都需要被数学量化”
这是笔者从事多年研发工作得出的道理,无论是车辆控制,机器人控制,飞机控制,还是无人机控制,所有和机械运动相关的控制,如果不能被很好的数学量化,那么将不会被很好的控制。
因为工作需要,笔者曾拜访过很多无人机研发公司,高校和研究所。发现大多数无人机研发公司的研发手段,相较于国外,还很初级。基本都是嵌入式开发居多,侧重于驱动的修改,飞行逻辑的修改。我认为这算不上是严格的无人机开发。因为大多数公司,都没有给被控对象(无人机),建立完整的数学模型。只是利用开源的框架,调整控制参数,没有完整的测试流程和测试指标。这样研发出来的飞机一致性很差,每一架飞机的飞行状态都不统一,完全不能满足于工业应用的场景。2018/2019年倒闭的无人机公司,大多数都是存在这种情况。
不乏有些原本从事互联网软件开发的公司,转行从事无人机开发。在运动控制领域,和互联网软件开发的不同。有的时候互联网软件开发,不需要建立被控对象的数学模型。秉承设计模式,软件架构设计,协作编程,大规模软件集中测试,上线。在无人系统开发中,软件构架设计也是必不可少的,但是在测试的环节,如果没有建立数学模型,测试无从谈起,因为一般的真机测试,代价,效率和测试密集程度远远达不到要求。因为一个BUG会导致飞机坠毁,而任何一个新系统,往往存在大量的BUG。
而在已经成熟工业界,比如汽车,飞机制造,电力电子,航天等领域大量采用了基于Matlab基于Simulink的模型开发手段。
我们阿木实验室提供如下的课程体系和打包工具:
课程将全面,细致地讲解如何基于模型(Simulink)的方法设计一套功能强大的飞控系统。本课程由多位一线资深飞控工程师设计,结合多年的基于模型的飞控开发经验,给大家提供最先进,最前沿的飞控开发体验。
概述
基于模型的开发将省去繁琐的代码编写步骤,只需要拖动几个模块,就像搭积木一般,轻松搭建您自己的飞控算法。飞控开发人员可以将更多的精力放在算法本身,而不需要过多关注代码实现的细节,这样将大大加快开发的效率,减少在代码编写过程中产生的错误。同时,基于模型的开发具有优秀的代码复用性。也就是说,已经设计好的功能模块,只需要简单的复制粘贴,就能轻松地应用到其它任何地方,免去了代码移植过程的繁琐。
基于模型的开发另外一个强大的优势即在于“一次试验,多次仿真”的目的。结合Simulink强大的开环和闭环仿真系统,只需采集一次数据,便可通过仿真再现在真实世界中的实际表现。通过修改模型算法或参数,可以进行在线的数据仿真和调试,大大简化调试的难度。
系统接口与总线设计
在我们设计控制系统之前,首先要做的就是定义系统的输入/输出接口。在Simulink中,接口一般都是以总线的方式进行定义。可以将总线理解为C语言中的结构体,当把Simulink模型自动生成C代码后,也可以看到总线最终是用结构体来进行实现的。
对于内环的姿态环控制器来说,输入总线设计如下:
Command_Bus
| Element | Type | Unit | Meaning |
|---|---|---|---|
| reset | uint8 | [0,1] | 为1复位控制器 |
| mode | uint8 | [0,1] | 0:角度控制,1:角速度控制 |
| base_th | int16 | 0~1000 | 姿态环基础油门 |
Reference_Bus
| Element | Type | Unit | Meaning |
|---|---|---|---|
| phi_ref_rad | single | rad | 目标roll |
| theta_ref_rad | single | rad | 目标pitch |
| psi_ref_rad | single | rad | 目标yaw |
| p_ref_radDs | single | rad/s | 目标roll角速度 |
| q_ref_radDs | single | rad/s | 目标pitch角速度 |
| r_ref_radDs | single | rad/s | 目标yaw角速度 |
States_Bus
| Element | Type | Unit | Meaning |
|---|---|---|---|
| phi_rad | single | rad | roll当前值 |
| theta_rad | single | rad | pitch当前值 |
| psi_rad | single | rad | yaw当前值 |
| p_radDs | single | rad/s | roll角速度当前值 |
| q_radDs | single | rad/s | pitch角速度当前值 |
| r_radDs | single | rad/s | yaw角速度当前值 |
输入接口总共有三个总线,分别是Command_Bus,Reference_Bus和States_Bus。其中Command_Bus是控制总线,用来对控制系统进行一些设置,如模式设置,复位等。Reference_Bus和States_Bus是目标信号总线和状态信号总线,可以理解为控制器的目标值和当前值。控制器的目的就是通过控制来使得当前值尽可能收敛到目标值。
输入接口设计完了,接下来是输出接口。输出接口相比输入要简单很多,无非就是多路pwm指令输出。这里我们预留6个pwm输出接口,即最多可以支持6轴的控制,当面,也可以根据自己的需要,来进行修改。
Control_Out_Bus
| Element | Type | Unit | Meaning |
|---|---|---|---|
| pwm1 | uin16 | 1000~2000 | 电机1 pwm信号 |
| pwm2 | uin16 | 1000~2000 | 电机2 pwm信号 |
| pwm3 | uin16 | 1000~2000 | 电机3 pwm信号 |
| pwm4 | uin16 | 1000~2000 | 电机4 pwm信号 |
| pwm5 | uin16 | 1000~2000 | 电机5 pwm信号 |
| pwm6 | uin16 | 1000~2000 | 电机6 pwm信号 |
好了,现在接口都定义好了,那么下一步的问题就是如何在Simulink里面来实现这些接口定义了。
其实,在Simulink中实现这些接口定义很简单。Simulink提供了一个Bus Editor的工具,只需要进行简单配置就可以定义任何你需要的接口或者总线了。
下面一步一步地讲解一下总线的定义方法:
首先打开控制模型,点击Edit->Bus Editor
这里我之前已经配置过了,所以能看到我已经定义过的总线。但是如果是自己第一次进行设计的话,这里应该是空的。可以点击如红色圈圈所示的add bus来添加Bus信号,这里我们总共需要添加4个Bus。三个输入总线和一个输出总线。Bus添加好后,在最右边的Property,修改Bus的名称。添加好Bus之后,我们下面就需要往Bus里面添加Element,即总线的元素。首先选定一个Bus,然后点击蓝色圈圈圈出的add element选项,即可添加元素。
然后需要对Element进行配置。如图所示,我们一般只需要对Name,Data Type和Dimension三个选项进行配置即可。Dimension为变量的维度,如果我们的element需要配置为向量或者矩阵,那么就需要对Dimension进行配置。
配置完成后,需要点击File->Export to File来将Bus的配置保存成.m还活着.mat文件。因为Bus的定义都是保存在工作空间的。当你下次打开matlab的时候,工作空间都是会被清除的,所以我们需要将我们的Bus定义保存成文件,这样,当下次打开matlab的时候,只需要load一下我们的.mat/.m文件,就能将我们定义的Bus再load进工作空间。
微信公众号关注《阿木实验室》获取更多无人机开发测评信息,关注《阿木社区》获取更多学习课程信息。
社区论坛地址:bbs.amovauto.com 参与讨论。
无人机基于Matlab/Simulink的模型开发(连载一)的更多相关文章
- 基于Matlab/Simulink的模型开发(连载一)
概述 基于模型的开发将省去繁琐的代码编写步骤,只需要拖动几个模块,就像搭积木一般,轻松搭建您自己的飞控算法.飞控开发人员可以将更多的精力放在算法本身,而不需要过多关注代码实现的细节,这样将大大加快开发 ...
- 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
Jerry之前的文章30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 发布之后,有朋友问我,"没错, 我是在你的文章里看到了Fiori应用的 ...
- 基于matlab的GUI界面开发软件
matlab工具deploytool编译M为可执行程序 http://blog.sina.com.cn/s/blog_60f8483a0100gnsm.html
- 基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载
koahub-loader koahub-loader是基于 Koa平台Node.js开发的KoaHub.js的koahub-loader控制器,模型,帮助方法自动加载 koahub loader I ...
- 基于MATLAB搭建的DDS模型
基于MATLAB搭建的DDS模型 说明: 累加器输出ufix_16_6数据,通过cast切除小数部分,在累加的过程中,带小数进行运算最后对结果进行处理,这样提高了计算精度. 关于ROM的使用: 直接设 ...
- 基于MATLAB System Generator 搭建Display Enhancement模型
基于MATLAB System Generator 搭建Display Enhancement模型
- 基于gin的golang web开发:模型绑定
在前两篇文章介绍路由的时候,我们了解到gin可用通过类似DefaultQuery或DefaultPostForm等方法获取到前端提交过来的参数.参数不多的情况下也很好用,但是想想看,如果接口有很多个参 ...
- 基于gin的golang web开发:模型验证
Gin除了模型绑定还提供了模型验证功能.你可以给字段指定特定的规则标签,如果一个字段用binding:"required"标签修饰,在绑定时该字段的值为空,那么将返回一个错误.开发 ...
- 基于MATLAB的多项式数据拟合方法研究-毕业论文
摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...
随机推荐
- Linux运维基础提高之RAID卡和磁盘分区
磁盘大小计算: 柱面的数量*每个柱面的大小(容量) [root@luffy001 ~]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 ...
- 学习 Nginx+IIS 分布式测试
首先,从Nginx官网(http://nginx.org/en/download.html)下载了一个Window版本,解压后如图: 修改conf文件夹里面的配置文件nginx.conf,默认的808 ...
- Golang 入门系列(十五)如何理解go的并发?
前面已经讲过很多Golang系列知识,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 接下来要说的 ...
- 松软科技课堂:Winform之TextBox
松软科技文(www.sysoft.net.cn): 文本框的几种模式:Multiline(多行).PasswordChar(密码)将文本框的PasswordChar设为*就是密码框效果,将MultiL ...
- 全方位深度剖析PHP7底层源码(已完结)
第1章 课程介绍本章主要介绍课程要讲的知识点,以及课程要求等. 第2章 PHP7的新特性本章主要介绍PHP7的新特性,做基准测试,与PHP5对比验证PHP7的性能提升程度,引出对PHP7源码学习的必要 ...
- [C++]面向对象的程序设计——重要概念
1.面向对象程序设计的核心思想是数据抽象.继承和动态绑定.通过使用数据抽象可以将类的接口与实现分离:使用继承,可以定义相似的类型并对其相似的关系建模:使用动态绑定,可以在一定程度上忽略相似类型的区 ...
- 03爬虫-requests模块基础(1)
requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...
- php 上传word文件 Word文件转 PDF
说一下,之前的时候做上传word文档转pdf的项目时候, 通过安装open office 连接服务组件, 遇到种种问题, 例如上传的word文档版本,, word文档中编辑的样式复杂会出现转pdf失败 ...
- Linux初识之Centos7中terminal光标位置偏移问题的解决
新安装的centos7打开terminal发现光标位置向右偏移,使用起来影响感官,经查询后找到类似情况并顺利解决问题,特记录解决过程以作参考. 1.未解决时光标向右偏移显示: 2.打开设置(Setti ...
- elasticsearch 增删改查底层原理
elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.预备知识 在对document的curd进行深度分析 ...