CHƯƠNG III: Thiết kế mạch mô phỏng điều khiển và GUI
1. Thiết kế mô phỏng điều khiển và GUI với version First
1.4. Lập trình giao diện GUI trong matlab
1.4.2. Lập trình trong giao diện file (.m)
Sau khi ta thiết kế xong nhấn Run và lưu file (.gui ) vào thư mục Robot khi đó ta sẽ có thêm một file .m để lập trình và thêm Code để có thể điều khiển được robot
Biến Pushbutton1
- Slider1_Callback: thêm code
function slider1_Callback(hObject, eventdata, handles) ModelName = 'robot3dof';
global var;%khai báo bien
t1=get(handles.slider1,'value'); %lay gia tri tu thanh slider1 gan vao bien t1
set(handles.edit1,'string',num2str(t1));% chuyen chuoi gia tri ve dang ki tu va dat vao thanh edti1
t2=get(handles.slider2,'value'); %lay gia tri tu thanh slider2 gan vao bien t2
set(handles.edit2,'string',num2str(t2));% chuyen chuoi gia tri ve dang ki tu va dat vao thanh edti2
t3=get(handles.slider3,'value');%lay gia tri tu thanh slider3 gan vao bien t3
set(handles.edit3,'string',num2str(t3));% chuyen chuoi gia tri ve dang ki tu va dat vao thanh edti3
set_param([ModelName '/Slider
Gain'],'Gain',num2str(t1))%bien t1 duoc dua vao khoi slider gain trong mach dk
set_param([ModelName '/Slider
Gain1'],'Gain',num2str(t2))%bien t2 duoc dua vao khoi slider gain trong mach dk
set_param([ModelName '/Slider
Gain2'],'Gain',num2str(t3))%bien t3 duoc dua vao khoi slider gain trong mach dk
b1=[cosd(t1) 0 sind(t1) 0 ;sind(t1) 0 -cosd(t1) 0 ;0 1 0 900;0 0 0 1];%ma tran DH khâu 1
b2=[cosd(t2) -sind(t2) 0 650*cosd(t2) ;sind(t2) cosd(t2) 0 650*sind(t2) ;0 0 1 0 ;0 0 0 1];%ma tran DH khâu 2
b3=[cosd(t3) -sind(t3) 0 400*cosd(t3);sind(t3) cosd(t3) 0 400*sind(t3); 0 0 1 0 ; 0 0 0 1];%ma tran DH khâu 3
c=b1*b2*b3;%phuong trinh dongng hoc xac dinh khâu thao tác px=c(1,4);%lay gia tri hang 1, cot 4 tu ma tran c
py=c(2,4);%lay gia tri hang 2, cot 4 tu ma tran c pz=c(3,4);%lay gia tri hang 3, cot 4 tu ma tran c
set(handles.edit4,'string',num2str(px));%chuyen chuoi gia tri px thanh dang ki tu va dat vao thanh edti4
set(handles.edit5,'string',num2str(py));%chuyen chuoi gia tri px thanh dang ki tu va dat vao thanh edti5
set(handles.edit6,'string',num2str(pz));%chuyen chuoi gia tri px thanh dang ki tu va dat vao thanh edti6
- Slider2, slider3 tương tự slider1
- Pushbutton1_Callback: Thêm code vào nút Default
function pushbutton1_Callback(hObject, eventdata, handles)
%dua robot ve vi tri ban dau t1=0,t2=0,t3=0 ModelName = 'robot3dof';
global var; %khai bao bien t1=0; %goc theta1=0
set(handles.edit1,'string',num2str(t1));
t2=0; %goc theta2=0
set(handles.edit2,'string',num2str(t2));
t3=0; %goc theta3=0
set(handles.edit3,'string',num2str(t3));
set_param([ModelName '/Slider Gain'],'Gain',num2str(t1)) set_param([ModelName '/Slider Gain1'],'Gain',num2str(t2)) set_param([ModelName '/Slider Gain2'],'Gain',num2str(t3))
t1=[cosd(t1) 0 sind(t1) 0 ;sind(t1) 0 -cosd(t1) 0 ;0 1 0 135;0 0 0 1];
t2=[cosd(t2) -sind(t2) 0 100*cosd(t2) ;sind(t2) cosd(t2) 0 100*sind(t2) ;0 0 1 0 ;0 0 0 1];
t3=[cosd(t3) -sind(t3) 0 60*cosd(t3);sind(t3) cosd(t3) 0 60*sind(t3); 0 0 1 0 ; 0 0 0 1];
c=t1*t2*t3;
px=c(1,4);
py=c(2,4);
pz=c(3,4);
set(handles.edit4,'string',num2str(px));
set(handles.edit5,'string',num2str(py));
set(handles.edit6,'string',num2str(pz));
- Pushbutton2_Callback: Thêm code vào nút Set
function pushbutton2_Callback(hObject, eventdata, handles)
%bai toan dong hoc nguoc ModelName = 'robot3dof';
global var; %khai bao bien
px=get(handles.slider4,'value');%lay gia tri tu thanh slider4 gan vào bien px
set(handles.edit4,'string',num2str(px));%chuyen chuoi giá tri px thành ki tu va dat no vao thanh edit4
py=get(handles.slider5,'value'); %lay gia tri tu thanh slider5 gan vào bien py
set(handles.edit5,'string',num2str(py));%chuyen chuoi giá tri py thành ki tu va dat no vao thanh edit5
pz=get(handles.slider6,'value');%lay gia tri tu thanh slider6 gan vào bien pz
set(handles.edit6,'string',num2str(pz));%chuyen chuoi giá tri pz thành ki tu va dat no vao thanh edit6
%%%%%%%tim cac goc theta d1=900; a2=650; a3=400;
theta1=atan2d(py,px);
m=cosd(theta1)*px+sind(theta1)*py;
n=pz-d1;
theta3=acosd((m^2+n^2-a3^2-a2^2)/(2*a2*a3));
theta2=atan2d(((cosd(theta3)*a3+a2)*n-
m*sind(theta3)*a3),(cosd(theta3)*a3+a2)*m+n*sind(theta3)*a 3);
guidata(hObject,handles);%luu su thay doi
set(handles.edit1,'string',num2str(theta1));%voi giá tri theta1 tim duoc chuyen thanh dang ki tu và dat gia tri do vao thanh edit1
set_param([ModelName '/Slider
Gain'],'Gain',num2str(theta1))%dat gia tri theta1 vào khoi silder gain trong mach dk
set(handles.edit2,'string',num2str(theta2));%tuong tu nhu tren
set_param([ModelName '/Slider Gain1'],'Gain',num2str(theta2))
set(handles.edit3,'string',num2str(theta3));%tuong tu nhu tren
set_param([ModelName '/Slider Gain2'],'Gain',num2str(theta3))
- Pushbutton3_Callback: Thêm code vào nút close
function pushbutton3_Callback(hObject, eventdata, handles)
%nut dong bang dieu khien close;
- Slider4_callback: thêm code
function slider4_Callback(hObject, eventdata, handles) px=get(handles.slider4,'value');%lay gia tri tu thanh slider4 gan vao bien px
set(handles.edit4,'string',num2str(px));%dat px vao thanh edit4
- Slider5,6,7 tương tự
❖ Giao diện bảng điều khiển được chạy như sau:
- Bài toán thuận:
- Bài toán nghịch: