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