Contenido principal

Calcular los pares articulares para equilibrar una fuerza y momento de punto final

Genere pares motor para equilibrar una fuerza de punto final que actúa sobre el efector final de un robot plano. El efector final puede definirse en el marco del cuerpo del efector final o como el marco de punta de la herramienta que se acopla a un punto a una distancia fija del marco del efector final. Para calcular los pares articulares con diversos métodos, utilice las funciones de objeto geometricJacobian y inverseDynamics para un modelo de robot rigidBodyTree.

Inicializar el robot

El robot twoJointRigidBodyTree es un robot plano 2D. Las configuraciones de articulaciones se generan como vectores columna.

twoJointRobot = twoJointRigidBodyTree("column");

En este ejemplo, emularemos una fuerza externa que actúa sobre el marco del cuerpo "tool". Esta fuerza también puede actuar en un marco arbitrario a una distancia fija con respecto al cuerpo "tool". Llamemos a ese marco "toolTip". Añada un marco "toolTip" nuevo al cuerpo "tool" en el vector de traslación "[0.1,0,0]" desde el marco del cuerpo "tool".

toolBody = twoJointRobot.Bodies{end};
addFrame(toolBody,"toolTip","tool",trvec2tform([0.1,0,0]));

Especifique el efector final como marco "toolTip". También se puede alternar el efector final al marco del cuerpo "tool" seleccionándolo desde el menú desplegable. Los cálculos posteriores seguirán siendo consistentes independientemente del marco.

eeFrameName = "toolTip"
eeFrameName = 
"toolTip"

Configuración del problema

La fuerza de punto final eeForce es un vector columna con una combinación de fuerza lineal y momento que actúa sobre el cuerpo del efector final ("tool" or "toolTip" frame). Observe que este vector se expresa en el marco de coordenadas de la base y se muestra a continuación.

endpointforcedepiction.PNG

fx = 2; 
fy = 2;
fz = 0;
nx = 0;
ny = 0;
nz = 3;
eeForce = [nx;ny;nz;fx;fy;fz];

Especifique la configuración de articulaciones del robot para los pares motor de equilibrado.

q = [pi/3;pi/4];
Tee = getTransform(twoJointRobot,q,eeFrameName);

Método de jacobiana geométrica

Utilizando el principio del trabajo virtual [1], encuentre el par motor de equilibrado utilizando la función de objeto geometricJacobian y multiplicando la traspuesta de la jacobiana por el vector de fuerza de punto final.

J = geometricJacobian(twoJointRobot,q,eeFrameName);
jointTorques = J' * eeForce;
fprintf("Joint torques using geometric Jacobian (Nm): [%.3g, %.3g]",jointTorques);
Joint torques using geometric Jacobian (Nm): [1.16, 1.53]

Dinámica inversa para una fuerza transformada espacialmente

Con otro método, calcule el par motor de equilibrado calculando la dinámica inversa con la fuerza de punto final transformada espacialmente al marco base.

Transformar espacialmente una fuerza desde el marco del efector final al marco base significa ejercer una nueva fuerza-par en un marco que resulta estar situado junto al marco base en el espacio, pero que sigue fijado al cuerpo del efector final; esta nueva fuerza tiene el mismo efecto que la fuerza original ejercida en el origen del efector final. En la figura siguiente, fext y next son la fuerza y el momento lineales de punto final, respectivamente, y feebase y neebase son las fuerzas y los momentos transformados espacialmente en el efector final (el marco "tool" o "toolTip"), respectivamente. En el fragmento siguiente, fbase_ee es la fuerza-par transformada espacialmente.

r = tform2trvec(Tee);
fbase_ee = [cross(r,[fx fy fz])' + [nx;ny;nz]; fx;fy;fz];
fext = -externalForce(twoJointRobot, eeFrameName, fbase_ee);
jointTorques2 = inverseDynamics(twoJointRobot, q, [], [], fext);
fprintf("Joint torques using inverse dynamics (Nm): [%.3g, %.3g]",jointTorques2)
Joint torques using inverse dynamics (Nm): [1.16, 1.53]

Dinámica inversa para la fuerza del efector final

En lugar de transformar espacialmente la fuerza de punto final al marco base, utilice un tercer método expresando la fuerza del efector final en su propio marco de coordenadas (fee_ee). Transforme los vectores de momento y fuerza lineal en el marco de coordenadas del efector final. Luego, especifique esa fuerza y la configuración actual para la función externalForce. Calcule la dinámica inversa a partir de este vector de fuerza.

eeLinearForce = Tee \ [fx;fy;fz;0];
eeMoment = Tee \ [nx;ny;nz;0];
fee_ee = [eeMoment(1:3); eeLinearForce(1:3)];
fext = -externalForce(twoJointRobot,eeFrameName,fee_ee,q);
jointTorques3 = inverseDynamics(twoJointRobot, q, [], [], fext);
fprintf("Joint torques using inverse dynamics (Nm): [%.3g, %.3g]",jointTorques3);
Joint torques using inverse dynamics (Nm): [1.16, 1.53]

Referencias

[1]Siciliano, B., Sciavicco, L., Villani, L., & Oriolo, G. (2009). Differential kinematics and statics. Robotics: Modelling, Planning and Control, 105-160.

[2]Harry Asada, and John Leonard. 2.12 Introduction to Robotics. Fall 2005. Capítulo 6 Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. Licencia: Creative Commons BY-NC-SA.

Consulte también

Objetos

Funciones