空间地图
map 服务是算法无关的同步定位与建图(Simultaneous Localization and Mapping,SLAM)及定位输出面:把占据栅格、地图坐标系位姿、全局点云、融合里程和地图生命周期统一成 robonix/service/map/* 能力约定。导航、Scene 和可视化按能力约定消费这些结果,不依赖具体 SLAM 引擎。
能力约定 TOML 在 capabilities/service/map/;直接使用的接口定义语言(Interface Definition Language,IDL)文件位于 capabilities/lib/{map,lifecycle,common_interfaces}/。
新软件包省略 Driver 条目,由框架自动注册共享的 robonix/lifecycle/driver;显式选择共享 Driver 的行为相同。未实现生命周期回调时,框架记录警告并执行空操作。
robonix/service/map/driver、lifecycle/Driver 和 service/map/driver.v1.toml 只用于仍由软件包自行维护 Driver TOML 的旧实现。目前仍可使用,但计划迁移到共享 Driver;两种 Driver 不能同时注册。详见生命周期兼容流程。
接口
| 能力约定 ID | 模式 | 参考实现传输 | 载荷(IDL) | 能力约定 TOML |
|---|---|---|---|---|
robonix/service/map/lifecycle | topic_out | ROS 2 话题(瞬态本地) | map/MapLifecycle | service/map/lifecycle.v1.toml |
robonix/service/map/occupancy_grid | topic_out | ROS 2 话题 | nav_msgs/OccupancyGrid | service/map/occupancy_grid.v1.toml |
robonix/service/map/pose | topic_out | ROS 2 话题 | geometry_msgs/PoseWithCovarianceStamped | service/map/pose.v1.toml |
robonix/service/map/odom | topic_out | ROS 2 话题(未绑定外部里程计时) | nav_msgs/Odometry | service/map/odom.v1.toml |
robonix/service/map/pointcloud | topic_out | ROS 2 话题 | sensor_msgs/PointCloud2 | service/map/pointcloud.v1.toml |
robonix/service/map/save_map | rpc | gRPC + 模型上下文协议(Model Context Protocol,MCP) | map/SaveMap | service/map/save_map.v1.toml |
robonix/service/map/load_map | rpc | gRPC + MCP | map/LoadMap | service/map/load_map.v1.toml |
robonix/service/map/delete_map | rpc | gRPC + MCP(软件包清单漏列) | map/DeleteMap | service/map/delete_map.v1.toml |
robonix/service/map/reset_map | rpc | gRPC + MCP(软件包清单漏列) | map/ResetMap | service/map/reset_map.v1.toml |
robonix/service/map/switch_mode | rpc | gRPC + MCP | map/SwitchMode | service/map/switch_mode.v1.toml |
robonix/service/map/get_mode | rpc | gRPC + MCP(软件包清单漏列) | map/GetMode | service/map/get_mode.v1.toml |
robonix/service/map/get_pose | rpc | gRPC + MCP(软件包清单漏列) | map/GetPose | service/map/get_pose.v1.toml |
robonix/service/map/pose_estimate | rpc | gRPC + MCP | map/PoseEstimate | service/map/pose_estimate.v1.toml |
robonix/service/map/list_maps | rpc | gRPC + MCP | map/ListMaps | service/map/list_maps.v1.toml |
robonix/service/map/pose 是 map 帧的机器人位姿(融合定位结果),与底盘原语 robonix/primitive/chassis/odom(odom 帧、未消除漂移)分工不同。
robonix/service/map/odom 是建图算法自带里程计的可选输出。部署通过 sensor_providers.odom 绑定外部底盘里程计时,参考实现会刻意跳过这条能力声明,避免同一机器人出现两个 odom 提供方;消费者应改用绑定的底盘原语,而不是等待 Mapping 重发同一数据。
输入侧由 sensor_providers 选择并绑定 lidar2d、lidar3d、rgb、depth、imu、odom 角色;只解析实际绑定的 Atlas 提供方。默认 RTAB-Map 可使用二维或三维激光雷达、RGB-D 和可选外部里程计;DLIO 路径需要三维激光雷达和 IMU。
外部里程计模式下,底盘原语同时提供 nav_msgs/Odometry 和 odom → base_link TF;当前 RTAB-Map 参考实现在传感器时间戳查询 TF,而不是再同步一份 /odom 订阅。Mapping 负责发布 map → odom。详细配置、参数表和验证命令见建图参数与里程计接入。
参考实现为 service-map-rbnx。algo 默认并推荐 rtabmap,也可选择 dlio 或 fastlio2。目前只有 RTAB-Map 路径持续维护;DLIO 和 FAST-LIO2 不保证兼容其最新上游版本,当前参考实现还将 fastlio2 标记为漂移故障,仅保留用于诊断和复现。机器人部署保存完整 config/rtabmap_params.yaml,并在建图服务的 config.params_file 中引用。共享仓库模板不会在运行时隐式加载。命名地图持久化目前只支持 RTAB-Map:map_mode: mapping 建图后调用 save_map(map_id),map_mode: localization 配合已有 map_id 加载不可变副本并保持地图坐标系稳定。
输出话题的适配面覆盖各个 algo,但地图数据库、pose_estimate、模式切换和重置的实现直接调用 RTAB-Map 数据库或 ROS 服务。选择 DLIO 或 FAST-LIO2 时不能假设这些管理 RPC 可用,应按响应中的 ok 和 detail 处理失败。
实现文档:README(部署、
params_file、传感器绑定与兼容迁移) ·config.spec(全部 instance 配置、类型、默认值与约束) · 实现注册
RTAB-Map 参数名、默认值和上游说明以 Parameters.h 为准。以 service 提供的 template 为起点,在 deployment 的 YAML 中增加或修改本体所需参数;运行时只读取这份 deployment 文件,不隐式叠加上游配置。
上游已知缺陷:三份软件包清单都漏列
get_mode、get_pose、delete_map、reset_map,但实现已同时注册其 gRPC 服务端和 MCP 工具。依赖软件包清单枚举能力的工具看不到这四项;调用方应先从 Atlas 确认实际注册状态。