Contenido principal

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.

externalForce

Componer matriz de fuerza externa respecto a la base

Descripción

fext = externalForce(robot,bodyname,wrench) compone la matriz de fuerza externa, que se puede usar como entradas para inverseDynamics y forwardDynamics para aplicar una fuerza externa, wrench, al cuerpo especificado por bodyname. Se asume que la entrada wrench está en el marco base.

ejemplo

fext = externalForce(robot,bodyname,wrench,configuration) compone la matriz de fuerza externa si se asume que wrench está en el marco bodyname para la configuration especificada. La matriz de fuerza fext se proporciona en el marco base.

ejemplo

Ejemplos

contraer todo

Calcule las aceleraciones de las articulaciones resultantes para una determinada configuración de robot a la que se aplican fuerzas externas y fuerzas debidas a la gravedad. Se aplica una fuerza a un cuerpo concreto y se especifica la gravedad para todo el robot.

Cargue un modelo de robot KUKA iiwa 14 de Robotics System Toolbox™ loadrobot. El robot se especifica como un objeto rigidBodyTree.

Establezca el formato de datos en "row". El formato de datos debe ser "row" o "column" para todos los cálculos de dinámica.

Establezca la gravedad. De forma predeterminada, se asume que la gravedad es cero.

kukaIIWA14 = loadrobot("kukaIiwa14",DataFormat="row",Gravity=[0 0 -9.81]);

Obtenga la configuración inicial para el robot kukaIIWA14.

q = homeConfiguration(kukaIIWA14);

Especifique el vector de fuerza que representa las fuerzas externas que experimenta el robot. Utilice la función externalForce para generar la matriz de fuerzas externas. Especifique el modelo de robot, el efector final que experimenta la fuerza, el vector de fuerza y la configuración actual del robot. wrench se da con relación al marco de cuerpo "iiwa_link_ee_kuka", que requiere que especifique la configuración del robot, q.

wrench = [0 0 0.5 0 0 0.3];
fext = externalForce(kukaIIWA14,"iiwa_link_ee_kuka",wrench,q);

Calcule las aceleraciones de las articulaciones resultantes debidas a la gravedad, con la fuerza externa aplicada al efector final "iiwa_link_ee_kuka" cuando kukaIIWA14 está en su configuración inicial. Las velocidades y los par motores de articulación se asumen como cero (se introducen como un vector vacío, []).

qddot = forwardDynamics(kukaIIWA14,q,[],[],fext)
qddot = 1×7

   -0.0023   -0.0112    0.0036   -0.0212    0.0067   -0.0075  499.9920

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 externalForce, establezca la propiedad DataFormat en "row" o "column".

Nombre del cuerpo al que se aplica la fuerza externa, especificado como un vector de caracteres o un escalar de cadena. Este nombre del cuerpo debe coincidir con un cuerpo en el objeto robot.

Tipos de datos: char | string

Par motores y fuerzas aplicados al cuerpo, especificados como un vector [Tx Ty Tz Fx Fy Fz]. Los primeros tres elementos de la fuerza corresponden a los momentos alrededor de los ejes xyz. Los últimos tres elementos son fuerzas lineales a lo largo de los mismos ejes. A menos que especifique la configuración configuration del robot, se asume que la fuerza es relativa al marco de la base.

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'.

Argumentos de salida

contraer todo

Matriz de fuerza externa, que se devuelve como una matriz de n por 6 o de 6 por n, donde n es el número de velocidad (grados de libertad) 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 compuesta 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. Use la matriz de fuerza externa para especificar fuerzas externas para funciones dinámicas inverseDynamics y forwardDynamics.

Más acerca de

contraer todo

Referencias

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

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2017a

expandir todo