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.

taskSpaceMotionModel

Modelar el movimiento de un árbol de cuerpo rígido dadas las entradas de referencia del espacio cartesiano

Desde R2019b

Descripción

El objeto taskSpaceMotionModel modela el movimiento en el espacio cartesiano con bucle cerrado de un manipulador, especificado como un objeto de árbol de cuerpo rígido. El comportamiento del modelo de movimiento está definido por la propiedad MotionType.

Para más información sobre las ecuaciones de movimiento, consulte Task-Space Motion Model.

Creación

Descripción

motionModel = taskSpaceMotionModel crea un modelo de movimiento para un manipulador predeterminado con dos articulaciones.

motionModel = taskSpaceMotionModel("RigidBodyTree",tree) crea un modelo de movimiento para el objeto rigidBodyTree especificado.

ejemplo

motionModel = taskSpaceMotionControlModel(Name,Value) establece propiedades adicionales especificadas como pares nombre-valor. Puede especificar varias propiedades en el orden que desee.

Propiedades

expandir todo

Modelo de robot de árbol de cuerpo rígido, especificado como un objeto rigidBodyTree que define las propiedades de inercia y cinemática del manipulador.

Esta propiedad define el cuerpo que se utilizará como efector final y para el que se define el movimiento en el espacio cartesiano. La propiedad debe corresponder a un nombre del cuerpo en el objeto rigidBodyTree de la propiedad RigidBodyTree. Si se actualiza el árbol de cuerpo rígido sin actualizar también el efector final, el cuerpo con el índice más elevado se convierte en el cuerpo del efector final por defecto.

Ganancia proporcional para el control PD, especificada como una matriz de 6 por 6.

Ganancia derivada para el control proporcional-derivativo (PD), especificada como una matriz de 6 por 6.

Constante de amortiguación de la articulación, especificada como un vector de n elementos, donde n es el número de articulaciones no fijas en el modelo de robot especificado por la propiedad RigidBodyTree. Las unidades de amortiguación de las articulaciones son N/(m/s) o N/(rad/s) para articulaciones prismáticas y giratorias, respectivamente.

Tipo de movimiento, especificado como "PDControl", que utiliza control proporcional-derivativo (PD) asignado a las articulaciones a través de un controlador Jacobian-Transpose. El control se basa en las propiedades Kp y Kd especificadas.

Funciones del objeto

derivativeTime derivative of manipulator model states
updateErrorDynamicsFromStepUpdate values of NaturalFrequency and DampingRatio properties given desired step response

Ejemplos

contraer todo

En este ejemplo se muestra cómo crear y utilizar un objeto taskSpaceMotionModel para el brazo de un robot manipulador en el espacio cartesiano.

Crear el robot

robot = loadrobot("kinovaGen3","DataFormat","column","Gravity",[0 0 -9.81]);

Configurar la simulación

Establezca el periodo de tiempo en 1 segundo con un intervalo de 0,02 segundos. Establezca el estado inicial en la configuración inicial del robot, con una velocidad de cero.

tspan = 0:0.02:1;
initialState = [homeConfiguration(robot);zeros(7,1)];

Defina un estado de referencia con una posición objetivo y velocidad cero.

refPose = trvec2tform([0.6 -.1 0.5]);
refVel = zeros(6,1);

Crear el modelo de movimiento

Modele el comportamiento como un sistema bajo control proporcional-derivativo (PD).

motionModel = taskSpaceMotionModel("RigidBodyTree",robot,"EndEffectorName","EndEffector_Link");

Simular el robot

Simule el comportamiento durante 1 segundo utilizando un solver rígido para capturar con más eficacia la dinámica del robot. Si se utiliza ode15s, se permite una mayor precisión alrededor de las áreas con una tasa de cambio elevada.

[t,robotState] = ode15s(@(t,state)derivative(motionModel,state,refPose,refVel),tspan,initialState);

Representar la respuesta

Represente gráficamente la posición inicial del robot y marque el destino con una X.

figure
show(robot,initialState(1:7));
hold all
plot3(refPose(1,4),refPose(2,4),refPose(3,4),"x","MarkerSize",20)

Observe la respuesta representando el robot en un bucle de 5 Hz.

r = rateControl(5);
for i = 1:size(robotState,1)
    show(robot,robotState(i,1:7)',"PreservePlot",false);
    waitfor(r);
end

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type line, patch. One or more of the lines displays its values using only markers These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

Referencias

[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Upper Saddle River, NJ: Pearson Education, 2005.

[2] Spong, Mark W., Seth Hutchinson, and Mathukumalli Vidyasagar. Robot Modeling and Control. Hoboken, NJ: Wiley, 2006.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2019b