Matlab Simulink에서 볼과 플레이트 작업을하고 있습니다. 나는 Matlab 파일을 추적하는 공이있다. Simulink에서 어떻게 실행할 수 있습니까? 나는 공 추적 Matlab 파일에서 위치 데이터를 원한다. 사용자 정의 함수에서 함수를 시도했지만 videoinput 오류로 인해 코드가 작동하지 않습니다. 어떻게해야합니까?Simulink에 m 파일 임베드
답변
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에 임베드 할 수 없다.
시뮬 링크 (임베디드) 코더를위한 코드는 코드가 생성 될 수있는 성격을 가져야합니다. 즉, Matlab 함수의 하위 집합 만 지원됩니다. 코드 생성 지원 될 전형적 코드는 "래그"
% # 1 CODEGEN 함수 정의 내부
있어야한다.
A)이 모델에서 코드를 생성하려면 : 당신은 % 번호의 CODEGEN에 대한 잘못된 태그되지 않은 코드의 기능을 다시 작성할 필요
해야 할 일
는당신의 목표에 따라 달라집니다 . (일부 작업은 포함 - 죄송합니다 ...)
B) 그냥 시뮬에서 실행하려면 :
가 coder.extrinsic 메커니즘을 사용합니다. 이것은 MATLAB 함수 (블록) 코드 안에 넣고 codegen 사양을 벗어나는 MATLAB 함수를 사용한다고 simulink에 지시하는 지시문 일뿐입니다. 작업을 마친 후에는 정상적인 함수를 호출 할 수 있습니다 (함수 m- 파일에 넣으십시오). 그러나 코드를 생성하려고하면; 특정 함수 호출은 무시됩니다. 나머지 코드는 최선의 노력으로 실행하려고 시도합니다.
최종 메모; 언젠가 simulink에서 matlab 함수 블록에 호출하거나 포함시키려는 함수를 개발 (명령 프롬프트)하고 있다면 코드 생성에 사용할 수없는 함수를 피할 수 있도록 % # codegen pragma를 넣어야합니다.
답변 해 주셔서 감사합니다. – KralBey
당신의 노력을 보여주십시오. 지금까지 뭐 했니? 정확히 어디에서 오류가 발생 했습니까? 어쩌면 여기 사람들이 당신을 도울 수 있도록 코드를 게시하십시오. –
추적 코드를 추가 했으므로 첫 번째 항목에 대해 – KralBey