Điều khiển cả hai tay kẹp

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xây dựng hệ giám sát, điều khiển vi kẹp (Trang 81 - 91)

Hình 4 .17 Thu 9 ảnh liên tiếp – thực hiện 9 lần trigger

Hình 4.23 Điều khiển cả hai tay kẹp

Với cả ba nút lệnh ở trên mỗi một lần click đầu vi kẹp chỉ chuyển động một lượng tương đối nhỏ nên có thể người dùng click tương đối là nhiều lần thì các cánh tay của vi kẹp mới tiến đến vật.

Nguyễn Văn Thắng – Luận văn thạc sĩ

KẾT LUẬN

Qua quá trình nghiên cứu làm luận văn thạc sĩ với đề tài “Xây dựng hệ giám sát, điều khiển vi kẹp”. Với yêu cầu đặt ra ban đầu là, xây dựng một chương trình điều khiển một vi kẹp kích thước cỡ micro met dựa vào công nghệ thị giác máy tính, tôi đã nghiên cứu,tìm hiểu được những nội dung sau:

- Nghiên cứu được cấu tạo và nguyên lý làm việc của một vi kẹp

- Xây dựng mạch điều khiển vi kẹp. Mạch điều khiển được thiết kế với yêu cầu nhận lệnh từ một chương trình điều khiển của máy tính và đưa ra giá trị điện áp tương ứng để điều khiển vi kẹp.

- Tìm hiểu tổng quan về xử lý ảnh. Những khái niệm và những kỹ thuật cơ bản trong xử lý ảnh. Làm cơ sở cho kỹ thuật thị giác máy tính.

- Tìm hiều các công cụ xử lý ảnh của Matlab, xây dựng chương trình điều khiển bằng giao diện GUI của Matlab.

- Kết quả cuối cùng là một hệ điều khiển vi kẹp giựa trên công nghệ thị giác máy tính. Hệ điều khiển này đã được chạy thử tại viện quốc tế về khoa học vật liệu.

Tuy đã đạt được những kết quả nhất định. Nhưng hệ thống giám sát và điều khiển vi kẹp vẫn còn có nhiều nhược điểm như tốc độ xử lý còn chậm. Hướng phát triển trong tương lai tôi có thể cải tiến hệ thống bằng các ngôn ngữ lập trình khác như C, visual C,… và ứng dụng kỹ thuật PID vào thuật toán điều khiển

Tài liệu tham khảo

Tiếng Việt

1. Th.s Nguyễn Hoàng Hải – Th.s Nguyễn Việt Anh (2005), Lập trình matlab và ứng dụng (dùng cho sinh viên khối khoa học kỹ thuật) NXB KHKT

2. Lương Mạnh Bá – Nguyễn Thanh Thủy Nhập môn xử lý ảnh số NXB KHKT Tiếng Anh

3. Chu Duc Trinh (2007) sensing microgripper for microparticles handing phD thesis delft university of Technology, The Neitherland

4. RGB color space http://www.rgbworld.com/color.html

5. Trợ giúp trực tuyến matlab http://www.mathworks.com/

6. Color principles- hue, saturation, and value

http://ncsu.edu.scivis/lesson/colormodels/color_models2.html#(HSV)

7. Stephen J. Chapman, (2001) “Matlab programming for engineer (second edition)”

8. Matlab toàn tập htttp://www.scribd.com/doc/2540653/matlab_toantap

9. A john Wiley & Son,inc Publication. Tinku Acharya and Ajoy kray. Image proceesing: principles and application

10. Elisabet perez and bahram javidi “image processing techniques for automatic road sign indentification and tracking”

Nguyễn Văn Thắng – Luận văn thạc sĩ mã chương trình điều khiển vi kẹp

Phụ lục

Mã của chương trình điều khiển vi kẹp

Dưới đây là đoạn mã được viết cho đáp ứng click của một vài nút lệnh chính trên các giao diện điều khiển vi kẹp.

1. Mã chương trình cho giao diện cấu hình cho cổng COM

% --- Executes on button press in setup.

function setup_Callback(hObject, eventdata, handles) set(handles.setup,'enable','off');

brindex= get(handles.baudlist,'value');

brcontent=deblank(get(handles.baudlist,'String')); baudrate=str2num(char(brcontent(brindex))); % lay gias tri cua datatosend bit

databitIndex = get(handles.datalist,'Value');

datacontent=deblank(get(handles.datalist,'String')); databit=str2num(char(datacontent(databitIndex))); %lay gia tri cua stop bit

stopIndex=get(handles.stoplist,'Value');

stopcontent=deblank(get(handles.stoplist,'String')); stopbit=str2num(char(stopcontent(stopIndex))); %lay gia tri cua cong

comindex = get(handles.comlist,'Value'); comport=deblank(get(handles.comlist,'String')); comport=char(comport(comindex)); %% s=instrfind('Status','open'); delete(s) %% serial_port=serial(comport,'Baudrate',baudrate,'Databit',databit,'Stopbit',stopbit,'Parity ','none'); % fwrite(s,2); serial_port.InputBufferSize =1; serial_port.Timeout=1000; save ('comfile', 'serial_port'); set(handles.setup,'enable','on'); disp('Da thiet lap xong ');

% --- Executes on button press in Send.

function Send_Callback(hObject, eventdata, handles) clc;

if isempty(dir('comfile.mat'))

disp('Chua thiet lap cau hinh cho cong'); return end load comfile; data_tran = str2num(get(handles.datatosend,'string')); fopen(serial_port); tic

disp('Sending please wait...');

% hàm thực hiện việc đưa ra giá trị điện áp để kiểm tra function dienap_Callback(hObject, eventdata, handles) com_port=handles.port; com_port.InputBufferSize =3; com_port.Timeout=1000; fopen(com_port); v= str2num(get(handles.volt,'String')); if v>5

disp('Gia tri dien ap lon > 5 '); else

data_tran= 819*v;

disp(strcat('Gia tri dien ap la: ', num2str(v), ' (volt)' )); low = round( mod(data_tran , 64));

high= floor(data_tran ./ 64) + 192; %cho hai bit cao nhat bang 1 fwrite(com_port,low);

fwrite(com_port,high); end

fclose(com_port);

2. Mã chương trình cho giao diện thiết lập cấu hình cho thiết bị thu ảnh

% --- Executes on button press in setup.

function setup_Callback(hObject, eventdata, handles) % hObject handle to setup (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) inf=imaqhwinfo('winvideo');

Nguyễn Văn Thắng – Luận văn thạc sĩ mã chương trình điều khiển vi kẹp

if isempty(inf.DeviceIDs)

disp('Chua co thiet bi thu nhan anh dc cai dat'); imaqreset; set(handles.supportedformat,'String','') else s=get(handles.supportedformat,'String'); closepreview; if size(s,1)>1 index=get(handles.supportedformat,'value'); format=char(s(index)); vid=videoinput('winvideo',1,format); else vid=videoinput('winvideo',1); end start(vid); while vid.FramesAcquired<5 end data=getdata(vid); while vid.FramesAvailable>0 end snap=data(:,:,1);%getsnapshot(vid); figure(1); [i,rect]=imcrop(snap); save ('Acquifile','vid','rect'); close (figure(1)); end

% --- Executes on button press in close.

function close_Callback(hObject, eventdata, handles) close(Acquisition);

% --- Executes on button press in cmdgetformats.

function cmdgetformats_Callback(hObject, eventdata, handles) inf=imaqhwinfo('winvideo');

if isempty(inf.DeviceIDs)

disp('Chua co thiet bi thu nhan anh dc cai dat'); set(handles.supportedformat,'Value',1 );

set(handles.supportedformat,'string','Default' ); imaqreset;

else

formats=inf.DeviceInfo.SupportedFormats; set(handles.supportedformat,'string',formats) end

3. Mã chương trình cho giao diện đìều khiển vi kẹp

% --- Executes on button press in cmdObjdectec.

function cmdObjdectec_Callback(hObject, eventdata, handles) rect =[197 318 236 135]; i2=imread('imadd1.bmp');%dung anh 1 , 5 , 8 i2=imcrop(i2,rect); mov = aviread('gripper.avi'); i1=imcrop(mov(1).cdata,rect); iadd=imadd(i1,i2); se90 = strel('line', 4, 90); se0 = strel('line', 4, 0); seD = strel('diamond',1); bw = im2bw(iadd);

bw = imdilate(bw, [se90 se0]); bwfill=imfill(bw,'holes');

BWfinal = imerode(bwfill,seD); imed= edge(bwfill,'sobel');

[B,L] = bwboundaries(BWfinal,'holes'); % imshow(bwfill);hold on;

%xac dinh duuong tron

stats = regionprops(L,'Area','Centroid'); threshold = 0.94;

for k = 1:length(B)

% obtain (X,Y) boundary coordinates corresponding to label 'k' boundary = B{k};

% compute a simple estimate of the object's perimeter delta_sq = diff(boundary).^2;

perimeter = sum(sqrt(sum(delta_sq,2))); if perimeter >0

% obtain the area calculation corresponding to label 'k' area = stats(k).Area;

Nguyễn Văn Thắng – Luận văn thạc sĩ mã chương trình điều khiển vi kẹp

metric = 4*pi*area/perimeter^2; % display the results

metric_string = sprintf('%2.2f',metric);

% mark objects above the threshold with a black circle if (metric >0 ) % threshold

centroid = stats(k).Centroid;

r=fix(centroid(1)- boundary(1,2)) ; %ban kinh duong tron yi2=size(iadd,2);

y0=fix(centroid(1)); x0=fix(centroid(2));

abs1=abs (y0 - yi2 / 2); % xac dinh xem toa do tam co gan giua anh hay khong if abs1<30 & x0>80 break; end end end end handles.x0=x0; handles.y0=y0; handles.r=r;

% chi so khung ben trai va ben phai frameLeft=1; frameRight=1; handles.frameLeft=frameLeft; handles.frameRight =frameRight; handles.mov = mov; handles.i2=i2; guidata(hObject, handles); set(handles.optAuto,'Enable','on'); set(handles.optManual,'Enable','on'); s=get(handles.listbox1,'String'); % s=strvcat(s,'Đã xác định được vật');

s=strvcat(s,strcat('Tọa độ tâm của vật:(',num2str(x0),',',num2str(y0),')')); s=strvcat(s,strcat('Đường kính của vật là:',num2str(2*r)));

set(handles.listbox1,'String',s);

function dk(hObject, eventdata, handles,frameLeft,frameRight) x0=handles.x0; y0=handles.y0; r=handles.r; rect =[197 318 236 135]; % i2=imread('imadd1.bmp');%dung anh 1 , 5 , 8 % i2=imcrop(i2,rect); i2=handles.i2; % mov = aviread('gripper.avi'); mov=handles.mov; se90 = strel('line', 4, 90); se0 = strel('line', 4, 0); seD = strel('diamond',1); Ymax =size(i2,2); Xmax=size(i2,1); imblank(1:Xmax,1:Ymax) = 0; % 'lay anh ben phai

i1=imcrop(mov(frameRight).cdata,rect); ima=imadd(i1,i2);

bw = im2bw(ima);

bw = imdilate(bw, [se90 se0]); bw = imfill(bw,'holes');

bw = imerode(bw ,seD); imed= edge(bw,'sobel');

if (imed(x0,y0+r)==1 | imed(x0,y0+r+1)==1 |imed(x0,y0+r+2)==1 ) imtong(:,y0:Ymax)=imed(:,y0:Ymax);

end

% lay anh ben trai

i1=imcrop(mov(frameLeft).cdata,rect); ima=imadd(i1,i2);

bw = im2bw(ima);

bw = imdilate(bw, [se90 se0]); bw = imfill(bw,'holes');

bw = imerode(bw ,seD); imed= edge(bw,'sobel');

Nguyễn Văn Thắng – Luận văn thạc sĩ mã chương trình điều khiển vi kẹp imtong(:,1:y0)=imed(:,1:y0); end figure(1) ; imshow(imtong) handles.frameLeft=frameLeft; handles.frameRight =frameRight; guidata(hObject,handles);

% --- Executes on button press in cmdRun.

function cmdRun_Callback(hObject, eventdata, handles) x0=handles.x0; y0=handles.y0; r=handles.r; rect =[197 318 236 135]; i2=imread('imadd1.bmp');%dung anh 1 , 5 , 8 i2=imcrop(i2,rect); mov = aviread('gripper.avi'); se90 = strel('line', 4, 90); se0 = strel('line', 4, 0); seD = strel('diamond',1); Ymax =size(i2,2); Xmax=size(i2,1); imblank(1:Xmax,1:Ymax) = 0; left = false; right=false; for i=1:1:60 i1=imcrop(mov(i).cdata,rect); ima=imadd(i1,i2); bw = im2bw(ima);

bw = imdilate(bw, [se90 se0]); bw = imfill(bw,'holes');

bw = imerode(bw ,seD); imed= edge(bw,'sobel'); if ~right

imtong(:,y0:Ymax)=imed(:,y0:Ymax);

if imed(x0 ,y0+r+2 )==0&imed(x0 ,y0+r+1 )==0 & imed(x0 ,y0+r )==0 right=true;

end end if ~ left

imtong(:,1:y0)=imed(:,1:y0);

if imed(x0+2,y0-r )==0 & imed(x0+2,y0-r+1 )==0 & imed(x0+2,y0-r-1 )==0 left=true;

end end

figure(1) ; imshow(imtong) if left & right

break end end s=get(handles.listbox1,'String'); s=strvcat(s,'Đã kẹp được vật'); set(handles.listbox1,'String',s);

% --- Executes on button press in cmdLeft.

function cmdLeft_Callback(hObject, eventdata, handles) frameLeft=handles.frameLeft+3;

frameRight=handles.frameRight;

dk(hObject, eventdata, handles,frameLeft,frameRight);

% --- Executes on button press in cmdRight.

function cmdRight_Callback(hObject, eventdata, handles) frameLeft=handles.frameLeft;

frameRight=handles.frameRight+3;

dk(hObject, eventdata, handles,frameLeft,frameRight);

% --- Executes on button press in cmdBoth.

function cmdBoth_Callback(hObject, eventdata, handles) frameLeft=handles.frameLeft+3;

frameRight=handles.frameRight+3;

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xây dựng hệ giám sát, điều khiển vi kẹp (Trang 81 - 91)

Tải bản đầy đủ (PDF)

(91 trang)