Main Content

geom2struct

Convert collision geometry objects to structure array

Since R2024a

    Description

    meshStruct = geom2struct(geom) converts a cell array of collision geometries into a structure array.

    example

    meshStruct = geom2struct(geom,id) specifies identifiers for the specified collision geometries.

    meshStruct = geom2struct(___,LocalOffsetPose=poseOffset) specifies local offsets as 3-D homogeneous transformation matrices to apply to the vertices of corresponding geometries.

    Examples

    collapse all

    Create two collision boxes and one collision sphere. The collision boxes represent a static environment and the sphere represents a dynamic obstacle with a pose that could change at any time.

    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.

    Create a mesh TSDF manager with a resolution of 25 cells per meter.

    tsdfs = meshtsdf(Resolution=25);

    To improve the efficiency of signed distance field computation, combine meshes that represent the static environment.

    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;

    Add the static environment mesh to the TSDF manager.

    addMesh(tsdfs,staticEnv);

    Convert the sphere collision geometry into a structure for the mesh TSDF manager. Assign it an ID of 2 and add it to the mesh TSDF manager.

    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.

    Update the pose of the dynamic obstacle in the mesh TSDF manager by changing Pose property of the object handle of the obstacle. Then use the updatePose function to update the pose of the mesh in the TSDF manager.

    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.

    Input Arguments

    collapse all

    Collision geometry object, specified as collision geometry object or as an N-element cell array of collision geometry objects. N is the number of collision objects in the cell array. A collision object must be one of these objects:

    Geometry structure ID, specified as a positive integer or an N-element vector of positive integers. N is the number of collision objects in geom.

    If id is a N-element vector of positive integers, then each ID in id must be unique.

    If id is not specified, then the ID of the structure is set to 1:N. For example, geom2struct({geom1,geom2,geom3}) creates three structures corresponding to geom1, geom2, and geom3 with IDs set to 1, 2, and 3, respectively.

    Local pose offset, specified as a 4-by-4 homogeneous transformation matrix or as an se3 object.

    If geom is a N-element cell-array, then poseOffset must either be a 4-by-4-by-N array of homogeneous transformation matrices or an N-element array of se3 objects.

    Output Arguments

    collapse all

    Geometry mesh structure, returned as a structure or an N-element structure array. N is the number of collision objects in geom.

    Each structure contains these fields:

    • ID — ID of the geometry structure stored as a positive integer. By default, the ID of each structure corresponds to the index of the structure in meshStruct. For example, if meshStruct contains five mesh structures, the first mesh structure at index 1 has an ID of 1, and the last mesh structure at index 5 has an ID of 5.

    • Vertices — Vertices of the geometry, stored as an M-by-3 matrix. Each row represents a vertex in the form [x y z] with respect to the reference frame defined by Pose. M is the number of vertices needed to represent the convex hull of the mesh.

    • Faces — Faces of the geometry, stored as an M-by-3 matrix. Each row contains three indices corresponding to vertices in Vertices that define a triangle faces of the geometry. M is the number of vertices in Vertices.

    • Pose — Pose of the geometry as a 4-by-4 homogeneous transformation matrix specifying a transformation from the world frame to the frame in which the vertices are defined.

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Version History

    Introduced in R2024a