Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

showCollisionArray

Mostrar arreglo de objetos de colisión en la figura

Desde R2023b

    Descripción

    ejemplo

    [ax,patches] = showCollisionArray(collArray) traza un arreglo de objetos de colisión en una figura y devuelve los ejes en los que se trazan los objetos de colisión y los parches de cada objeto de colisión.

    [___] = showCollisionArray(___,Name=Value) especifica opciones adicionales utilizando uno o más argumentos de nombre-valor además de todos los argumentos de la sintaxis anterior. Por ejemplo, Parent=ax1 especifica ax1 como los ejes en los que dibujar los objetos de colisión.

    Ejemplos

    contraer todo

    Cargue un archivo STL que contenga una triangulación de contenedores rectangulares y luego visualice la triangulación de contenedores.

    meshTri = stlread("bin.stl");
    trisurf(meshTri)
    axis equal

    Figure contains an axes object. The axes object contains an object of type patch.

    Cree una malla de colisión utilizando los puntos de la triangulación del contenedor y luego visualice la malla. Tenga en cuenta que, cuando aproxima la triangulación del contenedor como una malla de colisión, el objeto collisionMesh utiliza el envolvente convexa de la triangulación del contenedor para aproximar el contenedor. Como resultado, la malla de colisión es convexa, a diferencia de la triangulación bin no convexa. El objeto collisionMesh hace esto porque la verificación de colisiones es más eficiente con mallas convexas. Sin embargo, esta aproximación convexa no es ideal para contenedores porque los robots pueden manipular contenedores u objetos dentro de los contenedores.

    meshColl = collisionMesh(meshTri.Points);
    [~,p] = show(meshColl);
    view(145,30) % Change view so it is easier to view the inside of bin
    axis equal
    hold on

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains an object of type patch.

    Crea una lata de refresco usando un cilindro de colisión y establece la pose de modo que quede en el centro del contenedor. Luego, muéstralo en la malla de colisión convexa.

    sodacan = collisionCylinder(0.1,0.4,Pose=trvec2tform([0 0 .3]));
    show(sodacan);

    Configure la caja para que sea transparente para que pueda ver la superposición entre el contenedor y la lata de refresco.

    p.FaceAlpha = 0.25;
    hold off

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 2 objects of type patch.

    Verifique la colisión entre la lata de refresco y la aproximación convexa del contenedor, y observe que están en colisión.

    isCollidingConvex = checkCollision(sodacan,meshColl)
    isCollidingConvex = 1
    

    Para obtener una mejor aproximación del contenedor para la verificación de colisiones, descomponga la malla no convexa original en múltiples mallas convexas utilizando la descomposición convexa aproximada jerárquica voxelizada (V-HACD).

    Utilice la función collisionVHACD para descomponer la triangulación no convexa original en mallas de colisión convexas. Luego, muestra el contenedor descompuesto con la lata de refresco.

    decomposedBin = collisionVHACD(meshTri);
    showCollisionArray([decomposedBin {sodacan}]);
    view(145,30)
    axis equal

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 33 objects of type patch.

    Comprobar colisión con todas las mallas que se aproximan al contenedor. Tenga en cuenta que la lata de refresco no choca con la aproximación no convexa descompuesta del contenedor. Si necesita una descomposición más precisa del contenedor, puede especificar opciones de solver personalizadas utilizando el objeto vhacdOptions .

    isColliding = false(1,length(decomposedBin));
    for i = 1:length(decomposedBin)
        isColliding(i) = checkCollision(sodacan,decomposedBin{i});
    end
    isCollidingAll = all(isColliding)
    isCollidingAll = logical
       0
    
    

    Argumentos de entrada

    contraer todo

    Objetos de colisión, especificados como un arreglo de celdas de elementos N de objetos de geometría de colisión. N es el número de objetos de colisión en el arreglo de celdas. Un objeto de colisión debe ser uno de estos objetos:

    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.

    Ejemplo: showCollisionArray(collArr,Parent=ax1) especifica ax1 como los ejes en los que dibujar los objetos de colisión.

    Ejes principales, especificados como un objeto Axes en el que dibujar los objetos de colisión en collArray. De forma predeterminada, la función traza los objetos de colisión en los ejes activos.

    Orden de color, especificado como una matriz de tres columnas de tripletes RGB. Esta propiedad define la paleta de colores que MATLAB® usa para crear objetos de trazado como Line, Scatter y Bar objetos. Cada fila de la matriz es un triplete RGB. Un triplete RGB es un vector de tres elementos cuyos elementos especifican las intensidades de los componentes rojo, verde y azul de un color. Las intensidades deben estar en el rango [0, 1].

    Esta tabla enumera los colores predeterminados.

    Triplete RGBCódigo de color hexadecimalApariencia
    [0 0.4470 0.7410]"#0072BD"

    Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

    [0.8500 0.3250 0.0980]"#D95319"

    Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

    [0.9290 0.6940 0.1250]"#EDB120"

    Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

    [0.4940 0.1840 0.5560]"#7E2F8E"

    Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

    [0.4660 0.6740 0.1880]"#77AC30"

    Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

    [0.3010 0.7450 0.9330]"#4DBEEE"

    Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

    [0.6350 0.0780 0.1840]"#A2142F"

    Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

    MATLAB asigna colores a los objetos según su orden de creación. Por ejemplo, al trazar líneas, la primera línea usa el primer color, la segunda línea usa el segundo color, y así sucesivamente. Si hay más líneas que colores, el ciclo se repite.

    Cambiar el orden de los colores antes o después del trazado

    Puede cambiar el orden de los colores de cualquiera de estas formas:

    • Llame a la función colororder para cambiar el orden de colores de todos los ejes de una figura. Los colores de los gráficos existentes en la figura se actualizan inmediatamente. Si coloca ejes adicionales en la figura, esos ejes también usarán el nuevo orden de colores. Si continúa llamando comandos de trazado, esos comandos también usarán los nuevos colores.

    • Establezca la propiedad ColorOrder de los ejes, llame a la función hold para establecer el estado de retención de los ejes en "on" y luego llame al valor deseado. funciones de trazado. A diferencia de llamar a la función colororder , este proceso establece el orden de color solo para los ejes especificados, no para toda la figura. Debe establecer el estado hold en "on" para garantizar que los comandos de trazado posteriores no restablezcan los ejes para utilizar el orden de color predeterminado.

    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 trazas los objetos de colisión.

    Parches de objetos de colisión, devueltos como N-elemento patch arreglo correspondiente a los objetos de colisión. N es el número de objetos de colisión en el arreglo patch .

    Historial de versiones

    Introducido en R2023b

    Consulte también

    |