tracking.m
Listing Code tracking.m adalah listing code untuk tampilan GUI dari sistem Object Tracking.
Komentar yang diberikan menggunakan %
function varargout = tracking(varargin) % TRACKING M-file for tracking.fig
% TRACKING, by itself, creates a new TRACKING or raises the existing
% singleton*. %
% H = TRACKING returns the handle to a new TRACKING or the handle to
% the existing singleton*. %
% TRACKING('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TRACKING.M with the given input arguments.
%
% TRACKING('Property','Value',...) creates a new TRACKING or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before tracking_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to tracking_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)". %
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help tracking
% Last Modified by GUIDE v2.5 12-Jun-2012 14:09:47
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tracking_OpeningFcn, ... 'gui_OutputFcn', @tracking_OutputFcn, ... 'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT
function tracking_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn. % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to tracking (see VARARGIN)
% Choose default command line output for tracking
handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% UIWAIT makes tracking wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = tracking_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles)
maintracking %memanggil program utama % hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles)
openserial
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles)
%delete(handles.tracking) exit
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes during object deletion, before destroying properties.
function pushbutton4_DeleteFcn(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in close_pushbutton. function close_pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to close_pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get the current position of the GUI from the handles structure
% to pass to the modal dialog.
pos_size = get(handles.tracking,'Position'); % Call modaldlg with the argument 'Position'. user_response = modaldlg('Title','Confirm Close'); switch user_response
case {'No'} % take no action case 'Yes'
% Prepare to close GUI application window % .
% . % .
delete(handles.tracking) end
% --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles)
s = serial('COM1','BaudRate',9600,'DataBits',7,'Parity', 'even','StopBits',2 ,'FlowControl', 'none');
fopen(s); %open serial
fprintf(s,'%s\r\n','nt') pause(10)
fprintf(s,'%s\r\n','sp 5') pause(5)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles)
s = serial('COM1','BaudRate',9600,'DataBits',7,'Parity', 'even','StopBits',2 ,'FlowControl', 'none');
fopen(s); %open serial pause(1)
fprintf(s,'%s\r\n','og') pause(1)
fclose(s);
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
maintracking.m
maintracking.m adalah listing code untuk program utama yang berisi proses dari sistem.
Komentar dalam %
%open serial
% s adalah variabel untuk menampung format serial
s = serial('COM1','BaudRate',9600,'DataBits',7,'Parity', 'even','StopBits',2 ,'FlowControl', 'none');
fopen(s); %open serial
%-loop dengan area yang terlihat
%pause digunakan untuk menahan perintah lain sebelum robot berhenti
pause(1)
%format pengiriman adalah fprintf(variabel serial,’%s\r\n’,’perintah’)
fprintf(s,'%s\r\n','sp 5')
vid = videoinput('winvideo',1,'YUY2_640x480'); %untuk
menerima input video
start(vid); %inisialisasi video
set(vid,'ReturnedColorSpace','grayscale'); %melakukan setting ke mode grayscale
pause(2)
%menuju ke posisi awal(di tengah)
fprintf(s,'%s\r\n','MP 0,300,300,-90,0') pause(3)
%variabel posisi awal
z=300; xa=0; ya=300; za=300;
%xs, ys, dan zs adalah variabel untuk menampung nilai x, y dan z sebelumnya xs=xa; ys=ya; zs=za; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% I = getsnapshot(vid);
level=0.34; %level/nilai threshold
bw = im2bw(I,level); %mengubah ke black n white bw = bwareaopen(bw, 50);
abcdef = bwarea (bw); %mencari nilai/besarnya area yang
terdeteksi kamera
%outer loop 1
if (abcdef <10) pause(1)
%nilai variabel untuk memindahkan robot ke sisi kiri
dari platform q=1 xa=200; ya=200; za=300; xs=xa; ys=ya; zs=za;
%menghitung nilai sudut T5 T5= fix(atan(xa/ya)*180/pi);
fprintf(s,'%s\r\n','MP 200,200,300,-90,45') pause(3)
%variabel yang menunjukkan bahwa robot tetap berada pada posisi awal
xa=0; ya=300; za=300; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% I = getsnapshot(vid);
level=0.34; %level/nilai threshold
bw = im2bw(I,level); %mengubah ke black n white bw = bwareaopen(bw, 50);
abcdef = bwarea (bw) %mencari nilai/besar nya area yang
terdeteksi kamera
%outer loop 2
if (abcdef <10) pause(1)
%nilai variabel untuk memindahkan robot ke sisi kanan
dari platform w=1 xa=-200; ya=200; za=300; xs=xa; ys=ya; zs=za;
%menghitung nilai sudut T5 T5= fix(atan(xa/ya)*180/pi);
fprintf(s,'%s\r\n','MP -200,200,300,-90,-45') pause(3)
else
%variabel yang menunjukkan bahwa robot tetap berada
pada posisi awal
xa=0; ya=300; za=300; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % pause(1) for k= 1:10 k pause(1) %capture image I = getsnapshot(vid); level=0.34; %nilai threshold bw = im2bw(I,level); bw = bwareaopen(bw, 50);
%memberi label pada objek yang terdeteksi
L = bwlabel(bw);
%mencari titik pusat massa dari objek
sa = regionprops(L, 'centroid'); centroids = cat(1, sa.Centroid);
figure, imshow(bw), title('center of mass of the object') hold on
%menampilkan plot image dengan memberi tanda * pada titik pusat massa objek
plot(centroids(:,1), centroids(:,2), 'g*') axis on
center_xObj = sa.Centroid(1); %mendapatkan centroid X center_yObj = sa.Centroid(2); %mendapatkan centroid Y
hold off pause(2)
if (z==300)
%offset adalah selisih nilai jarak antara gambar yang ditangkap kamera
%dengan gambar yang ada pada kenyataan/real
offsetx=-(-8.44272); offsety=(-2.88309);
%xcen dan ycen adalah selisih nilai centroid objek dengan centroid dari
%kamera
xcen=(((-((center_xObj+offsetx-320)))/640))*230.1; ycen=(((center_yObj-offsetx-240))/480)*170.4;
else %if (z==200)
%offset adalah selisih nilai jarak antara gambar yang ditangkap kamera
%dengan gambar yang ada pada kenyataan/real
offsetx=-(-7.74465); offsety=(-2.93148);
%xcen dan ycen adalah selisih nilai centroid objek dengan centroid dari
%kamera
xcen=(((-((center_xObj+offsetx-320)))/640))*148.6; ycen=(((center_yObj+offsetx-240))/480)*110.8; end
%menentukan posisi x,y dan z yang dituju
x=fix(xs + xcen); y=fix(ys + ycen); z=200;
%T5 adalah variabel penampung untuk pandangan end effector agar sejajar dengan bidang
T5= fix(atan(x/y)*180/pi);
% b adalah variabel yang digunakan untuk menampung data yang akan dikirim ke robot, -90 digunakan untuk menunjukkan end effector menghadap ke bawah
b=[x;y;z;-90;T5] %variable untuk penampung data pause(5)
fprintf(s,'MP %d,%d,%d,%d,%d\r\n',b)
%memindahkan nilai x,y dan z saat ini menjadi nilai xs,ys,dan
%zs atau x,y dan z sebelumnya saat loop terulang
xs=x; ys=y; zs=z;
%toleransi untuk membuat program berhenti jika jarak antara titik pusat
%objek dengan kamera kurang dari 0.5 cm
if (sqrt(xcen^2+ycen^2)<=5) I = getsnapshot(vid); level=0.34; %nilai threshold
bw = im2bw(I,level); %membuat image menjadi black n
white
bw = bwareaopen(bw, 50);
%memberi label pada objek yang terdeteksi
L = bwlabel(bw);
%mencari titik pusat massa dari objek
sa = regionprops(L, 'centroid'); centroids = cat(1, sa.Centroid);
figure, imshow(bw), title('LAST IMAGE karena mencapai objek (Toleransi 0.5cm)')
hold on
%menampilkan plot image dengan memberi tanda * pada titik pusat massa objek
plot(centroids(:,1), centroids(:,2), 'b*') axis on
center_xObj = sa.Centroid(1); %mendapatkan titik pusat
massa objek untuk koordinat x
center_yObj = sa.Centroid(2); %mendapatkan titik pusat
massa objek untuk koordinat y
hold off z=100; b=[x;y;z;-90;T5]; fprintf(s,'MP %d,%d,%d,%d,%d\r\n',b) break end end fclose(s);