Main Content

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.

rigidBody

Cree un cuerpo rígido

Descripción

El objeto rigidBody representa un cuerpo rígido. Un cuerpo rígido es un componente básico de todo manipulador robótico con estructura de árbol. Cada rigidBody tiene un objeto rigidBodyJoint acoplado que define cómo puede moverse el cuerpo rígido. Los cuerpos rígidos se ensamblan en un modelo de robot con estructura de árbol mediante rigidBodyTree.

Establezca un objeto de articulación en la propiedad Joint antes de llamar a addBody para añadir el cuerpo rígido al modelo de robot. Si un cuerpo rígido es un árbol de cuerpo rígido, no puede modificar directamente sus propiedades porque se corromperán las relaciones entre los cuerpos. Utilice replaceJoint para modificar toda la estructura de árbol.

Creación

Descripción

ejemplo

body = rigidBody(name) crea un cuerpo rígido con el nombre especificado. De forma predeterminada, el cuerpo tiene una articulación fija.

Argumentos de entrada

expandir todo

Nombre del cuerpo rígido, especificado como un escalar de cadena o un vector de caracteres. Este nombre debe ser exclusivo para el cuerpo de modo que pueda accederse a él en un objeto rigidBodyTree.

Propiedades

expandir todo

El nombre del cuerpo rígido, especificado como un escalar de cadena o un vector de caracteres. Este nombre debe ser exclusivo en el cuerpo para que pueda encontrarse en un objeto rigidBodyTree.

Tipos de datos: char | string

El objeto rigidBodyJoint, especificado como un identificador. De forma predeterminada, la articulación es de tipo 'fixed'.

Masa del cuerpo rígido, especificada como un escalar numérico en kilogramos.

Posición del centro de masa del cuerpo rígido, especificado como un vector [x y z]. El vector describe la ubicación del centro de masa respecto al marco del cuerpo en metros.

Inercia del cuerpo rígido, especificada como un vector [Ixx Iyy Izz Iyz Ixz Ixy] respecto al marco del cuerpo en kilogramos por metro cuadrado. Los primeros tres elementos del vector son los elementos diagonales del tensor de inercia. Los últimos tres elementos son los elementos no diagonales del tensor de inercia. El tensor de inercia es una matriz simétrica semidefinida:

Elemento primario del cuerpo rígido, especificado como un identificador de objeto rigidBody. La articulación del cuerpo rígido define cómo puede moverse este cuerpo respecto al elemento primario. Esta propiedad está vacía hasta que el cuerpo rígido se añade a un modelo de robot rigidBodyTree.

Elementos secundarios de cuerpo rígido, especificados como un arreglo de celdas de identificadores de objeto rigidBody. Estos elementos secundarios de cuerpo rígido están todos acoplados a este objeto de cuerpo rígido. Esta propiedad está vacía hasta que el cuerpo rígido se añade a un modelo de robot rigidBodyTree y se añade al menos otro cuerpo al árbol con este cuerpo como elemento primario.

Geometrías visuales, especificadas como un arreglo de celdas de escalares de cadena o vectores de caracteres. Cada vector de caracteres describe un tipo y un origen de una geometría visual. Por ejemplo, si se acopla un archivo de malla link_0.stl al cuerpo rígido, la visual será Mesh:link_0.stl. Las geometrías visuales se añaden al cuerpo rígido mediante addVisual.

Geometrías de colisión, especificadas como un arreglo de celdas de vectores de caracteres. Cada vector de caracteres describe el tipo de objeto de colisión y los parámetros relevantes de la geometría de colisión. Para modificar las geometrías de colisión de un cuerpo rígido, utilice las funciones addCollision y clearCollision.

Funciones del objeto

copyCreate a deep copy of rigid body
addCollisionAñada una geometría de colisión a un cuerpo rígido
addVisualAñadir datos de geometrías visuales a un cuerpo rígido
clearCollisionEliminar todas las geometrías de colisión asociadas
clearVisualEliminar todas las geometrías visuales

Ejemplos

contraer todo

Añada un cuerpo rígido y la correspondiente articulación a un árbol de cuerpo rígido. Cada objeto rigidBody contiene un objeto rigidBodyJoint y debe añadirse a rigidBodyTree mediante addBody.

Cree un árbol de cuerpo rígido.

rbtree = rigidBodyTree;

Cree un cuerpo rígido con un nombre exclusivo.

body1 = rigidBody('b1');

Cree una articulación giratoria. De forma predeterminada, el objeto rigidBody tiene una articulación fija. Reemplace la articulación asignando un objeto rigidBodyJoint nuevo a la propiedad body1.Joint.

jnt1 = rigidBodyJoint('jnt1','revolute');
body1.Joint = jnt1;

Añada el cuerpo rígido al árbol. Especifique el nombre del cuerpo al que desea acoplar el cuerpo rígido. Como se trata del primer cuerpo, utilice el nombre base del árbol.

basename = rbtree.BaseName;
addBody(rbtree,body1,basename)

Utilice showdetails en el árbol para confirmar que el cuerpo rígido y la articulación se han añadido correctamente.

showdetails(rbtree)
--------------------
Robot: (1 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1           b1         jnt1     revolute             base(0)   
--------------------

Utilice los parámetros Denavit-Hartenberg (DH) del robot Puma560® para construir un robot. Los cuerpos rígidos se añaden uno tras otro con la transformada de elemento primario a secundario especificada por el objeto de articulación.

Los parámetros DH definen la geometría del robot en términos de cómo se acopla cada cuerpo rígido a su elemento primario. Para facilitarlo, configure los parámetros del robot Puma560 en una matriz[1]. El robot Puma es un manipulador de cadena en serie. Los parámetros DH son relativos a la línea anterior de la matriz, correspondiente al acoplamiento de la articulación anterior.

dhparams = [0   	pi/2	0   	0;
            0.4318	0       0       0
            0.0203	-pi/2	0.15005	0;
            0   	pi/2	0.4318	0;
            0       -pi/2	0   	0;
            0       0       0       0];

Cree un objeto de árbol de cuerpo rígido para construir el robot.

robot = rigidBodyTree;

Cree el primer cuerpo rígido y añádalo al robot. Para añadir un cuerpo rígido:

  1. Cree un objeto rigidBody y asígnele un nombre exclusivo.

  2. Cree un objeto rigidBodyJoint y asígnele un nombre exclusivo.

  3. Utilice setFixedTransform para especificar la transformación de cuerpo a cuerpo con parámetros DH. El último elemento de los parámetros DH, theta, se ignora porque el ángulo depende de la posición de la articulación.

  4. Llame a addBody para acoplar la primera articulación del cuerpo al marco base del robot.

body1 = rigidBody('body1');
jnt1 = rigidBodyJoint('jnt1','revolute');

setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;

addBody(robot,body1,'base')

Cree y añada otros cuerpos rígidos al robot. Cuando llame a addBody para acoplarlo, especifique el nombre del cuerpo anterior. Cada transformada fijada es relativa al marco de coordenadas de la articulación anterior.

body2 = rigidBody('body2');
jnt2 = rigidBodyJoint('jnt2','revolute');
body3 = rigidBody('body3');
jnt3 = rigidBodyJoint('jnt3','revolute');
body4 = rigidBody('body4');
jnt4 = rigidBodyJoint('jnt4','revolute');
body5 = rigidBody('body5');
jnt5 = rigidBodyJoint('jnt5','revolute');
body6 = rigidBody('body6');
jnt6 = rigidBodyJoint('jnt6','revolute');

setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');

body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;

addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
addBody(robot,body4,'body3')
addBody(robot,body5,'body4')
addBody(robot,body6,'body5')

Verifique que el robot se ha construido correctamente con la función showdetails o show. showdetails enumera todos los cuerpos en la ventana de comandos de MATLAB®. show muestra el robot con una determinada configuración (de forma predeterminada, la inicial). Las llamadas a axis modifican los límites de eje y ocultan las etiquetas de eje.

showdetails(robot)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1        body1         jnt1     revolute             base(0)   body2(2)  
   2        body2         jnt2     revolute            body1(1)   body3(3)  
   3        body3         jnt3     revolute            body2(2)   body4(4)  
   4        body4         jnt4     revolute            body3(3)   body5(5)  
   5        body5         jnt5     revolute            body4(4)   body6(6)  
   6        body6         jnt6     revolute            body5(5)   
--------------------
show(robot);
axis([-0.5,0.5,-0.5,0.5,-0.5,0.5])
axis off

Referencias

[1] Corke, P. I. y B. Armstrong-Helouvry. “A Search for Consensus among Model Parameters Reported for the PUMA 560 Robot”. Proceedings of the 1994 IEEE International Conference on Robotics and Automation, IEEE Comput. Soc. Press, 1994, págs. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

Referencias

[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Reading, MA: Addison-Wesley, 1989.

[2] Siciliano, Bruno. Robotics: Modelling, Planning and Control. London: Springer, 2009.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2016b

expandir todo