2017-04-27 82 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