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

使用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可轻松完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值