# geom2struct

Convert collision geometry objects to structure array

Since R2024a

## Syntax

``meshStruct = geom2struct(geom)``
``meshStruct = geom2struct(geom,id)``
``meshStruct = geom2struct(___,LocalOffsetPose=poseOffset)``

## Description

example

````meshStruct = geom2struct(geom)` converts a cell array of collision geometries into a structure array.```
````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);```

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]; 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

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.

## Version History

Introduced in R2024a