Main Content


Add mesh to mesh TSDF

Since R2024a



    isAdded = addMesh(mTSDF,meshStruct) adds one or more meshes to the truncated signed distance field (TSDF), computes the TSDF around the added meshes, and returns an indication of which meshes were successfully added.


    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]));
    title("Static Environment and Dynamic Obstacle")
    v = [110 10];

    Create a mesh TSDF manager with a resolution of 40 cells per meter and a truncation distance of 0.1 meters.

    tsdfs = meshtsdf(Resolution=40,TruncationDistance=0.1);

    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];
    staticEnv.ID = 1;

    Add the static environment mesh to the TSDF manager.


    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);
    axis equal;
    title("Mesh TSDFs of Static Environment and Dynamic Obstacle");

    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]);
    ans = 1
    axis equal
    title("Updated Dynamic Obstacle Pose")

    Input Arguments

    collapse all

    Truncated signed distance field for 3-D meshes, specified as a meshtsdf object.

    Example: meshtsdf(meshes,TruncationDistance=5) creates a TSDF for the specified meshes with a truncation distance of 5 meters.

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

    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.

    Data Types: struct

    Output Arguments

    collapse all

    Indication of whether meshes were added or not, returned as logical 1 (true) if the mesh was successfully added or 0 (false) if the mesh you are adding a mesh with an ID that already exists in mTSDF. If meshStruct is an N-element of mesh structures, then isAdded is an N-element vector of logical scalars corresponding to each of the N mesh structures in meshStruct.

    Extended Capabilities

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

    Version History

    Introduced in R2024a