Documente Academic
Documente Profesional
Documente Cultură
Conducerea Roboților Mobili Şi A Manipulatoarelor
Conducerea Roboților Mobili Şi A Manipulatoarelor
manipulatoarelor robotice
Proiect
Profesor coordonator:
Conf.dr.ing.Șolea Răzvan
Studenți:
Rusu George
Stăncescu Sorin
Zaharia Adrian
Introducere
Proiectul nostru are în vedere manipularea unui braț robotic utilizând mediul
Matlab.
În această lucrare vom parcurge pas cu pas metode de la cele mai simple
la cinematica inversă, folosită și la nivel industrial.
Documentație
Robotul nostru are două tipuri de motoare: RX10, RX28, RX64. Pentru a
afla mai multe despre aceste două modele, și totodata, pentru a descărca
eventualele drivere sau programe ce ar putea fi utilizate în manipularea
brațului am folosit site-ul http://www.robotis.com.
StatusError=calllib('dynamixel','dxl_get_result');
Cu ajutorul următoarelor comenzi am reușit să mișcăm brațul.
calllib('dynamixel','dxl_write_word',nr motor,32,viteza);
calllib('dynamixel','dxl_write_word',nr motor,30,unghiul*1024/300);
pause(5);
Nr motor - de la 0 la 7.
Viteza - între 0-1023 în sensul ceasului și 1024-2047 invers ceasului. 0 fiind
viteza maximă (nerecomandat).
Cinematica inversă
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,100*1024/300);
pause(5);
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,190*1024/300);
pause(5);
calllib('dynamixel','dxl_write_word',1,32,25);
calllib('dynamixel','dxl_write_word',1,30,150*1024/300);
pause(0)
calllib('dynamixel','dxl_write_word',3,32,35);
calllib('dynamixel','dxl_write_word',3,30,230*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,150*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',2,32,25);
calllib('dynamixel','dxl_write_word',2,30,150*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',4,32,35);
calllib('dynamixel','dxl_write_word',4,30,150*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',5,32,30);
calllib('dynamixel','dxl_write_word',5,30,150*1024/300);
pause(5);
d este distanța de la axa verticală până la vârf care se poate afla din
datele introduse, mai exact, coordonatele x și y, d fiind ipotenuza în triunghiul
cu laturile ox, oy, d.
aux1 = acos(cosa);
aux2 = aux1 * 180/pi;
c2 = aux2 + alfae;
aux3 = acos(cosb);
aux4 = aux3 * 180/pi
c3 = aux4 - 30;
ze = z - l3;
s = sqrt(ze^2 + d^2);
alfae = sin(ze/s)*(180/pi);
clear all
%pozitia dorita
x = 19;
y = 10;
z = 39;
id=1;
loadlibrary('dynamixel','dynamixel.h');
libfunctions('dynamixel');
port = 3;
BaudRate = 1;
res = calllib('dynamixel','dxl_initialize',port,BaudRate);
if res == 1
disp('Succeed to open USB2Dynamixel!');
StatusError=calllib('dynamixel','dxl_get_result');
% Cinematica inversa
l1 = 14.5; % Motor1 - motor2;
l2 = 17; % Motor2 - varf;
l3 = 30.3; % Baza - motor1;
ze = z - l3; %
d = sqrt(x^2 + y^2);
s = sqrt(ze^2 + d^2);
alfae = sin(ze/s)*(180/pi);
a = l2;
b = s;
c = l1;
aux1 = acos(cosa);
aux2 = aux1 * 180/pi;
aux3 = acos(cosb);
aux4 = aux3 * 180/pi
c1 = sin(d/c)*180/pi;
c2 = aux2 + alfae;
c3 = aux4 - 30;
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,290*1024/300);
pause(5);
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,100*1024/300);
pause(5);
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,190*1024/300);
pause(5);
calllib('dynamixel','dxl_write_word',1,32,25);
calllib('dynamixel','dxl_write_word',1,30,150*1024/300);
pause(0)
calllib('dynamixel','dxl_write_word',3,32,35);
calllib('dynamixel','dxl_write_word',3,30,230*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,150*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',2,32,25);
calllib('dynamixel','dxl_write_word',2,30,150*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',4,32,35);
calllib('dynamixel','dxl_write_word',4,30,150*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',5,32,30);
calllib('dynamixel','dxl_write_word',5,30,150*1024/300);
pause(5);
if y>=0
if x>=0
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,(150+c1)*1024/300);
pause(0);
else
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,(150-c1)*1024/300);
pause(0);
end
calllib('dynamixel','dxl_write_word',3,32,30);
calllib('dynamixel','dxl_write_word',3,30,(230-c2)*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',5,32,30);
calllib('dynamixel','dxl_write_word',5,30,c3*1024/300);
pause(0);
else
if x>=0
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,(150-c1)*1024/300);
pause(0);
else
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,(150+c1)*1024/300);
pause(0);
end
calllib('dynamixel','dxl_write_word',3,32,30);
calllib('dynamixel','dxl_write_word',3,30,(300-150-c1)*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',5,32,30);
calllib('dynamixel','dxl_write_word',5,30,(300-150+c1)*1024/300);
pause(0);
end
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,100*1024/300);
pause(5);
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,290*1024/300);
pause(5);
%
% calllib('dynamixel','dxl_write_word',3,32,45);
% calllib('dynamixel','dxl_write_word',3,30,299*1024/300);
% pause(5);
%
%
%
% calllib('dynamixel','dxl_write_word',7,32,30);
% calllib('dynamixel','dxl_write_word',7,30,200*1024/300);
% pause(2);
%
% calllib('dynamixel','dxl_write_word',3,32,45);
% calllib('dynamixel','dxl_write_word',3,30,200*1024/300);
% pause(2);
% POZITIE BLEG
calllib('dynamixel','dxl_write_word',0,32,30);
calllib('dynamixel','dxl_write_word',0,30,159*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',1,32,25);
calllib('dynamixel','dxl_write_word',1,30,123*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',2,32,25);
calllib('dynamixel','dxl_write_word',2,30,155*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',3,32,35);
calllib('dynamixel','dxl_write_word',3,30,283*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',4,32,35);
calllib('dynamixel','dxl_write_word',4,30,67*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',5,32,30);
calllib('dynamixel','dxl_write_word',5,30,154*1024/300);
pause(0);
calllib('dynamixel','dxl_write_word',7,32,30);
calllib('dynamixel','dxl_write_word',7,30,20*1024/300);
pause(8);
calllib('dynamixel','dxl_terminate');
disp('Succeed to close USB2Dynamixel!');
else
disp('Failed to open USB2Dynamixel!');
end
unloadlibrary('dynamixel');