使用MATLAB Coder将工具箱中的系统对象转换为C代码

现在你一个脚本文件,这个文件是个完整的程序,有输入也有输出,运行这个脚本文件会得到你想要的结果。在这个文件里你使用了某个工具箱中的系统对象,这个系统对象很关键,是这个脚本文件的核心函数,现在需要将这个系统对象转换为C代码。那么应该怎么做呢?

一、编写入口函数,将算法的计算部分分解为MATLAB函数

要生成 C 代码,入口点必须是一个函数。我们不必为整个 MATLAB 应用程序生成C代码。如果有计算密集型的特定部分,从这些部分生成代码以加速算法。以下是一个matlab程序。

load 'rpy_9axis' sensorData  Fs%将文件变量加载到工作区中
accelerometerReadings = sensorData.Acceleration;
gyroscopeReadings = sensorData.AngularVelocity;
magnetometerReadings = sensorData.MagneticField;
decim = 2;                                          %指定抽取因子为 2 以降低算法的计算成本。
fuse = ahrsfilter('SampleRate',Fs,'DecimationFactor',decim);%创建一个ahrsfilter对象
%SampleRate设置为传感器数据的采样率。
q = fuse(accelerometerReadings,gyroscopeReadings,magnetometerReadings);
%将加速度计读数、陀螺仪读数和磁力计读数传递给ahrsfilter对象fuse,
以输出传感器身体方向随时间变化的估计值。默认情况下,方向输出为四元数向量。
time = (0:decim:size(accelerometerReadings,1)-1)/Fs;
plot(time,eulerd(q,'ZYX','point'))
title('Orientation Estimate')
legend('z-axis', 'y-axis', 'x-axis')
ylabel('Rotation (degrees)')

在这个脚本文件中,我使用了Sensor Fusion and Tracking Toolbox 中ahrsfilter系统对象。该系统对象的功能为将加速度传感器信号、陀螺仪传感器信号和电子罗盘信号融合解算出无人机的姿态。输入为三个传感器的测量值,输出为四元数(即无人机的姿态)现在我想把ahrsfilter系统对象部分变为C代码,那么我首先需要编写一个入口函数,如下:

function quat= sensor_fusio(acc,gyro,mag)%
%SENSOR_FUSIO 此处显示有关此函数的摘要
%   此处显示详细说明
Fs=200;
decim=2;
fuse = ahrsfilter('SampleRate',Fs,'DecimationFactor',decim);
quat=fuse(acc,gyro,mag);end

然后我们把这个函数替换到原来的程序中,看看这个程序是否正常运行,以判定入口函数的正确性。

load 'rpy_9axis' sensorData  %将文件变量加载到工作区中
accelerometerReadings = sensorData.Acceleration;
gyroscopeReadings = sensorData.AngularVelocity;
magnetometerReadings = sensorData.MagneticField;
q = sensor_fusio(accelerometerReadings,gyroscopeReadings,magnetometerReadings);
%将加速度计读数、陀螺仪读数和磁力计读数传递给ahrsfilter对象fuse,以输出传感器身体方向随时间变化的估计值。默认情况下,方向输出为四元数向量。
time = (0:decim:size(accelerometerReadings,1)-1)/Fs;
plot(time,eulerd(q,'ZYX','point'))
title('Orientation Estimate')
legend('z-axis', 'y-axis', 'x-axis')
ylabel('Rotation (degrees)')

OK,这样之后我发现程序依然是好使的,那么说明我的入口函数没问题。接着往后操作。

二、检查入口函数是否适合代码生成

打开你创建的入口函数,在函数名后输入%#codegen,MATLAB 编辑器中的代码分析器会不断检查您的代码。它报告问题并建议修改以最大限度地提高性能和可维护性。不断按照提示修改直到提示标识变绿。

       之后右击函数文件,找到check code generation readiness,该命令会检查你的代码是不是最终完善至可以准备代码生成状态。

       如下代码已检查完毕,可以准备代码生成。

三、使用MATLAB Coder App 生成C代码

此步骤参照matlab帮助文档和B站30分钟入门MATLAB Coder@jw12187可轻松完成。

使用MATLAB Coder将工具箱中的系统对象转换为C代码相关推荐

  1. 多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...

    MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发 ...

  2. matlab求解lmi,Matlab的LMI工具箱中最优化问题

    用LMI方法求倒立摆H无穷状态反馈控制器程序 但运行出现没有合适的gama值 显示"could not establish feasibility nor infeasibility&quo ...

  3. python中删除对象方法的区别_python中delattr删除对象方法的代码分析

    最近我们针对对象属性这块,介绍了不少关于测试属性的方法.在进行一系列测试后,我们发现这个属性并不需要,这时候就要用到删除的功能.在python中可以选择delattr函数删除对象的属性,基于它的删除功 ...

  4. matlab在线性系统中的应用,MATLAB在控制系统仿真中的应用

    <MATLAB在控制系统仿真中的应用>由会员分享,可在线阅读,更多相关<MATLAB在控制系统仿真中的应用(23页珍藏版)>请在人人文库网上搜索. 1.第四章 MATLAB在控 ...

  5. 自动控制原理matlab pdf下载,第五章-matlab在自动控制原理中的应用.pdf

    第五章-matlab在自动控制原理中的应用.pdf 第第五五章章 MATLAB MATLAB MATLAB MATLAB在自动控制原理的应用在自动控制原理的应用 5 5 5 5 1 1 1 1 控制系 ...

  6. UG\NX二次开发 获取部件中的所有对象 UF_OBJ_cycle_all

    文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 获取部件中的所有对象 UF_OBJ_cycle_objs_in_part. 代码: ...

  7. 基于matlab介绍传感器融合和跟踪工具箱中用于评估跟踪器性能的不同定量分析工具(附源码)

    目录 一.分配和错误指标 1.1 轨道和真相定义 1.2 计算和分析指标 1.3 分析分配指标 ​编辑 1.4 分析错误指标 ​编辑二.将指标汇总为分数 2.1 欧斯帕公制 2.2 分析 OSPA 指 ...

  8. matlab中模型预测控制工具箱中m文件optimizer代码里面有个built in kalman 的选项

    matlab中MPC工具箱中m文件optimizer代码,看到里面有个"built in kalman "的选项,盲猜是和卡尔曼有关系的吧. 求同行交流呢~QQ 164429350 ...

  9. matlab工具箱中英对照,MATLABa工具包中英对照

    <MATLABa工具包中英对照>由会员分享,可在线阅读,更多相关<MATLABa工具包中英对照(4页珍藏版)>请在人人文库网上搜索. 1.MATLABDistributedCo ...

最新文章

  1. 多线程模式(2):Guarded Suspension模式
  2. 支持向量机(SVM)必备知识(KKT、slater、对偶)
  3. windows系统命令行下常用命令收集
  4. 聊城大学计算机学院答辩,数学与信息工程系成功举办精品课程答辩会
  5. 判断sem信号量为零_将信号量递减为零的进程崩溃时,如何恢复信号量?
  6. VxWorks程序一下载就停住了
  7. 吐血整理!顶级程序员的百宝箱来咯!| 原力计划
  8. c#endread怎么打印出来_C#中如何打印出整个PANEL的内容?
  9. php根据关键字搜索,javascript、php关键字搜索函数的使用方法
  10. 编译Libgdiplus遇到的问题
  11. 学习总结5.0 Linux tar打包命令
  12. android手机备份恢复出厂设置,安卓手机恢复出厂设置在哪里?史上最全版恢复过程详解...
  13. css数字怎么换行,css实现连续的英文或数字自动换行的方法
  14. Java黑皮书编程练习题6.08(摄氏度和华氏度之间的转换)
  15. Neo4j:一、CQL语句
  16. HTML 动态夜空特效
  17. 输入一个角度的弧度值x,计算该角的余弦值
  18. 题9.5:有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输人10个 学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓 名、3门课程成绩、平均分数)。
  19. 比较几种步进电机加减速控制方案
  20. 黑马程序员-java-String

热门文章

  1. 苹果手机壳_苹果官方最贵手机壳,能买一部安卓机!
  2. uniapp开发微信小程序的坑
  3. Linux 下的C语言 快速开发框架
  4. WIFI系列协议--802.11r--快速基本服务集(BSS)转换
  5. 火车头采集器超级详细图文使用指导(面向新手)
  6. 2021年电工(初级)考试题及电工(初级)考试题库
  7. 幼儿抽象逻辑思维举例_思维是核心 | 培养孩子的逻辑思维能力
  8. 解决前端图片下载跨域问题
  9. 大数运算之100的阶乘(C语言实现)
  10. Go打印结构体使用“%+v”