Contenido principal

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

addMesh

Agregar malla a malla TSDF

Desde R2024a

    Descripción

    isAdded = addMesh(mTSDF,meshStruct) agrega una o más mallas al campo de distancia con signo truncado (TSDF), calcula la TSDF alrededor de las mallas agregadas y devuelve una indicación de qué mallas se agregaron correctamente.

    ejemplo

    Ejemplos

    contraer todo

    Crea dos cuadros de colisión y una esfera de colisión. Los cuadros de colisión representan un entorno estático y la esfera representa un obstáculo dinámico con una pose que podría cambiar en cualquier momento.

    box1 = collisionBox(0.5,1,0.1);
    box2 = collisionBox(0.5,0.1,0.2,Pose=trvec2tform([0 -0.45 0.15]));
    sph = collisionSphere(0.125,Pose=trvec2tform([-0.1 0.25 0.75]));
    showCollisionArray({box1,box2,sph});
    title("Static Environment and Dynamic Obstacle")
    v = [110 10];
    view(v);

    Figure contains an axes object. The axes object with title Static Environment and Dynamic Obstacle, xlabel X, ylabel Y contains 3 objects of type patch.

    Cree un administrador de TSDF de malla con una resolución de 25 celdas por metro.

    tsdfs = meshtsdf(Resolution=25);

    Para mejorar la eficiencia del cálculo del campo de distancia con signo, combine mallas que representen el entorno estático.

    staticMeshes = geom2struct({box1,box2});
    staticEnv = staticMeshes(1);
    staticEnv.Pose = eye(4);
    staticEnv.Vertices = [];
    staticEnv.Faces = [];
    for i = 1:numel(staticMeshes)
        H = staticMeshes(i).Pose;
        V = staticMeshes(i).Vertices*H(1:3,1:3)'+ H(1:3,end)';
        nVert = size(staticEnv.Vertices,1);
        staticEnv.Vertices = [staticEnv.Vertices; V];
        staticEnv.Faces = [staticEnv.Faces; staticMeshes(i).Faces+nVert];
    end
    staticEnv.ID = 1;

    Agregue la malla de entorno estático al administrador TSDF.

    addMesh(tsdfs,staticEnv);

    Convierte la geometría de colisión de esfera en una estructura para el administrador de malla TSDF. Asígnele un ID de 2 y agréguelo al administrador de malla TSDF.

    obstacleID = 2;
    dynamicObstacle = geom2struct(sph,obstacleID);
    addMesh(tsdfs,dynamicObstacle);
    show(tsdfs)
    view(v)
    axis equal
    title("Mesh TSDFs of Static Environment and Dynamic Obstacle")

    Figure contains an axes object. The axes object with title Mesh TSDFs of Static Environment and Dynamic Obstacle contains 2 objects of type scatter.

    Actualice la pose del obstáculo dinámico en el administrador de malla TSDF cambiando la propiedad Pose del controlador de objeto del obstáculo. Luego, utilice la función updatePose para actualizar la pose de la malla en el administrador TSDF.

    dynamicObstacle.Pose = trvec2tform([0.2 0.25 0.2]);
    updatePose(tsdfs,dynamicObstacle)
    ans = 
    1
    
    show(tsdfs)
    view(v)
    axis equal
    title("Updated Dynamic Obstacle Pose")

    Figure contains an axes object. The axes object with title Updated Dynamic Obstacle Pose contains 2 objects of type scatter.

    Argumentos de entrada

    contraer todo

    Campo de distancia con signo truncado para mallas 3D, especificado como un objeto meshtsdf.

    Ejemplo: meshtsdf(meshes,TruncationDistance=5) crea un TSDF para las mallas especificadas con una distancia de truncamiento de 5 metros.

    Malla geométrica, devuelta como una estructura o un arreglo de estructuras de N elementos. N es el número total de objetos de colisión.

    Cada estructura contiene estos campos:

    • ID — ID de la estructura geométrica almacenada como un entero positivo. De forma predeterminada, el ID de cada estructura corresponde al índice de la estructura en meshStruct. Por ejemplo, si meshStruct contiene cinco estructuras de malla, la primera estructura de malla en el índice 1 tiene un ID de 1, y la última estructura de malla en el índice 5 tiene un ID de 5.

    • Vertices — Vértices de la geometría, almacenados como una matriz M por 3. Cada fila representa un vértice en la forma [x y z] con respecto al marco de referencia definido por Pose. M es el número de vértices necesarios para representar la envoltura convexa de la malla.

    • Faces — Caras de la geometría, almacenadas como una matriz M por 3. Cada fila contiene tres índices correspondientes a los vértices en Vertices que definen las caras de un triángulo de la geometría. M es el número de vértices en Vertices.

    • Pose — Plantea la geometría como una matriz de transformación homogénea de 4 por 4 que especifica una transformación del marco del mundo al marco en el que se definen los vértices.

    Tipos de datos: struct

    Argumentos de salida

    contraer todo

    Indicación de si se agregaron mallas o no, devuelto como 1 lógico (true) si la malla se agregó correctamente o 0 (false) si la malla que está agregando es una malla con una ID que ya existe en mTSDF. Si meshStruct es un elemento N de estructuras de malla, entonces isAdded es un vector de elementos N de escalares lógicos correspondiente a cada una de las estructuras de malla N en meshStruct.

    Capacidades ampliadas

    expandir todo

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

    Historial de versiones

    Introducido en R2024a

    Consulte también

    | |