Matlab 函数作为 Simulink 块

Posted

技术标签:

【中文标题】Matlab 函数作为 Simulink 块【英文标题】:Matlab function as Simulink block 【发布时间】:2013-04-24 18:18:48 【问题描述】:

我尝试在 Simulink 中编写一个 Matlab 函数。 我的第一个函数是这样的:

function y = fcn(u, v)
coder.extrinsic('detectSURFFeatures');
boxPoints = detectSURFFeatures(u);
%scenePoints = detectSURFFeatures(v);
vBoxPoints = boxPoints.selectStrongest(100);
y = 0;
y = vBoxPoints;

但我看到错误: 1. 尝试从“mxArray”中提取字段“selectStrongest”。 2.未定义的函数或变量'vBoxPoints'。对局部变量的第一次赋值决定了它的类。 3. 端口宽度或尺寸错误。 “detecting_cross/MATLAB Function/v”的输出端口 1 是一个 [400x239] 矩阵。 请帮忙。

【问题讨论】:

【参考方案1】:

从外部函数返回的数据是 mxArray 类型。如果您想从这些 mxArrays 中获取值,您需要预先声明它们,以便外部函数的结果可以自动转换为该类型。你可以使用类似的东西

boxPoints = struct('selectStrongest',zeros(100,1));

在调用detectSUTFFeatures 之前。如果 mxArray 与函数中的不匹配,您将收到运行时错误。您的错误 2 和 3 是因为第一个问题。

【讨论】:

嗨。好的,我试试看:'function y = fcn(u) coder.extrinsic('detectSURFFeatures', 'rgb2gray'); boxPoints = struct('selectStrongest',zeros(100,1)); img = zeros(150, 200, 'uint8'); img(:) = rgb2gray(u); boxPoints = 检测SURFFeatures(img); y = 零(100, 1); y = boxPoints.selectStrongest(100);'但是没有工作。 我以创建结构的那一行为例。你应该以一种与你的结构相匹配的方式来制作它。 “没用”是什么意思? 它让我出错:MATLAB 表达式 'detectSURFFeatures' 不是正确的类:预期的 'struct',找到了 'SURFPoints'。块 MATLAB 函数 (#25) 执行时:无 我想重复这个例子:mathworks.com/help/vision/gs/object-detection-and-tracking.html 但在 Simulink 中 看起来 vBoxPoints 是一个标量双精度值。由于您只对获取此值感兴趣,因此您可能更容易编写另一个以 boxPoints 作为输入并返回此值的外部函数。

以上是关于Matlab 函数作为 Simulink 块的主要内容,如果未能解决你的问题,请参考以下文章

3D 矩阵作为 Simulink 模型中 Matlab 函数的输出

Simulink、matlab 函数

使用 Matlab 功能块的 Simulink 中的 UDP

simulink仿真运行一直卡在5%

如何把simulink用m语言控制

我可以将 simulink 中的 matlab 函数中的参数设置为可调吗?