Main Content

addCollision

Añada una geometría de colisión a un cuerpo rígido

Descripción

addCollision(body,type,parameters) añade una geometría de colisión del tipo type especificado y con los parámetros geométricos parameters dados en el cuerpo rígido body especificado.

ejemplo

addCollision(body,collisionObj) añade un objeto de geometría de colisión al cuerpo rígido body, especificado como uno de estos objetos de colisión:

Esta sintaxis utiliza la propiedad Pose del objeto de colisión especificado para transformar los vértices de la colisión en el marco del cuerpo rígido.

addCollision(___,tform) especifica una transformación para la geometría de colisión con relación al marco del cuerpo junto con cualquier combinación de argumentos de entrada de sintaxis anteriores.

Ejemplos

contraer todo

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

Cuerpo rígido, especificado como un objeto rigidBody.

Tipo de geometría de la geometría de colisión, especificado como un escalar de cadena. El tipo especificado determina el formato de la entrada parameters.

  • "box"[x y z]

  • "cylinder"[radius length]

  • "sphere"radius

  • "mesh" — matriz de vértices de n por 3 o un nombre de archivo STL o DAE como cadena

Tipos de datos: char | string

Parámetros de la geometría de colisión, especificados como vector numérico, matriz numérica o escalar de cadena. La entrada type determina el formato de este valor.

  • "box"[x y z]

  • "cylinder"[radius length]

  • "sphere"radius

  • "mesh" — Matriz de vértices de n por 3 o un nombre de archivo STL o DAE como cadena

Tipos de datos: single | double | char | string

Objeto de geometría de colisión, especificado como un objeto collisionBox, collisionCylinder, collisionSphere o collisionMesh.

Transformación de una geometría de colisión, especificada como una transformación homogénea de 4 por 4. Si se especifica un objeto de colisión para la entrada collisionObj, esta función aplica la transformación especificada a la propiedad Pose del objeto de colisión especificado para transformar los vértices de la colisión en el marco del cuerpo rígido.

Tipos de datos: single | double

Capacidades ampliadas

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

Historial de versiones

Introducido en R2020b