本地 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/status | mode、run_source、instruction、instruction_pending、设备/控制/模型状态、calibration、session、workspace、task_id、task_elapsed_s 与推理事件 |
/api/policy/config | url、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/config | enabled、min_xyz_m、max_xyz_m、home_xyz_m |
/api/logs | {"events": [...]},有界的最近活动记录 |
/api/camera/stream | multipart/mixed; boundary=frame,每个分段是 image/jpeg;相机未连接或帧过期时返回 503 |
curl --fail-with-body http://127.0.0.1:8080/api/statusmode 为 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/tasks | tasks 列表、current_task_id、recording_enabled |
/api/tasks/{id} | 单个任务的指令、active、runs、elapsed_s、rating、note、recording、video_available 等 |
/api/tasks/{id}/video | MP4 录像;支持单段字节 Range(206);加 ?download=1 下载 |
/api/storage | tasks 的占用与 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 或标定动作。详见 本地运行错误。