externalForce
Componer matriz de fuerza externa respecto a la base
Sintaxis
Descripción
compone la matriz de fuerza externa, que se puede usar como entradas para fext
= externalForce(robot
,bodyname
,wrench
)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.
Ejemplos
Calcular las dinámicas directas debidas a fuerzas externas en el modelo de árbol de cuerpo rígido
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
Calcular el par motor de articulación para contrarrestar fuerzas externas
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
robot
— Modelo de robot
objeto rigidBodyTree
Modelo de robot, especificado como un objeto rigidBodyTree
. Para usar la función externalForce
, establezca la propiedad DataFormat
en "row"
o "column"
.
bodyname
— Nombre del cuerpo al que se aplica la fuerza externa
escalar de cadena | vector de caracteres
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
wrench
— Par motores y fuerzas aplicados al cuerpo
vector [Tx Ty Tz Fx Fy Fz]
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.
configuration
— Configuración del robot
vector
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
fext
— Matriz de fuerza externa
matriz de n por 6 | matriz de 6 por n
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
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 objetocenterOfMass
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: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:
también expresada como:
donde:
: 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
.: son los términos de Coriolis, que se multiplican por para calcular el producto de velocidad. Calcule el producto de velocidad utilizando la función de objeto
velocityProduct
.: 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 objetogravityTorque
.: 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
.: 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.
: 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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Indicaciones y limitaciones de uso:
Cuando cree el objeto rigidBodyTree
, utilice la sintaxis que especifica MaxNumBodies
como el límite superior para añadir cuerpos al modelo de robot. También debe especificar la propiedad DataFormat
como un par nombre-valor. Por ejemplo:
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
Para minimizar el uso de datos, restrinja el límite superior a un número aproximado al número de cuerpos previsto del modelo. La generación de código admite todos los formatos de datos. Para usar las funciones de dinámica, el formato de datos debe configurarse en "row"
o "column"
.
Las funciones show
y showdetails
no admiten la generación de código.
Historial de versiones
Introducido en R2017aR2024a: Soporte de asignación de memoria estática
externalForce
ahora admite la generación de código con asignación de memoria dinámica deshabilitada. Para obtener más información sobre cómo deshabilitar la asignación de memoria dinámica, consulte Set Dynamic Memory Allocation Threshold (MATLAB Coder).
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)