RobotMem + ROS 2
将持久化记忆作为原生 ROS 2 服务节点运行。通过标准话题和服务保存感知数据并检索历史经验。
快速开始
import rclpy
from rclpy.node import Node
from robotmem import RobotMemory
class MemoryNode(Node):
def __init__(self):
super().__init__("robotmem_node")
self.mem = RobotMemory(db_path="/opt/ros/memory.db")
self.create_subscription(
Image, "/camera/rgb", self.on_image, 10
)
def on_image(self, msg):
# 保存视觉感知,附带空间上下文
self.mem.save_perception(
observation=msg.data,
context={"frame": msg.header.frame_id},
tags=["visual", "navigation"],
)
# 检索相似场景用于避障
prior = self.mem.recall(
query="obstacle near doorway",
top_k=3,
)
self.get_logger().info(f"检索到 {len(prior)} 条相关经验")
集成功能
ROS 2 是机器人软件的行业标准,驱动着从仓储移动机器人到手术系统和自动驾驶车辆的各种应用。 该框架在传感器驱动、规划器和执行器之间的实时通信方面表现出色。但 ROS 2 没有内置的持久化记忆概念。 当机器人节点重启时,所有积累的经验都会丢失。参数可以通过 YAML 文件持久化,但没有结构化的方式来 跨会话存储和检索经验知识。
RobotMem 作为标准 ROS 2 节点运行来填补这一空白。它订阅传感器话题,将观测存储为索引化的记忆条目, 并通过 ROS 2 服务暴露检索功能。系统中的任何节点都可以调用记忆服务,在做出决策之前检索相关的历史经验。 记忆数据库在重启之间持久化存储在磁盘上,赋予你的机器人真正的长期记忆,能够经受断电和软件更新。
RobotMem 的 Bloom 版本已提交至 rosdistro 仓库,这意味着一旦发布被接受,安装将简单到只需
apt install ros-jazzy-robotmem。在此之前,你可以从 PyPI 安装并将记忆节点与现有的
ROS 2 系统一同启动。该节点集成了标准 ROS 2 生命周期管理,支持 configure、activate、deactivate
和 cleanup 状态转换。这使你的 launch 文件可以像管理系统中的其他组件一样管理记忆。
- 原生 ROS 2 节点 — 通过
ros2 run或 launch 文件启动,遵循生命周期规范 - 话题订阅 — 订阅任意传感器话题(Image、LaserScan、PointCloud2)并自动保存感知数据
- 服务接口 — 将
/robotmem/save和/robotmem/recall暴露为标准 ROS 2 服务 - TF 集成 — 自动从 TF 树中提取空间坐标帧信息并标记到记忆中
- 多机器人支持 — 命名空间感知设计,多台机器人可通过 DDS 共享一个记忆服务器
- 生命周期管理 — 支持 ROS 2 管理节点,具备完善的状态转换和清理机制
部署架构
在典型部署中,RobotMem 节点与感知和规划节点一同运行在机器人的板载计算机上。 记忆存储在本地 SQLite 数据库中,确保即使没有网络连接也能实现零延迟检索。 对于集群部署,你可以配置一个中央记忆服务器来聚合多台机器人的经验。 每台机器人在有网络连接时将新记忆推送到服务器,并从集群的集体经验中拉取相关记忆。 这种架构对实验室中的单台研究机器人和跨越多栋建筑的配送机器人集群同样适用。