0% found this document useful (0 votes)
7 views

Practica4 Robotica

This document discusses a Matlab code for inverse kinematics of a 2 link robotic arm. It defines a 2 link robotic arm model with revolute joints. It then calculates the inverse kinematics using a geometric method to find the joint configurations needed to reach different end effector positions along a circular trajectory. The code solves the inverse kinematics at multiple time steps and animates the motion of the robotic arm reaching different points along the circular path.

Uploaded by

Kurokora
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Practica4 Robotica

This document discusses a Matlab code for inverse kinematics of a 2 link robotic arm. It defines a 2 link robotic arm model with revolute joints. It then calculates the inverse kinematics using a geometric method to find the joint configurations needed to reach different end effector positions along a circular trajectory. The code solves the inverse kinematics at multiple time steps and animates the motion of the robotic arm reaching different points along the circular path.

Uploaded by

Kurokora
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

UEA: Robótica

Practica 4

Alumno: Cristian Alejandro Zamora


Valdez
Matricula:2183078642
Primero calculamos la cinemática inversa por el método geometrico
Calculamos algunos puntos a los que puede llegar con sus diferentes angulos
Con este código de Matlab podemos ver las diferentes posiciones que puede tomar el brazo para
llegar alguna trayectoria

% Start with a blank rigid body tree model.


robot = rigidBodyTree('DataFormat','column','MaxNumBodies',3);
L1 = 8;
L2 = 8;
body = rigidBody('link1');
joint = rigidBodyJoint('joint1', 'revolute');
setFixedTransform(joint,trvec2tform([0 0 0]));
joint.JointAxis = [0 0 1];
body.Joint = joint;
addBody(robot, body, 'base');
body = rigidBody('link2');
joint = rigidBodyJoint('joint2','revolute');
setFixedTransform(joint, trvec2tform([L1,0,0]));
joint.JointAxis = [0 0 1];
body.Joint = joint;
addBody(robot, body, 'link1');
%%
% Add |'tool'| end effector with |'fix1'| fixed joint.
body = rigidBody('tool');
joint = rigidBodyJoint('fix1','fixed');
setFixedTransform(joint, trvec2tform([L2, 0, 0]));
body.Joint = joint;
addBody(robot, body, 'link2');
showdetails(robot)
t = (0:0.2:10)'; % Time
count = length(t);
center = [0.3 0.1 0];
radius = 8;
theta = t*(2*pi/t(end));
points = center + radius*[cos(theta) sin(theta) zeros(size(theta))];
q0 = homeConfiguration(robot);
ndof = length(q0);
qs = zeros(count, ndof);
ik = inverseKinematics('RigidBodyTree', robot);
weights = [0, 0, 0, 1, 1, 0];
endEffector = 'tool';

%
qInitial = q0; % Use home configuration as the initial guess
for i = 1:count
% Solve for the configuration satisfying the desired end effector
% position
point = points(i,:);
qSol = ik(endEffector,trvec2tform(point),weights,qInitial);
% Store the configuration
qs(i,:) = qSol;
% Start from prior solution
qInitial = qSol;
end
figure
show(robot,qs(1,:)');
view(2)
ax = gca;
ax.Projection = 'orthographic';
hold on
plot(points(:,1),points(:,2),'k')
axis([-8 8 -8 8])
framesPerSecond = 15;
r = rateControl(framesPerSecond);
for i = 1:count
show(robot,qs(i,:)','PreservePlot',false);
drawnow
waitfor(r);
end

You might also like