本地 HTTP API

读取机器人状态、运行任务,以及管理标定、活动范围与录像。

地址与请求格式

本地 HTTP API 与控制台共用设备和配置。运行 roboapi http 后,使用 http://127.0.0.1:8080。直接请求云端模型请使用 云端 API。

POST 请求使用 Content-Type: application/json,请求体为 JSON 对象,无参数时传 {}。普通请求上限 16 KiB,预设与批量存储清理上限 128 KiB。本地接口没有账户鉴权;远程访问使用 SSH 转发,浏览器写操作需同源。

状态与视频

GET 路径响应要点
/api/statusmode、run_source、instruction、instruction_pending、设备/控制/模型状态、calibration、session、workspace、task_id、task_elapsed_s 与推理事件
/api/policy/configurl、model、api_key_configured、policy_ready、inter_chunk_pause_s;不返回 Key 或凭据文件路径
/api/presets{"instructions": [...]}
/api/calibration标定阶段、采样结果与当前可执行操作
/api/calibration/check{"at_home": true, "active": null};active 为当前试动方向或 null
/api/workspace/configenabled、min_xyz_m、max_xyz_m、home_xyz_m
/api/logs{"events": [...]},有界的最近活动记录
/api/camera/streammultipart/mixed; boundary=frame,每个分段是 image/jpeg;相机未连接或帧过期时返回 503
curl --fail-with-body http://127.0.0.1:8080/api/status

mode 为 idle、running 或 paused。开始任务前检查 control_ready、设备与模型连接;arm_connected 只表示机械臂的连接状态。视频流断开后,客户端应重新请求流地址。

任务与运行控制

POST 路径请求体行为
/api/policy/start{"instruction":"Pick up the block","new_task":true}空闲时开始运行;会驱动机器人
/api/instruction{"instruction":"Place it in the tray"}更新当前网页来源运行的指令,下一轮推理生效
/api/policy/pause{}暂停正在运行的网页来源任务
/api/policy/resume{}恢复已暂停的网页来源任务
/api/stop{}停止当前运行或受控运动,所有运行来源均可用
/api/robot/reset{}空闲时打开夹爪并返回 Home
/api/robot/recover{}恢复设备并返回 Home
/api/errors/clear{}空闲且设备可用时清除历史错误记录与停止原因;不修复硬件
/api/devices/connect{}连接设备只读预览
/api/devices/release{}空闲时释放设备、丢弃未完成的示教,保留已保存标定

指令去首尾空白后须为 1–1000 字符。HTTP 启动的运行使用 run_source: "web";更新指令、暂停和恢复要求来源一致。Agent 运行时须先停止,再通过 HTTP 开始。

new_task 可选,默认 false:指令与当前本地任务相同则继续该任务,追加时长和录像;不同指令创建新任务。传 true 始终创建新的本地任务,即使指令相同。每次 start 都开始一次运行,不应把本地任务 ID 当作云端会话 ID。

start 接受请求不代表后台首轮推理成功;任务会持续到停止或故障。/api/instruction 不截断当前动作块。要复现网页中途发送新任务的行为,依次 stop、确认 mode: "idle"、start 并传 new_task: true。

模型设置与预设

获取可用模型

调用 POST /api/policy/models,通过本地运行时查询模型服务:

{"url": "https://api.pokebot.com/v1"}

url 必填,api_key 可选。省略 Key 时使用本地已保存的凭据;使用新的 Key 时传入 api_key,不要传空字符串。成功返回当前 Key 可用的实际模型 ID:

{"models": ["MODEL_ID"]}

此请求只查询列表,不保存地址或凭据,不创建任务会话。修改地址或 Key 后重新获取列表;列表为空或连接失败时返回 502,已保存设置保持不变。MODEL_ID 是示意值,后续配置使用实际返回的 ID。

保存连接与运行参数

空闲时调用 POST /api/policy/config。url、model、inter_chunk_pause_s 必填,api_key 可选。省略 Key 保留旧凭据,不要传空字符串。配置经过 /models 检查后保存,失败保留原值。

{
  "url": "https://api.pokebot.com/v1",
  "model": "MODEL_ID",
  "inter_chunk_pause_s": 0.5
}

Base URL 使用正式服务地址 https://api.pokebot.com/v1,MODEL_ID 替换为该服务 /models 返回的模型 ID。inter_chunk_pause_s 为非负秒数,控制动作块结束后、下一次观测前的等待。服务须符合 本地运行协议。

保存预设

POST /api/presets 保存预设,不运行任务:

{"instructions": ["Pick up the block", "Place it in the tray"]}

最多 20 条,每条 1–1000 字符。

标定动作

路径均为 POST /api/calibration/{action}。按 坐标标定 完成现场准备,再调用以下动作。

action请求体与作用
acquire{"confirmed":true},开始示教
confirm_home、confirm_plane_a、confirm_plane_b{},依次记录 Home、A、B
confirm_plane_c{},记录 C 并自动返回 Home
return_a、return_home{},实际返回已记录的 A/Home
set_guiding_axis{"axis":"x"},支持原生引导的适配器可选 x、y、z(内置 Franka 支持)
save{"confirmed":true},成功返回后保存标定
undo{},撤回最近一个未保存的位置,不移动机械臂
enable_control{"confirmed":true,"initialization_confirmed":true},启用控制,可能初始化并移动夹爪

HTTP 的 confirm_plane_c 不代替后续 save 与 enable_control。确认字段须反映现场操作人的实际确认。关闭网页不取消示教;需要放弃时使用 /api/devices/release。

方向试动

POST /api/calibration/check 请求体只有一个字段:

{"direction":"forward"}

direction 可选 forward、left、up、home。前三者从 Home 平移 5 cm、旋转 30° 后返回,home 仅返回,均保持夹爪开度。具体轴向见 方向试动。接口在动作结束后返回;/api/stop 可打断,且会取消剩余返回轨迹。

活动范围

POST /api/workspace/config 接受完整配置。位置均为模型坐标中的绝对值,单位米;与页面中“距初始位置 / cm”的输入不同。

{
  "enabled": true,
  "min_xyz_m": [-0.73, -1.06, -0.11],
  "max_xyz_m": [0.47, 0.14, 1.09]
}

这是默认的 Home ±0.60 m。每个数组必须包含三个有限数值,每轴最小值小于最大值,范围须包含 Home [-0.13,-0.46,0.49]。空闲、结束示教后才能保存;保存不移动机器人。

启用后,超范围的法兰中心目标被收敛到边界,任务继续执行;旋转不受限制。开始、恢复或手动运动要求当前测量位置在范围内,显式返回 Home 可从范围外执行。该边界不约束整个机械臂、外力、柔顺运动或跟踪误差,也不用于避障。

任务、录像与存储

GET 路径响应
/api/taskstasks 列表、current_task_id、recording_enabled
/api/tasks/{id}单个任务的指令、active、runs、elapsed_s、rating、note、recording、video_available 等
/api/tasks/{id}/videoMP4 录像;支持单段字节 Range(206);加 ?download=1 下载
/api/storagetasks 的占用与 busy 状态,以及 total_bytes、video_bytes、recordings_count、recording_enabled

recording 为 off、recording、saving、ready 或 error。录像正在保存时等待其完成,再下载或清理。

POST 路径请求体与结果
/api/recording/config{"enabled":true};应用于后续运行,返回 {"enabled":true}
/api/tasks/{id}/feedback{"rating":"up","note":"Placed in the tray"};两个字段均必填,rating 为 up、down 或 null,返回任务记录
/api/tasks/{id}/delete{};删除任务及其录像、反馈,成功返回 {"ok":true}
/api/storage/cleanup{"kind":"recordings","task_ids":["TASK_ID"]};返回 {"cleared":1,"skipped":0}

cleanup 的 kind 为 recordings(只删录像,保留指令和反馈)或 tasks(删除整条记录)。省略 task_ids 处理全部任务;传空数组不处理任何任务。批量清理跳过运行中或正在保存录像的任务,单项删除这些任务返回 409。

失败响应

失败通常返回 {"error":"可读原因"},控制前置条件不满足时可附 "kind":"control_not_ready"。

HTTP处理
400 / 413 / 415修正 JSON、字段、请求大小或 Content-Type
403使用同源入口,检查代理的 Host/Origin
404核对路径、任务 ID 或录像是否存在
408请求体未及时传完,检查客户端连接
409检查运行来源、空闲状态、设备、标定或任务是否仍在保存
416修正视频 Range 范围,仅支持单段字节范围
500读取服务日志,检查本地文件与存储状态
502模型列表查询或连接验证失败;检查 Base URL、模型权限与 Key
503检查相机帧是否更新或安装包是否包含网页资源

网络超时后先读取 /api/status 确认结果,不盲目重复启动、Home 或标定动作。详见 本地运行错误。

本页内容