Main Content

inverseDynamics

Par motores de articulación requeridos para un movimiento determinado

Descripción

jointTorq = inverseDynamics(robot) calcula los par motores de articulación necesarios para que el robot mantenga estáticamente su configuración inicial sin aplicar fuerzas externas.

ejemplo

jointTorq = inverseDynamics(robot,configuration) calcula los par motores de articulación para mantener la configuración del robot especificada.

jointTorq = inverseDynamics(robot,configuration,jointVel) calcula los par motores de articulación para la configuración de articulación especificada y las velocidades con aceleración cero y sin fuerzas externas.

jointTorq = inverseDynamics(robot,configuration,jointVel,jointAccel) calcula los par motores de articulación para la configuración de articulación especificada, velocidades y aceleraciones sin fuerzas externas. Para especificar la configuración inicial, velocidades de articulación cero o aceleraciones cero, use [] para ese argumento de entrada.

jointTorq = inverseDynamics(robot,configuration,jointVel,jointAccel,fext) calcula los par motores de articulación para la configuración de articulación especificada, velocidades, aceleraciones y fuerzas externas. Use la función externalForce para generar fext.

Ejemplos

contraer todo

Utilice la función inverseDynamics para calcular los par motores de articulación necesarios para mantener estática una configuración de robot concreta. También puede especificar las velocidades y aceleraciones de las articulaciones y las fuerzas externas con otras sintaxis.

Cargue un Omron eCobra-600 de Robotics System Toolbox™ loadrobot, especificado como un objeto rigidBodyTree. Establezca la propiedad de gravedad y asegúrese de que el formato de datos se establece en "row". El formato de datos debe ser "row" o "column" para todos los cálculos de dinámica.

robot = loadrobot("omronEcobra600", DataFormat="row", Gravity=[0 0 -9.81]);

Genere una configuración aleatoria para robot.

q = randomConfiguration(robot);

Calcule los par motores de articulación necesarios para robot, para mantener estática esa configuración.

tau = inverseDynamics(robot,q)
tau = 1×4

    0.0000    0.0000  -19.6200         0

Utilice la función externalForce para generar matrices de fuerza y aplicarlas a un modelo de árbol de cuerpo rígido. La matriz de fuerza es un vector de m por 6 que tiene una fila para cada articulación del robot para aplicar una fuerza de seis elementos. Utilice la función externalForce y especifique el efector final para asignar adecuadamente la fuerza a la fila correcta de la matriz. Puede añadir múltiples matrices de fuerza a la vez para aplicar múltiples fuerzas a un robot.

Para calcular los par motores de articulación que contrarrestan estas fuerzas externas, utilice la función inverseDynamics.

Cargue un Universal Robots UR5e de Robotics System Toolbox™ loadrobot, especificado como un objeto rigidBodyTree. Actualice la gravedad y establezca el formato de datos en "row". El formato de datos debe ser "row" o "column" para todos los cálculos de dinámica.

manipulator = loadrobot("universalUR5e", DataFormat="row", Gravity=[0 0 -9.81]);
showdetails(manipulator)
--------------------
Robot: (10 bodies)

 Idx                Body Name                         Joint Name                         Joint Type                Parent Name(Idx)   Children Name(s)
 ---                ---------                         ----------                         ----------                ----------------   ----------------
   1                     base         base_link-base_fixed_joint                              fixed                    base_link(0)   
   2        base_link_inertia        base_link-base_link_inertia                              fixed                    base_link(0)   shoulder_link(3)  
   3            shoulder_link                 shoulder_pan_joint                           revolute            base_link_inertia(2)   upper_arm_link(4)  
   4           upper_arm_link                shoulder_lift_joint                           revolute                shoulder_link(3)   forearm_link(5)  
   5             forearm_link                        elbow_joint                           revolute               upper_arm_link(4)   wrist_1_link(6)  
   6             wrist_1_link                      wrist_1_joint                           revolute                 forearm_link(5)   wrist_2_link(7)  
   7             wrist_2_link                      wrist_2_joint                           revolute                 wrist_1_link(6)   wrist_3_link(8)  
   8             wrist_3_link                      wrist_3_joint                           revolute                 wrist_2_link(7)   flange(9)  
   9                   flange                     wrist_3-flange                              fixed                 wrist_3_link(8)   tool0(10)  
  10                    tool0                       flange-tool0                              fixed                       flange(9)   
--------------------

Obtenga la configuración inicial para manipulator.

q = homeConfiguration(manipulator);

Establezca la fuerza externa en shoulder_link. El vector de fuerza de entrada se expresa en el marco base.

fext1 = externalForce(manipulator,"shoulder_link",[0 0 0.0 0.1 0 0]);

Establezca la fuerza externa en el efector final, tool0. El vector de fuerza de entrada se expresa en el marco tool0.

fext2 = externalForce(manipulator,"tool0",[0 0 0.0 0.1 0 0],q);

Calcule los par motores de articulación necesarios para equilibrar las fuerzas externas. Para combinar las fuerzas, añada las matrices de fuerza juntas. Las aceleraciones y las velocidades de las articulaciones se asumen como cero (se introducen como []).

tau = inverseDynamics(manipulator,q,[],[],fext1+fext2)
tau = 1×6

   -0.0233  -52.4189  -14.4896   -0.0100    0.0100   -0.0000

Argumentos de entrada

contraer todo

Modelo de robot, especificado como un objeto rigidBodyTree. Para usar la función inverseDynamics, establezca la propiedad DataFormat en 'row' o 'column'.

Configuración del robot, especificada como un vector con posiciones para todas las articulaciones no fijas del modelo de robot. Puede generar una configuración utilizando homeConfiguration(robot) o randomConfiguration(robot), o especificando sus propias posiciones de articulación. Para usar la forma de vector de configuration, establezca la propiedad DataFormat para el robot en 'row' o 'column'.

Velocidades de articulación, especificadas como vector. El número de velocidades de articulación es igual a los grados de libertad de la velocidad del robot. Para usar la forma de vector de jointVel, establezca la propiedad DataFormat para el robot en 'row' o 'column'.

Aceleración de las articulaciones, devueltas como vector. La dimensión del vector de aceleraciؚón de las articulaciones es igual a los grados de libertad de la velocidad del robot. Cada elemento corresponde a una articulación específica en el robot. Para usar la forma de vector de jointAccel, establezca la propiedad DataFormat para el robot en 'row' o 'column'.

Matriz de fuerza externa, especificada como una matriz de n por 6 o de 6 por n, donde n es el número de grados de libertad de la velocidad del robot. La forma depende de la propiedad DataFormat del robot. El formato de datos 'row' usa una matriz de n por 6. El formato de datos 'column' usa 6 por n.

La matriz solo enumera valores distintos de cero en las ubicaciones correspondientes al cuerpo especificado. Puede añadir matrices de fuerza a la vez para especificar múltiples fuerzas sobre múltiples cuerpos.

Para crear la matriz para un par motor o fuerza específicos, consulte externalForce.

Argumentos de salida

contraer todo

Par motores de articulación, devueltos como vector. Cada elemento corresponde a un par motor aplicado a una articulación específica.

Más acerca de

contraer todo

Propiedades dinámicas

Si trabaja con dinámicas de robot, especifique la información de los distintos cuerpos del manipulador robótico utilizando estas propiedades de los objetos rigidBody:

  • Mass: masa del cuerpo rígido en kilogramos.

  • CenterOfMass: posición del centro de masa del cuerpo rígido, especificado como un vector con la forma [x y z]. El vector describe la ubicación del centro de masa del cuerpo rígido respecto a la estructura del cuerpo en metros. La función de objeto centerOfMass utiliza los valores de propiedad del cuerpo rígido al calcular el centro de masa de un robot.

  • Inertia: inercia del cuerpo rígido, especificada como un vector con la forma [Ixx Iyy Izz Iyz Ixz Ixy]. El vector es relativo a la estructura del cuerpo en kilogramos por metro cuadrado. El tensor de inercia es una matriz definida positiva con la forma:

    A 3-by-3 matrix. The first row contains Ixx, Ixy, and Ixz. The second contains Ixy, Iyy, and Iyz. The third contains Ixz, Iyz, and Izz.

    Los primeros tres elementos del vector Inertia son el momento de inercia, que son los elementos en diagonal del tensor de inercia. Los últimos tres elementos son el producto de la inercia, que son los elementos fuera de la diagonal del tensor de inercia.

Para obtener información relacionada con todo el modelo de manipulador robótico, especifique estas propiedades del objeto rigidBodyTree:

  • Gravity: aceleración gravitacional experimentada por el robot, especificada como un vector [x y z] en m/s2. De forma predeterminada, no existe aceleración gravitacional.

  • DataFormat: formato de los datos de entrada y salida de las funciones cinemáticas y dinámicas, especificado como "struct", "row" o "column".

Ecuaciones dinámicas

La dinámica de un cuerpo rígido de manipulador se rige por esta ecuación:

ddt[qq˙]=[q˙M(q)1(C(q,q˙)q˙G(q)J(q)TFExt+τ)]

también expresada como:

M(q)q¨=C(q,q˙)q˙G(q)J(q)TFExt+τ

donde:

  • M(q): es una matriz de masa de espacio articular basada en la configuración actual del robot. Calcule esta matriz utilizando la función de objeto massMatrix.

  • C(q,q˙): son los términos de Coriolis, que se multiplican por q˙ para calcular el producto de velocidad. Calcule el producto de velocidad utilizando la función de objeto velocityProduct.

  • G(q): son las fuerzas y los par motores de gravedad necesarios para que todas las articulaciones mantengan sus posiciones en la gravedad especificada Gravity. Calcule el par motor de gravedad utilizando la función de objeto gravityTorque.

  • J(q): es la jacobiana geométrica de la configuración de articulación especificada. Calcule la jacobiana geométrica utilizando la función de objeto geometricJacobian.

  • FExt: es una matriz de las fuerzas externas aplicadas al cuerpo rígido. Genere las fuerzas externas utilizando la función de objeto externalForce.

  • τ: son las fuerzas y los par motores de articulación, aplicados directamente como un vector a cada articulación.

  • q,q˙,q¨: son la configuración de articulación, las velocidades de articulación y las aceleraciones de las articulaciones, respectivamente, como vectores individuales. Para las articulaciones rotativas, especifique los valores en radianes, rad/s y rad/s2, respectivamente. Para las articulaciones prismáticas, especifíquelos en metros, m/s y m/s2.

Para calcular la dinámica directamente, utilice la función de objeto forwardDynamics. Esta función calcula las aceleraciones de las articulaciones para las combinaciones especificadas de las entradas anteriores.

Para realizar un conjunto de movimientos determinado, utilice la función de objeto inverseDynamics. La función calcula los par motores de articulación que son necesarios para obtener la configuración, así como las velocidades, aceleraciones y fuerzas externas especificadas.

Referencias

[1] Featherstone, Roy. Rigid Body Dynamics Algorithms. Springer US, 2008. DOI.org (Crossref), doi:10.1007/978-1-4899-7560-7.

Capacidades ampliadas

Historial de versiones

Introducido en R2017a

expandir todo