Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Trazar la trayectoria de un efector final mediante cinemática inversa en Simulink

Utilice un modelo de robot de cuerpo rígido para calcular cinemáticas inversas mediante Simulink®. Defina una trayectoria para el efector final del robot y recorra los puntos para resolver las configuraciones de robot que trazan esta trayectoria.

Importe un modelo de robot desde un archivo URDF (formato de descripción de robot unificado) como un objeto RigidBodyTree.

robot = importrobot('iiwa14.urdf');
robot.DataFormat = 'column';

Vea el robot.

ax = show(robot);

Especifique una trayectoria para el robot. Estas coordenadas xyz dibujan la silueta en forma de N delante del robot.

x = 0.5*zeros(1,4)+0.25;
y = 0.25*[-1 -1 1 1];
z = 0.25*[-1 1 -1 1] + 0.75;

hold on
plot3(x,y,z,'--r','LineWidth',2,'Parent',ax)
hold off

Abra un modelo que calcule cinemáticas inversas. Las coordenadas xyz definidas en MATLAB® se convierten en transformaciones homogéneas y se introducen como el valor de Pose deseado. La solución de cinemática inversa generada como resultado vuelve a introducirse como la estimación inicial de la siguiente solución. La estimación inicial ayuda a realizar un seguimiento de la pose del efector final y genera configuraciones que el robot puede ejecutar de forma fluida.

Puede presionar el botón de callback para volver a generar el modelo de robot y la trayectoria que acaba de definir.

close
open_system('sm_ik_trajectory_model.slx')

Ejecute la simulación. El modelo debe generar las configuraciones de robot (configs) que siguen la trayectoria especificada para el efector final.

sim('sm_ik_trajectory_model.slx')

Recorra las configuraciones de robot y muestre el robot en cada unidad de tiempo. Almacene las posiciones del efector final en xyz.

figure('Visible','on');
tformIndex = 1;
for i = 1:10:numel(configs.Data)/7
    currConfig = configs.Data(:,1,i);
    show(robot,currConfig);
    drawnow

    xyz(tformIndex,:) = tform2trvec(getTransform(robot,currConfig,'iiwa_link_ee'));
    tformIndex = tformIndex + 1;
end

Dibuje la trayectoria definitiva del efector final como una línea negra. La figura muestra cómo el efector final traza la silueta en forma de N que definió al principio (la línea de puntos rojos).

figure('Visible','on')
show(robot,configs.Data(:,1,end));

hold on
plot3(xyz(:,1),xyz(:,2),xyz(:,3),'-k','LineWidth',3);
plot3(x,y,z,'--r','LineWidth',3)
hold off

Consulte también

Objetos

Bloques

Temas relacionados