Map
The Map plugin allows the agent to ingest a range of map types into the DroneDeploy map format. The DroneDeploy map format is a graph-based representation containing a list of nodes and edges.
Maps ingested into the DroneDeploy format have the following advantages:
- Streamlined method to store these maps in the DroneDeploy cloud, and subsequently load them back into the agent and, where applicable, the source robot map system.
- Querying and editing of maps in the DroneDeploy cloud.
- Traversal of maps both in the cloud and live on the agent.
- Easy visualization of maps in Local Ops.
There are three key terms to be familiar with when using the Map plugin: dynamic maps and their adapters, and static maps.
Dynamic Maps
Dynamic maps contain the live, up to date map data that is being ingested online by the agent. Each dynamic map configured can have multiple adapters connected to it.
Adapters
Adapters are responsible for ingesting specific map types, converting them into the standard DroneDeploy map format, then adding this data to the dynamic map. The map adapters are also able to do the inverse: taking a map from the dynamic map and converting it back into the source map format, then loading this map on the source robot.
Static Maps
A static map results from saving a dynamic map to disk. From this point on it cannot be altered. Static maps can be loaded back into dynamic maps, and subsequently loaded onto the source robot. This allows a user to map a specific area, save the dynamic map to a static map, and then at a later date reload this map onto the source robot. The source robot can then once again localize and navigate using this map.
Static Map Hashing
Static maps saved on the agent are identified only by their hash. The hash of a static map can be thought of as a unique identifier calculated from the content of the map. By identifying maps in this way, the agent can ensure that the same map is not saved multiple times, unnecessarily consuming disk space.
Identifying static maps in the robotics portal however can be done using a human readable name in the Robot Maps tab. This name is not used by the agent and is for the user's benefit. This allows a user to give meaningful names to maps, e.g. "Factory Floor".
Configuration:
To use the Map plugin, your agent will need a section in its agent-settings.json
file which enables the map
component, as shown below. For more information on how to configure the agent plugins, see Agent Configuration.
The example map configuration shown below has two dynamic maps configured: spot
and ros
.
The spot map has one spot
adapter attached to it. This spot adapter is configured in the agent to handle ingesting GraphNav maps on Spot robots. It is also configured to handle loading these maps back onto Spot robots.
The ros map has one ros.pointcloud2
adapter attached to it. This ros adapter is configured in the agent to handle ingesting ROS pointcloud2 messages as voxels. These voxels are then added as nodes to the standard DroneDeploy map format. This allows for easy and performant visualisation of the ROS pointcloud2 data in Local Ops.
{
"enabled": true,
"id": "map",
"settings": {
"logLevel": 4,
"name": "map",
"dynamicMaps": {
"spot": {
"adapters": {
"spot": {
"enabled": true,
"type": "spot",
"settings": {
"colorTransformer": "auto",
"interval": "5s",
"upAxis": "z",
"transformTargetFrameID": "seed",
"voxelSettings": {
"enabled": false
}
}
}
}
},
"ros": {
"adapters": {
"ros-adapter": {
"enabled": false,
"type": "ros.pointcloud2",
"settings": {
"colorTransformer": "auto",
"pointcloudSource": "/ros/camera/rgb/points",
"interval": "100ms",
"upAxis": "y",
"transformTargetFrameID": "seed",
"voxelSettings": {
"enabled": true,
"octreeDepth": 4,
"octreeResolution": 1,
"voxelChunkSize": 20000,
"refreshOctree": true
}
}
}
}
}
}
}
}
Name | Description | Default | Unit |
---|---|---|---|
enabled | Whether to enable the spot plugin or not. | false | |
logLevel | The logging verbosity: 1 - very quiet, 6 - very talkative. | 4 | |
name | Name to give the map component instance. | map | |
dynamicMaps | Each dynamic map can be configured under this heading and given a name of the user's choosing. | ||
adapters | The adapters to ingest specific map types into the parent dynamic map. Adapter settings are outlined here |