2017-04-27 118 views
-1

我正在使用Matlab Simulink中的球和板。我有一个跟踪Matlab文件的球。我如何在Simulink中运行它?我想从球追踪Matlab文件中得到位置数据。我尝试了用户定义函数的函数,但由于视频输入错误,我的代码无法工作。我该怎么办?将m文件嵌入到Simulink中

+1

显示你的努力。到目前为止你做了什么?你究竟在哪里得到错误?也许发布一些代码,让这里的人可以帮助你。 –

+0

我添加了跟踪代码,以便第一次输入 – KralBey

回答

0
vid = videoinput('winvideo', 1); 
set(vid, 'FramesPerTrigger', Inf); 
set(vid, 'ReturnedColorspace', 'rgb'); 
vid.FrameGrabInterval = 4; 

start(vid); 

while (vid.FramesAcquired<=1000) 

    data = getsnapshot(vid); 

    diff_im=rgb2gray(data); 
    diff_im = im2bw(diff_im,0.9); 
    diff_im = bwareaopen(diff_im,300); 
    bw = bwlabel(diff_im, 8); 
    stats = regionprops(bw, 'BoundingBox', 'Centroid'); 

    imshow(data); 
    hold on 
    for object = 1:length(stats) 
     bb = stats(object).BoundingBox; 
     bc = stats(object).Centroid; 
     rectangle('Position',bb,'EdgeColor','r','LineWidth',2); 
     plot(bc(1),bc(2), '-m+')    
     a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2))))); 

     set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); 

    end 

    hold off 
end 
stop(vid); 
flushdata(vid); 

clear all 

这里是跟踪代码。我想bc(1)和bc(2)将数据定位到Simulink,但我无法嵌入simulink此代码。

0

用于simulink(嵌入式)编码器的代码必须具有能够从其生成代码的性质。这意味着只支持Matlab函数的一个子集。 通常代码,用于代码生成被支撑应具有“编译”

%#代码生成

函数定义内。

做什么取决于你的目标:如果你想从你的模型生成代码

A):

你需要重写未标记为%#代码生成无效代码的功能。 (包括一些工作 - 对不起...)

B)如果你只是想在Simulink运行:

使用coder.extrinsic机制。这只是一个指令,你把它放在matlab函数(块)代码中,告诉simulink你想使用一个不在codegen规范中的matlab函数。完成之后,您可以调用您的普通函数(将其放入函数m文件中)。但是,如果您尝试生成代码;该特定的函数调用将被忽略。其余代码将尝试尽最大努力执行。

最后说明;如果您正在开发(命令提示符)函数,您可能有一天想要调用或包含在simulink中的matlab函数块中,则应该引入%#codegen附注,以便它可以帮助您避免无法在代码生成中使用的函数。

+0

谢谢你的回答。 – KralBey