Main Content

jointSpaceMotionModel

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

Desde R2019b

Descripción

El objeto jointSpaceMotionModel modela el movimiento en el espacio articular de lazo cerrado de un manipulador robótico, especificado como un objeto rigidBodyTree. El comportamiento del modelo de movimiento está definido por la propiedad MotionType.

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

Creación

Descripción

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

ejemplo

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

motionModel = jointSpaceMotionModel(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.

Frecuencia natural de la dinámica de error, especificada como un escalar o un vector de n elementos en Hz, donde n es el número de articulaciones no fijas en el objeto rigidBodyTree asociado en la propiedad RigidBodyTree.

Dependencias

Para usar esta propiedad, establezca la propiedad MotionType en "ComputedTorqueControl" o "IndependentJointMotion".

Coeficiente de amortiguación de la dinámica de error de segundo orden, especificada como un escalar o un vector de n elementos de valores reales, donde n es el número de articulaciones no fijas en el objeto rigidBodyTree asociado en la propiedad RigidBodyTree. Si se especifica un escalar, DampingRatio se convierte en un vector de n elementos de valor s, donde s es el escalar especificado.

Dependencias

Para usar esta propiedad, establezca la propiedad MotionType en "ComputedTorqueControl" o "IndependentJointMotion".

Ganancia proporcional para el control proporcional-derivativo (PD), especificada como un escalar o una matriz de n por n, donde n es el número de articulaciones no fijas en el objeto rigidBodyTree asociado en la propiedad RigidBodyTree. Debe establecer la propiedad MotionType en "PDControl". Si se especifica un escalar, Kp se convierte en s*eye(n), donde s es el escalar especificado.

Dependencias

Para usar esta propiedad, establezca la propiedad MotionType en "PDControl".

Ganancia derivada para el control PD, especificada como un escalar o una matriz de n por n, donde n es el número de articulaciones no fijas en el objeto rigidBodyTree en la propiedad RigidBodyTree. Si se especifica un escalar, Kp se convierte en s*eye(n), donde s es el escalar especificado.

Dependencias

Para usar esta propiedad, establezca la propiedad MotionType en "PDControl".

Tipo de movimiento, especificado como escalar de cadena o vector de caracteres que define el comportamiento en el espacio articular de lazo cerrado que modela el objeto. Las opciones son:

  • "ComputedTorqueControl": compensa la dinámica de cuerpo entero y asigna la dinámica de error especificada en las propiedades NaturalFrequency y DampingRatio.

  • "IndependentJointMotion": modela cada articulación como un sistema independiente de segundo orden utilizando la dinámica de error especificada por las propiedades NaturalFrequency y DampingRatio.

  • "PDControl": utiliza un control proporcional-derivativo en las articulaciones basado 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

Este ejemplo muestra cómo crear y utilizar un objeto jointSpaceMotionModel para un manipulador robótico en el espacio articular.

Crear el robot

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

Configurar la simulación

Establezca el periodo de tiempo en 1 s con un intervalo de 0,01 segundos. Establezca el estado inicial para que sea el de la configuración inicial de los robots con una velocidad de cero.

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

Defina el estado de referencia con una posición objetivo, velocidad cero y aceleración cero.

targetState = [pi/4; pi/3; pi/2; -pi/3; pi/4; -pi/4; 3*pi/4; zeros(7,1); zeros(7,1)];

Crear el modelo de movimiento

Modele el sistema con un control de par motor calculado y dinámica de error definida por una respuesta al escalón moderadamente rápida con un sobreimpulso del 5%.

motionModel = jointSpaceMotionModel("RigidBodyTree",robot);
updateErrorDynamicsFromStep(motionModel,.3,.05);

Simular el robot

Utilice la función derivada del modelo como entrada para el solver ode45 para simular el comportamiento a lo largo de 1 segundo.

[t,robotState] = ode45(@(t,state)derivative(motionModel,state,targetState),tspan,initialState);

Representar la respuesta

Represente las posiciones de todas las articulaciones accionándose hacia su estado objetivo. Las articulaciones con un desplazamiento mayor entre la posición de partida y la posición objetivo se accionan hacia el objetivo a un ritmo más rápido que las que tienen un desplazamiento menor. Esto provoca un sobreimpulso, pero todas las articulaciones tienen el mismo tiempo de establecimiento.

figure
plot(t,robotState(:,1:motionModel.NumJoints));
hold all;
plot(t,targetState(1:motionModel.NumJoints)*ones(1,length(t)),"--");
title("Joint Position (Solid) vs Reference (Dashed)");
xlabel("Time (s)")
ylabel("Position (rad)");

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

expandir todo