Main Content

show

Mostrar modelo de robot en la figura

Descripción

ejemplo

show(robot) representa los marcos del cuerpo del modelo de robot en una figura con la configuración inicial predefinida. Tanto Frames como Visuals se muestran automáticamente.

show(robot,configuration) usa las posiciones de las articulaciones especificadas en configuration para mostrar los marcos del cuerpo del robot.

show(___,Name,Value) especifica las opciones mediante uno o más argumentos de par nombre-valor, además de cualquier combinación de argumentos de entrada de las sintaxis anteriores. Por ejemplo, 'Frames','off' oculta los marcos del cuerpo rígido en la figura.

ax = show(___) devuelve el identificador de los ejes en el que se representa el robot.

Ejemplos

contraer todo

Puede importar robots que tienen archivos .stl relacionados con el archivo de formato de descripción de robot unificado (URDF) para describir las geometrías visuales del robot. Cada cuerpo rígido tiene especificada una geometría visual individual. La función importrobot analiza el archivo URDF para obtener el modelo de robot y las geometrías visuales. La función asume que la geometría visual y la geometría de colisión del robot son iguales y asigna las geometrías visuales como geometrías de colisión de los cuerpos correspondientes.

Utilice la función show para mostrar la geometría visual y de colisión del modelo de robot en una figura. A continuación, puede interactuar con el modelo haciendo clic en componentes para inspeccionarlos y haciendo clic con el botón secundario para alternar la visibilidad.

Importe un modelo de robot como un archivo URDF. Las ubicaciones de los archivos .stl se deben especificar correctamente en este URDF. Para añadir otros archivos .stl a cuerpos rígidos individuales, consulte addVisual.

robot = importrobot('iiwa14.urdf');

Visualice el robot con el modelo visual correspondiente. Haga clic en los cuerpos o los marcos para inspeccionarlos. Haga clic con el botón secundario en los cuerpos para alternar la visibilidad de cada geometría visual.

show(robot,'visuals','on','collision','off');

{"String":"Figure contains an axes object. The axes object contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.","Tex":[],"LaTex":[]}

Visualice el robot con las geometrías de colisión correspondientes. Haga clic en los cuerpos o los marcos para inspeccionarlos. Haga clic con el botón secundario en los cuerpos para alternar la visibilidad de cada geometría de colisión.

show(robot,'visuals','off','collision','on'); 

{"String":"Figure contains an axes object. The axes object contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_6_coll_mesh, iiwa_link_7_coll_mesh.","Tex":[],"LaTex":[]}

Muestre diferentes configuraciones de robot creadas mediante un modelo RigidBodyTree. Utilice las funciones homeConfiguration o randomConfiguration para generar la estructura que define todas las posiciones de articulación.

Cargue robots de ejemplo como objetos RigidBodyTree.

load exampleRobots.mat

Cree una estructura para la configuración inicial de un robot Puma. La estructura incluye nombres y posiciones de articulación para todos los cuerpos del modelo de robot.

config = homeConfiguration(puma1)
config=1×6 struct array with fields:
    JointName
    JointPosition

Muestre la configuración inicial utilizando show. No es necesario especificar una entrada de configuración.

show(puma1);

{"String":"Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.","Tex":[],"LaTex":[]}

Modifique la configuración y establezca la segunda posición de articulación en pi/2. Muestre el cambio resultante en la configuración del robot.

config(2).JointPosition = pi/2;
show(puma1,config);

{"String":"Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.","Tex":[],"LaTex":[]}

Cree configuraciones aleatorias y muéstrelas.

show(puma1,randomConfiguration(puma1));

{"String":"Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.","Tex":[],"LaTex":[]}

Utilice los parámetros Denavit-Hartenberg (DH) del robot Puma560® para construir un robot. Los cuerpos rígidos se añaden de uno en uno con la transformación de elemento primario en 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 principal. 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 fila 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 único.

  2. Cree un objeto rigidBodyJoint y asígnele un nombre único.

  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 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. Especifique el nombre del cuerpo anterior llamando a addBody para acoplarlo. 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

{"String":"","Tex":[],"LaTex":[]}

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.

Cargue un modelo de robot y modifique las mallas de colisión. Borre las mallas de colisión existentes, añada primitivas de objeto de colisión simples y compruebe si determinadas configuraciones se encuentran en colisión.

Cargar un modelo de robot

Cargue un modelo de robot preconfigurado en el área de trabajo mediante la función loadrobot. Este modelo ya tiene mallas de colisión especificadas para cada cuerpo. Itere a través de todos los elementos del cuerpo rígido y borre las mallas de colisión existentes. Confirme que las mallas existentes hayan desaparecido.

robot = loadrobot('kukaIiwa7','DataFormat','column');

for i = 1:robot.NumBodies
    clearCollision(robot.Bodies{i})
end

show(robot,'Collisions','on','Visuals','off');

{"String":"Figure contains an axes object. The axes object contains 21 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.","Tex":[],"LaTex":[]}

Añadir colisiones en forma de cilindros

Añada iterativamente una colisión en forma de cilindro a cada cuerpo. Omita algunos cuerpos para este modelo concreto, pues se solapan y siempre colisionan con el efector final (cuerpo 10).

collisionObj = collisionCylinder(0.05,0.25);

for i = 1:robot.NumBodies
    if i > 6 && i < 10
        % Skip these bodies.
    else
        addCollision(robot.Bodies{i},collisionObj)
    end
end

show(robot,'Collisions','on','Visuals','off');

{"String":"Figure contains an axes object. The axes object contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.","Tex":[],"LaTex":[]}

Comprobar si existen colisiones

Genere una serie de configuraciones aleatorias. Compruebe si el robot está en colisión en cada una de las configuraciones. Visualice las configuraciones que presenten una colisión.

figure
rng(0) % Set random seed for repeatability.
for i = 1:20
    config = randomConfiguration(robot);
    isColliding = checkCollision(robot,config,'SkippedSelfCollisions','parent');
    if isColliding
        show(robot,config,'Collisions','on','Visuals','off');
        title('Collision Detected')
    else
        % Skip non-collisions.
    end
end

{"String":"Figure contains an axes object. The axes object with title Collision Detected contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.","Tex":"Collision Detected","LaTex":[]}

Argumentos de entrada

contraer todo

Modelo de robot, especificado como un objeto rigidBodyTree.

Configuración del robot, especificada como un vector de posiciones de articulación o una estructura con nombres y posiciones de articulación para todos los cuerpos del modelo de robot. Puede generar una configuración utilizando homeConfiguration(robot) o randomConfiguration(robot), o especificando sus propias posiciones de articulación en una estructura. Para usar la forma de vector de configuration, establezca la propiedad DataFormat para el robot en "row" o "column".

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.

En versiones anteriores a R2021a, use comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: 'Frames','off' oculta los marcos del cuerpo rígido en la figura.

Elemento principal de los ejes, especificado como un par separado por comas compuesto por 'Parent' y un objeto Axes en el que se representa el robot. De forma predeterminada, el robot se representa en los ejes activos.

Opción para conservar la representación del robot, especificada como un par separado por comas compuesto por 'PreservePlot' y un 1 (true) o 0(false) lógicos. Cuando especifica este argumento como true, la función no sobrescribe las representaciones anteriores mostradas al llamar a show. Esta configuración funciona de manera similar a hold on para una figura de MATLAB® estándar, pero se limita a los marcos del cuerpo del robot. Cuando especifica este argumento como false, la función sobrescribe las representaciones anteriores del robot.

Nota

Cuando el valor de 'PreservePlot' es true, el valor de 'FastUpdate' debe ser false.

Tipos de datos: logical

Visualización de marcos del cuerpo, especificada como un par separado por comas compuesto por 'Frames' y 'on' u 'off'. Estos son los marcos de coordenadas de cuerpos individuales en el árbol de cuerpo rígido.

Tipos de datos: char | string

Visualización de geometrías visuales, especificada como un par separado por comas compuesto por 'Visuals' y 'on' u 'off'. Las geometrías visuales individuales también se pueden desactivar haciendo clic con el botón secundario en la figura.

Especifique las geometrías visuales individuales usando addVisual. Para importar un modelo de robot URDF con archivos .stl para mallas, consulte la función importrobot.

Tipos de datos: char | string

Visualización de geometrías de colisión, especificada como un par separado por comas compuesto por 'Collisions' y 'on' u 'off'.

Añada geometrías de colisión a los cuerpos rígidos individuales del modelo de robot usando la función addCollision. Para importar un modelo de robot URDF con archivos .stl para mallas, consulte la función importrobot.

Tipos de datos: char | string

Posición del robot, especificada como un par separado por comas compuesto por 'Position' y un vector de cuatro elementos con el formato [x y z yaw]. Los elementos x, y y z especifican la posición en metros, y yaw especifica el ángulo de guiñada en radianes.

Tipos de datos: single | double

Actualización rápida de graficas existentes, especificada como un par separado por comas compuesto por 'FastUpdate' y un 0 (false) o 1(true) lógicos. Debe usar la función de objeto show para mostrar inicialmente el modelo de robot antes de poder especificarlo con este argumento.

Nota

Cuando el valor de 'FastUpdate' es true, el valor de 'PreservePlot' debe ser false.

Tipos de datos: logical

Argumentos de salida

contraer todo

Identificador gráfico de ejes, devuelto como un objeto Axes. Este objeto contiene las propiedades de la figura en la que se representa el robot.

Sugerencias

Un modelo de robot tiene componentes visuales asociados. Cada objeto rigidBody contiene un marco de coordenadas que se muestra como el marco del cuerpo. Cada cuerpo también puede tener mallas visuales asociadas. De forma predeterminada, ambos componentes se muestran automáticamente. Puede inspeccionar o modificar los componentes visuales de la visualización del árbol de cuerpo rígido. Haga clic en los marcos del cuerpo o las mallas visuales para resaltarlos en amarillo y ver el nombre del cuerpo asociado, el índice y el tipo de articulación. Haga clic con el botón secundario para alternar la visualización de los componentes individuales.

  • Marcos del cuerpo: los marcos del cuerpo individuales se muestran como un marco de coordenadas de 3 ejes. Los marcos fijos se representan en color rosa. Los tipos de articulaciones móviles se muestran como ejes RGB. Puede hacer clic en un marco del cuerpo para ver el eje de movimiento. Las articulaciones prismáticas muestran una flecha amarilla en la dirección del eje de movimiento y las articulaciones giratorias muestran una flecha circular alrededor del eje de rotación.

  • Mallas visuales: las geometrías visuales individuales se especifican usando el método addVisual o la función importrobot para importar un modelo de robot con archivos .stl especificados. Al hacer clic con el botón secundario en cuerpos individuales de una figura, puede desactivar sus mallas o especificar el par nombre-valor Visuals para ocultar todas las geometrías visuales.

Historial de versiones

Introducido en R2016b