SLAM定位建图模块
SLAM定位建图模块
Section titled “SLAM定位建图模块”本页面包含了SLAM定位建图模块(Simultaneous Localization and Mapping, SLAM)包含的话题和服务的相关文档协议,以支持系统的定位建图功能。
本模块位于 orin 开发板上,http 后端监听的端口为 53175。
Channel 接口
Section titled “Channel 接口”| 话题名 | 话题描述 | 订阅 or 发布 | 消息类型 | 备注 | 通信后端 |
|---|---|---|---|---|---|
/body_drive/imu/data | imu | 订阅 | sensor_msgs::msg::Imu | imu | ros2 |
/body_drive/wheel_joint_state | 关节状态 | 订阅 | joint_msg_interface::msg::JointState | 关节状态 | ros2 |
/aima/hal/lidar/top/pointcloud | 头部激光雷达点云 | 订阅 | sensor_msgs::msg::PointCloud2 | 头部激光雷达点云 | ros2 |
/aima/hal/lidar/top/imu | 头部imu | 订阅 | sensor_msgs::msg::Imu | 头部imu | ros2 |
/ranger_base_node/odom | 里程计 | 发布 | nav_msgs::msg::Odometry | 里程计 | ros2 |
/slam/mapping/odometry | SLAM建图前端里程计 | 发布 | nav_msgs::msg::Odometry | SLAM建图前端里程计 | ros2 |
/slam/mapping/realtime_2d_map | 实时2D地图 | 发布 | aimdk::protocol::SLAMRealtimeMappingChannel | 实时2D地图 | ros2 |
/slam/localization/odometry | SLAM定位结果 | 发布 | nav_msgs::msg::Odometry | SLAM定位结果 | ros2 |
RPC 接口
Section titled “RPC 接口”| 接口名 | 接口描述 | 请求消息类型 | 答复消息类型 | 备注 | 通信后端 |
|---|---|---|---|---|---|
pb:/aimdk.protocol.SLAMMappingService/SLAMStartMapping | 开始建图 | aimdk::protocol::SLAMStartMappingRequest | aimdk::protocol::SLAMStartMappingResponse | 启动SLAM建图模式 | http |
pb:/aimdk.protocol.SLAMMappingService/SLAMStopMapping | 停止建图 | aimdk::protocol::SLAMStopMappingRequest | aimdk::protocol::SLAMStopMappingResponse | 停止建图 | http |
pb:/aimdk.protocol.SLAMMappingService/SLAMGetCurrentMappingState | 获取当前SLAM算法状态的接口 | aimdk::protocol::SLAMGetCurrentStateRequest | aimdk::protocol::SLAMGetCurrentStateResponse | 用于支持MM状态同步 | http |
pb:/aimdk.protocol.SLAMMappingService/SLAMStartIncrementalMapping | 开始增量建图 | aimdk::protocol::SLAMStartIncrementalMappingRequest | aimdk::protocol::SLAMStartIncrementalMappingResponse | 开始增量建图 | http |
pb:/aimdk.protocol.SLAMRelocalizationService/SLAMStartNormalRelocalization | 启动常规重定位 | aimdk::protocol::SLAMStartNormalRelocRequest | aimdk::protocol::SLAMStartNormalRelocResponse | 启动常规重定位 | http |
pb:/aimdk.protocol.SLAMRelocalizationService/SLAMStopNormalRelocalization | 停止常规重定位 | aimdk::protocol::SLAMStopNormalRelocRequest | aimdk::protocol::SLAMStopNormalRelocResponse | 停止常规重定位 | http |
pb:/aimdk.protocol.SLAMRelocalizationService/SLAMGetCurrentRelocalizationState | 获取当前SLAM算法状态的接口 | aimdk::protocol::SLAMGetCurrentStateRequest | aimdk::protocol::SLAMGetCurrentStateResponse | 获取当前SLAM算法状态的接口 | http |
pb:/aimdk.protocol.SLAMQRRecordService/SLAMGetCurrentQRRecordState | 获取当前SLAM算法状态的接口 | aimdk::protocol::SLAMGetCurrentStateRequest | aimdk::protocol::SLAMGetCurrentStateResponse | 获取当前SLAM算法状态的接口 | http |
pb:/aimdk.protocol.SLAMLocalizationService/SLAMStartLocalization | 启动定位请求 | aimdk::protocol::SLAMStartLocalizationRequest | aimdk::protocol::SLAMStartLocalizationResponse | 启动定位请求 | http |
pb:/aimdk.protocol.SLAMLocalizationService/SLAMStopLocalization | 停止定位请求 | aimdk::protocol::SLAMStopLocalizationRequest | aimdk::protocol::SLAMStopLocalizationResponse | 停止定位请求 | http |
pb:/aimdk.protocol.SLAMLocalizationService/SLAMGetCurrentLocalizationState | 获取当前SLAM算法状态的接口 | aimdk::protocol::SLAMGetCurrentStateRequest | aimdk::protocol::SLAMGetCurrentStateResponse | 获取当前SLAM算法状态的接口 | http |
pb:/aimdk.protocol.SLAMLocalizationService/SLAMUpdateOccupancyMap | 发起更新栅格地图请求 | aimdk::protocol::SLAMUpdateOccupancyMapRequest | aimdk::protocol::SLAMUpdateOccupancyMapResponse | 发起更新栅格地图请求 | http |
pb:/aimdk.protocol.SLAMLocalizationService/SLAMToogleUpdateOccupancyMap | 开启或关闭实时更新栅格地图功能 | aimdk::protocol::SLAMToggleUpdateOccupancyMapRequest | aimdk::protocol::SLAMToggleUpdateOccupancyMapResponse | 开启或关闭实时更新栅格地图功能 | http |
pb:/aimdk.protocol.SLAMLocalizationService/SLAMCheckUpdateOccupancyMapState | 查询实时更新栅格地图功能的状态是开启还是关闭 | aimdk::protocol::SLAMOccupancyMapStateRequest | aimdk::protocol::SLAMOccupancyMapStateResponse | 查询实时更新栅格地图功能的状态是开启还是关闭 | http |
Protobuf 消息类型
Section titled “Protobuf 消息类型”aimdk::protocol::SLAMRealtimeMappingChannel
Section titled “aimdk::protocol::SLAMRealtimeMappingChannel”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::Header | 消息头 |
| occupancy_grid | aimdk::protocol::OccupancyGrid | 实时占用栅格地图数据 |
| map_update_time | aimdk::protocol::Timestamp | 地图更新时间 |
aimdk::protocol::SlamPoseChannel
Section titled “aimdk::protocol::SlamPoseChannel”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::Header | 消息头 |
| pose | aimdk::protocol::SE3Pose | 机器人在地图坐标系下的位姿 |
| covariance | double[] | 位姿协方差矩阵(6x6) |
| quality | float | 定位质量评分,范围[0,1] |
aimdk::protocol::SlamMapChannel
Section titled “aimdk::protocol::SlamMapChannel”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::Header | 消息头 |
| map | aimdk::protocol::OccupancyGrid | 占用栅格地图数据 |
| map_id | uint64 | 地图唯一标识 |
aimdk::protocol::SlamStatusChannel
Section titled “aimdk::protocol::SlamStatusChannel”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::Header | 消息头 |
| mode | aimdk::protocol::SlamMode | SLAM运行模式 |
| status | aimdk::protocol::SlamStatus | SLAM运行状态 |
| map_id | uint64 | 当前使用的地图ID |
| localization_quality | float | 定位质量,范围[0,1] |
aimdk::protocol::SlamMode
Section titled “aimdk::protocol::SlamMode”| Name | Number | Description |
|---|---|---|
| SlamMode_UNKNOWN | 0 | 未知模式 |
| SlamMode_MAPPING | 1 | 建图模式 |
| SlamMode_LOCALIZATION | 2 | 定位模式 |
| SlamMode_IDLE | 3 | 空闲模式 |
aimdk::protocol::SlamStatus
Section titled “aimdk::protocol::SlamStatus”| Name | Number | Description |
|---|---|---|
| SlamStatus_UNKNOWN | 0 | 未知状态 |
| SlamStatus_INITIALIZING | 1 | 初始化中 |
| SlamStatus_RUNNING | 2 | 正常运行 |
| SlamStatus_LOST | 3 | 定位丢失 |
| SlamStatus_ERROR | 4 | 错误状态 |
aimdk::protocol::SLAMStartMappingRequest
Section titled “aimdk::protocol::SLAMStartMappingRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| map_name | string | 新建地图的名称 |
| resolution | float | 地图分辨率,单位:米/像素,默认0.05 |
aimdk::protocol::SLAMStartMappingResponse
Section titled “aimdk::protocol::SLAMStartMappingResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMStopMappingRequest
Section titled “aimdk::protocol::SLAMStopMappingRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| save_map | bool | 是否保存当前地图 |
aimdk::protocol::SLAMStopMappingResponse
Section titled “aimdk::protocol::SLAMStopMappingResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMGetCurrentStateRequest
Section titled “aimdk::protocol::SLAMGetCurrentStateRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
aimdk::protocol::SLAMGetCurrentStateResponse
Section titled “aimdk::protocol::SLAMGetCurrentStateResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| state | aimdk::protocol::SlamStatus | 当前SLAM状态 |
| message | string | 状态描述信息 |
aimdk::protocol::SLAMStartIncrementalMappingRequest
Section titled “aimdk::protocol::SLAMStartIncrementalMappingRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| base_map_id | uint64 | 基础地图ID |
| new_map_name | string | 新增量地图名称 |
aimdk::protocol::SLAMStartIncrementalMappingResponse
Section titled “aimdk::protocol::SLAMStartIncrementalMappingResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMStartNormalRelocRequest
Section titled “aimdk::protocol::SLAMStartNormalRelocRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| map_id | uint64 | 用于重定位的地图ID |
aimdk::protocol::SLAMStartNormalRelocResponse
Section titled “aimdk::protocol::SLAMStartNormalRelocResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMStopNormalRelocRequest
Section titled “aimdk::protocol::SLAMStopNormalRelocRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
aimdk::protocol::SLAMStopNormalRelocResponse
Section titled “aimdk::protocol::SLAMStopNormalRelocResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMStartLocalizationRequest
Section titled “aimdk::protocol::SLAMStartLocalizationRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| map_id | uint64 | 用于定位的地图ID |
| initial_pose | aimdk::protocol::SE3Pose | 可选的初始位姿 |
aimdk::protocol::SLAMStartLocalizationResponse
Section titled “aimdk::protocol::SLAMStartLocalizationResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMStopLocalizationRequest
Section titled “aimdk::protocol::SLAMStopLocalizationRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
aimdk::protocol::SLAMStopLocalizationResponse
Section titled “aimdk::protocol::SLAMStopLocalizationResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMUpdateOccupancyMapRequest
Section titled “aimdk::protocol::SLAMUpdateOccupancyMapRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| map_id | uint64 | 要更新的地图ID |
aimdk::protocol::SLAMUpdateOccupancyMapResponse
Section titled “aimdk::protocol::SLAMUpdateOccupancyMapResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMToggleUpdateOccupancyMapRequest
Section titled “aimdk::protocol::SLAMToggleUpdateOccupancyMapRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
| enable | bool | 是否开启实时更新 |
aimdk::protocol::SLAMToggleUpdateOccupancyMapResponse
Section titled “aimdk::protocol::SLAMToggleUpdateOccupancyMapResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| result | bool | 操作结果 |
| message | string | 结果描述信息 |
aimdk::protocol::SLAMOccupancyMapStateRequest
Section titled “aimdk::protocol::SLAMOccupancyMapStateRequest”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | RPC 请求的 header |
aimdk::protocol::SLAMOccupancyMapStateResponse
Section titled “aimdk::protocol::SLAMOccupancyMapStateResponse”| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | RPC 响应的 header |
| is_enabled | bool | 实时更新功能是否开启 |
| message | string | 状态描述信息 |
1. 开始建图
Section titled “1. 开始建图”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMMappingService/SLAMStartMapping' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "map_name": "office_map_001", "resolution": 0.05 }'2. 停止建图
Section titled “2. 停止建图”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMMappingService/SLAMStopMapping' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "save_map": true }'3. 开始定位
Section titled “3. 开始定位”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMLocalizationService/SLAMStartLocalization' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "map_id": 1, "initial_pose": { "position": { "x": 0.0, "y": 0.0, "z": 0.0 }, "orientation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 } } }'4. 启动常规重定位
Section titled “4. 启动常规重定位”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMRelocalizationService/SLAMStartNormalRelocalization' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "map_id": 1 }'5. 获取SLAM建图状态
Section titled “5. 获取SLAM建图状态”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMMappingService/SLAMGetCurrentMappingState' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 } }'6. 获取SLAM定位状态
Section titled “6. 获取SLAM定位状态”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMLocalizationService/SLAMGetCurrentLocalizationState' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 } }'7. 更新占用栅格地图
Section titled “7. 更新占用栅格地图”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMLocalizationService/SLAMUpdateOccupancyMap' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "map_id": 1 }'8. 开启/关闭实时更新栅格地图
Section titled “8. 开启/关闭实时更新栅格地图”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMLocalizationService/SLAMToogleUpdateOccupancyMap' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "enable": true }'9. 查询实时更新栅格地图状态
Section titled “9. 查询实时更新栅格地图状态”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMLocalizationService/SLAMCheckUpdateOccupancyMapState' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 } }'10. 启动增量建图
Section titled “10. 启动增量建图”#!/bin/bash#curl使用示例(以 ORIN ip: 192.168.100.110 为例):curl -i -H 'content-type:application/json' \ -H 'timeout: 60000' \ -X POST 'http://192.168.100.110:53175/rpc/aimdk.protocol.SLAMMappingService/SLAMStartIncrementalMapping' \ -d '{ "header": { "timestamp": { "seconds": 0, "nanos": 0, "ms_since_epoch": 0 }, "control_source": 0 }, "base_map_id": 1, "new_map_name": "incremental_map_001" }'