matlab cuda的.cu文件应该放在那里_无人机基于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

phirefrad

single

rad

目标roll

thetarefrad

single

rad

目标pitch

psirefrad

single

rad

目标yaw

prefradDs

single

rad/s

目标roll角速度

qrefradDs

single

rad/s

目标pitch角速度

rrefradDs

single

rad/s

目标yaw角速度

States_Bus

Element

Type

Unit

Meaning

phirad

single

rad

roll当前值

thetarad

single

rad

pitch当前值

psirad

single

rad

yaw当前值

pradDs

single

rad/s

roll角速度当前值

qradDs

single

rad/s

pitch角速度当前值

rradDs

single

rad/s

yaw角速度当前值

输入接口总共有三个总线,分别是CommandBusReferenceBusStatesBus。其中CommandBus是控制总线,用来对控制系统进行一些设置,如模式设置,复位等。ReferenceBus和StatesBus是目标信号总线和状态信号总线,可以理解为控制器的目标值和当前值。控制器的目的就是通过控制来使得当前值尽可能收敛到目标值。

输入接口设计完了,接下来是输出接口。输出接口相比输入要简单很多,无非就是多路pwm指令输出。这里我们预留6个pwm输出接口,即最多可以支持6轴的控制,当面,也可以根据自己的需要,来进行修改。

ControlOutBus

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进工作空间。
微信公众号关注《阿木实验室》获取更多无人机开发测评信息,
关注《阿木社区》获取更多学习课程信息。
社区论坛地址:http://bbs.amovauto.com参与讨论。

如有兴趣,联系微信:jiayue199506

其他时间,微信不定时在线,有事请留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ask to_Java native和ASCII 互转工具Native2AsciiUtils.java下载

/** Copyright 2012-2013 The Haohui Network Corporation*/package com.haohui.common.utils;/*** Java Native和Ascii转换代码** project common-utils* author cevencheng * create 2012-11-7 下午4:16:57*/public class Native2AsciiUtils {/*** prefix of ascii string of…

go java性能_服务端I/O性能大比拼:Node、PHP、Java和Go

理解应用程序的输入/输出(I/O)模型,意味着其在计划处理负载与残酷的实际使用场景之间的差异。若应用程序比较小,也没有服务于很高的负载,也许它影响甚微。但随着应用程序的负载逐渐上涨,采用错误的I/O模型有可能会让你到处踩坑&am…

python爬取数据步骤_Python爬虫爬取数据的步骤

爬虫: 网络爬虫是捜索引擎抓取系统(Baidu、Google等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 步骤: 第一步:获取网页链接 1.观察需要爬取的多网页的变化规律…

Android开发日记(六)

textViewUserName.setCursorVisible(false);//隐藏光标 textViewUserName.setFocusable(false);//失去焦点 textViewUserName.setFocusableInTouchMode(false);//虚拟键盘隐藏 if(!userLocalName.equalsIgnoreCase("null")&&!userLocalEmail.equalsIgnoreCa…

python数据库安装_python数据库-MySQL安装问题总结(48)

一、ERROR 1698(28000):Access denied for user rootlocalhost错误 我的操作系统是ubuntu:我的MySQL版本是:安装完成后,登录mysql的时候就出现了如下错误:因为安装的过程中没让设置密码,可能密码为空,但无论…

java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...

如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径我有一个包含2个包的项目:ListStopWords.txtListStopWords.txt在包(2)中我有一个文本文件ListStopWords.txt,在包(1)中我有一个类FileLoadder.这是代码FileLoader&#xff…

[转]什么是RSS

http://www.blogbus.com/bangzhuzhongxin-logs/5452786.html 如果您够仔细的话,一定会发现BlogBus的每一个Blog站上都会有一个 图标。这个图标表示Blogbus支持RSS功能(目前是RSS 2.0),即所谓的新闻聚合功能。 点击 图标&#xf…

京东的商品搜索功能是如何实现的_如何精准查询京东商品销量?分享一个京东运营小妙招...

京东平台和其他平台商品信息展示不一样,在京东平台商品的销售额无论是累计的还是当月的数据都没有展示,即便是通过商家后台的京东商智也是只能看到销售额的指数,这就给京东商家做竞品分析时设置了障碍,无法获取到竞品的真实销售额…

java zip解压进度条_java读取文件显示进度条的实现方法

实现这个功能比较简单,用到的类有两个:progressmonitorinputstream(主要是整个类) 和 progressmonitor ,它们在javax.swing中大体思路,你要首先知道整个文件的大小,和当前已经读取文件的大小,获得整个文件大…

ubuntu下软件中心闪退问题解决

前段时间不知道做了什么导致,ubuntu下的软件中心进不去。没事点开后就立马闪退出去。 然后重新安装软件中心解决了 重装命令: sudo apt-get install --reinstall software-center software-center-aptdaemon-plugins 当然也可以选择用其他包管理器&#…

python 可视化监控平台_python可视化篇之流式数据监控的实现

preface 流式数据的监控,以下主要是从算法的呈现出发,提供一种python的实现思路 其中: 1.python是2.X版本 2.提供两种实现思路,一是基于matplotlib的animation,一是基于matplotlib的ion 话不多说,先了解大概…

java 不执行构造函数_函数作为构造函数执行,但不作为函数执行

我在displayandmove.as文件中有以下代码:package {import flash.display.MovieClip;public class FigureConstruct extends MovieClip {public function displayandmove() {this.height stage.stageHeight/5;this.width stage.stageWidth/5;}}}我在displayandmove…

codeforce 606A - Magic Spheres

题意&#xff1a;a,b,c三种球&#xff0c;能把俩个一样的球变成另一颜色不一样的球。给你目标x,y,z&#xff0c;问能否经过变化至少达打目标。 1 #include<iostream>2 #include<stdio.h>3 #include<stdlib.h>4 #include<memory.h>5 #include<string…

cmd cd 无法切换目录_一分钟掌握cmd基础操作,告别鼠标

cmd基础操作cmdcmd是command的缩写&#xff0c;一直伴随着windows操作系统。有时称为&#xff1a;控制台窗口&#xff0c;cmd窗口&#xff0c;黑窗口&#xff0c;命令行窗口等。其实&#xff0c;在unix系统&#xff0c;Linux&#xff0c;MacOS等几乎所有的操作系统中&#xff0…

jsp java代码_jsp内的java代码不执行,急啊!!大家来看看!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我的jsp页面上的java代码和html代码是穿插的&#xff0c;用System.out.println去跟踪的时候&#xff0c;内的代码都不执行&#xff0c;html都是执行的&#xff01;怎么回事啊&#xff1f;没有报错&#xff0c;没有任何”错误“的迹…

css 背景图怎么设置自动填充满_CSS属性设置 -- 背景样式

Ⅰ background-color: -- 设置标签的背景颜色rgba(0,0,0,0.65); -- (红,緑,蓝三原色,透明度)只能给背景设置透明度opacity: 0.65; -- 改变整个标签的透明度<style>Ⅱ background-image: --设置标签的背景图片url("图片网址"); -- 如果图片的大小没有标签大&…

EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean...

该jboss集成到eclipse 关掉Jboss控制台新闻Ctrlc&#xff0c;在MyEclipse→Servers→Jboss可配置JBoss。通过ANT提高EJB应用的开发效率 在HelloWorld 增加ANT&#xff0c;右击项目新建xml&#xff1a;build.xml&#xff0c;右击打开方式选择Ant .. 相应用进行编译、打包、公布、…

mysql-8.0.12语法_mysql-8.0.12 (免安装版) 安装详解

mysql-8.0.12 (解压版) 安装详解 错误解决第一步&#xff1a;mysql-8.0.12 (解压版)下载地址&#xff1a;https://www.mysql.com/downloads/第二步&#xff1a;配置初始化my.ini在mysql的bin目录中创建my.ini&#xff0c;将以下内容复制其中[mysqld]#设置3306端口port3306#设置…

python扩展库不是用于科学计算的有_有哪些科学计算的开源库

2017-03-19 回答 比较火爆的android开源库有以下&#xff1a; 1、volley 主要有以下模块&#xff1a; (1) json&#xff0c;图像等的异步下载&#xff1b; (2) 网络请求的排序&#xff08;scheduling&#xff09; (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求 (6) 和…

mysql中间件面试题_面试题集锦-中间件 - 春哥大魔王的博客的个人空间 - OSCHINA - 中文开源技术交流社区...

Mysql引擎区别&#xff0c;聚簇索引是数据&#xff0c;非聚簇索引是引用&#xff0c;普通索引和主键索引两棵树&#xff0c;普通索引到主键索引有个回表&#xff0c;建立覆盖索引减少回表&#xff0c;利用前缀索引&#xff0c;注意索引顺序&#xff0c;隔离级别默认rr&#xff…