# addMesh

## Description

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.`isAdded`

= addMesh(`mTSDF`

,`meshStruct`

)

## Examples

### Add Meshes to Mesh TSDF Manager

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);
```

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")

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")

## Input Arguments

`mTSDF`

— Truncated signed distance field for 3-D meshes

`meshtsdf`

object

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.

`meshStruct`

— Geometry mesh structure

structure | *N*-element structure array

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

`isAdded`

— Indication of whether meshes were added or not

`true`

or `1`

| `false`

or `0`

| *N*-element vector of logical scalars

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**

## See Also

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)