rosa
NASA JPL 开源的 ROS 机器人自然语言控制 Agent,让开发者用对话方式诊断和操作机器人系统
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
NASA JPL 开源的 ROS 机器人自然语言控制 Agent,让开发者用对话方式诊断和操作机器人系统
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你在 JPL(NASA 喷气推进实验室)的火星试验场,面前是一台造价数百万美元的 Spot 四足机器人。过去,要查看它的传感器状态、诊断运动异常,你需要记住十几个 ROS 命令、理解复杂的节点拓扑图——这是机器人工程师才有的"独门绝技"。而现在,你只需要对着一台电脑说:"帮我看看有哪些话题发布者正常但订阅者失联了?" 机器人就会自动分析、定位并汇报。
这就是 ROSA——Robot Operating System Agent,美国 JPL 实验室开源的 AI Agent 项目。它将大语言模型(LLM)的自然语言理解能力与 ROS 机器人系统的实时控制能力打通,让任何会用自然语言的人都能"驾驶"机器人。
ROSA 诞生于 2024 年,由 JPL 实验室的机器人工程师 Rob Royce 主导开发,背后还获得了 NASA SLIM(Software Lifecycle Integration and Modernization)最佳实践项目的支持。项目的技术论文已发表于 arXiv(arXiv:2410.06472),并已在 JPL 自研的 NeBula-Spot 机器人和 Nvidia IsaacSim 仿真环境中实际部署验证。
ROS(Robot Operating System)是全球最流行的机器人开发框架,ROS1 Noetic 和 ROS2 Humble/Iron/Jazzy 版本被工业机械臂、无人车、四足机器人、医疗设备等广泛应用。然而 ROS 的命令行工具(rostopic、rosnode、rosservice 等)对非专业用户极不友好,学习曲线陡峭。ROSA 的出现正是为了打破这道壁垒——让 AI 代替人类掌握 ROS 的复杂性。
ROSA 的使用方式极其简单:
from rosa import ROSA
llm = get_your_llm_here() # ChatOpenAI / Azure / Anthropic / Ollama
agent = ROSA(ros_version=1, llm=llm)
agent.invoke("Show me topics with publishers but no subscribers")
Agent 接收自然语言查询后,通过 LangChain Tool Calling 机制调用 ROS 系统工具,完成信息检索、状态诊断乃至操作指令。整个过程对用户透明——你不需要知道背后调用了 rostopic 还是 rosnode,Agent 会自动规划。
核心能力包括:
ros2 子命令执行运行时操作(如启动节点、设置参数)ROSA 还提供了可扩展的工具系统。除了内置的 Calculation(计算)、Log(日志)、System(系统)工具外,ROS1/ROS2 各有一套专属工具集,支持命名空间过滤、正则匹配、黑名单排除等高级功能。
ROSA 的代码架构清晰,可分为三层:
接口层:ROSA 类(rosa.py,~500 行)负责整体编排。它接收 ros_version(1 或 2)和 LLM 实例,内部创建 LangChain AgentExecutor、初始化 ROSATools 工具集、挂载 ChatPromptTemplate 提示模板。
Agent 层:基于 LangChain 的 create_tool_calling_agent 构建,这是 LangChain 推荐的 Tool Agent 范式。相比 ReAct(Reason + Act)范式,Tool Calling 对 LLM 的函数调用能力要求更高,但执行路径更确定性。系统提示词(system_prompts)定义 Agent 的角色定位——它是一个专业、谨慎的机器人系统助手,而非通用聊天机器人。
工具层:ROSATools(tools/__init__.py)采用模块化注册机制。工具函数使用 @tool 装饰器标记,通过 dir(package) 动态扫描注入。inject_blacklist 装饰器是项目的一个工程亮点——它绕过 LangChain 的限制,在函数签名中动态注入黑名单参数,确保 Agent 不会操作被排除的节点/话题,这是纯声明式无法实现的hack。
# 工具注册机制(简化)
class ROSATools:
def __init__(self, ros_version: Literal[1, 2], blacklist):
from . import calculation, log, system
self.__iterative_add(calculation) # 默认工具
self.__iterative_add(log)
self.__iterative_add(system)
if ros_version == 1:
from . import ros1
self.__iterative_add(ros1) # ROS1 专属工具
else:
from . import ros2
self.__iterative_add(ros2) # ROS2 专属工具
工具实现层面,ROS1 工具直接调用 rostopic、rosnode、rosparam、rosservice 等 Python API;ROS2 工具则通过 subprocess 执行 ros2 CLI 命令(ros2 topic list、ros2 node list 等),再解析输出。两种实现路径反映了 ROS1/ROS2 在 API 层面的设计差异。
异步支持:除同步 invoke() 外,ROSA 还提供了 astream() 异步流式接口,可实时 yield token、工具调用开始/结束等事件,适合构建交互式前端。
ROSA 提供了开箱即用的 Docker 容器方案,基于 osrf/ros:noetic-desktop 镜像,内置 Turtlesim 仿真环境和 ROSA 本身。开发者可通过 --build-arg DEVELOPMENT=true 构建开发镜像,安装本地 editable 版本;生产部署则使用预编译的 jpl-rosa pip 包。
裸机安装同样简单:
pip3 install jpl-rosa
# 需要 Python 3.9+ 和 ROS Noetic / ROS2 Humble+
容器采用多阶段构建(multi-stage build),分离了依赖安装和运行时环境,镜像体积优化合理。唯一的门槛是需要有可用的 ROS 环境——没有 ROS,ROSA 就是无根之木。
无 GPU 依赖、无特殊硬件要求,普通开发机即可运行。
ROSA 也有明显的局限。首先,它本质上是一个信息检索 Agent,能做诊断和分析,但直接操控机器人(发送运动指令)需要谨慎配置黑名单,否则 Agent 可能执行意外命令。其次,高度依赖 LLM 的工具调用能力,不支持 tool calling 的模型(如 GPT-3.5 早期版本)无法使用。再次,ROS2 工具通过 subprocess 调用 CLI,解析结构化文本输出的健壮性不如直接调用 Python API。
此外,项目暂不支持 Web UI,完全命令行交互,非技术用户有一定上手门槛。
ROSA 的出现反映了机器人领域的一个大趋势:AI Agent 正在成为人机交互的新界面。过去需要专业培训才能操作的复杂系统(ROS、Kubernetes、数据库),正在被 LangChain/ReAct 范式的 Agent 逐渐"汉化"。JPL 将其开源,既是技术验证,也是社区共建——期待更多开发者贡献 ROS2 工具、集成视觉/语音模态。
从 MLOps 视角看,ROSA 是一个典型的"AI + 垂直领域"落地案例:它不追求通用AGI,而是深耕 ROS 生态,用 LLM 解决"专业知识到自然语言的最后一公里"问题。这种专注反而比通用方案更容易获得实际采用。

图1:NASA JPL 实验室(GitHub Avatar)
ROSA 是 NASA JPL 面向机器人开发者开源的 LLM Agent 工具,通过自然语言查询大幅降低 ROS 系统诊断和操作的门槛。项目基于 LangChain Tool Calling 架构,代码质量高、文档完善,支持 ROS1/ROS2 双版本,Docker 部署开箱即用。适合有 ROS 基础的机器人开发者、AI/ML 研究者以及希望用自然语言控制机器人的科研团队。