机器人端侧状态(onState)参考 · iOS

机器人端侧状态(onState)参考 · iOS

机器人通过 agentsdk.state_request.meta 事件向 SDK 上报自身状态——在被动回调里你会收到:

text
PassiveCallback.onState(agentId:eventId:stateName:stateValue:)
                          ^^^^^^^^^                 ^^^^^^^^^^^^
                          模块名                    模块负载(JSON 字符串)
语言重载入口
SwiftPassiveCallback.onState(agentId:eventId:stateName:stateValue:)
JavaPassiveCallback.onState(agentId, eventId, stateName, stateValue)
PythonPassiveCallback.on_state(agent_id, event_id, state_name, state_value)

⚠️ stateValue 可能为简单字符串、数字、对象或对象数组。如果业务侧使用结构化字段,需要自行用 JSONSerialization / JSONDecoder 解析。

本页定义所有 stateName 取值及对应 stateValue 的字段结构——共 22 个模块。 每个模块除字段表外都附 JSON 样例,便于直接对照解析。


模块清单

stateName主题频率
map_info地图基础信息与导航点位低频 / 事件触发
map_2d_grid二维栅格地图快照极低频
current_location当前语义位置事件触发
robot_pose几何位姿高频(限 10 Hz)
planned_path当前算路路径事件触发
locomotion_status导航执行状态事件触发
pnc_status规控避障状态摘要事件触发
task_status任务状态列表事件触发
exhibit_tasks展厅讲解任务列表事件触发
silisoon业务模式与状态扩展事件触发
robot_form机器人形态一次性 / 偶尔
manipulation机械臂 / 抓取状态事件触发
supported_calligraphy_list书法可写文字列表一次性 / 偶尔
tts_statusTTS 运行态事件触发
vad_statusVAD 运行态事件触发
dialog_status对话状态机事件触发
action_status动作 / 技能任务状态事件触发
listening_status端侧聆听 / 唤醒状态事件触发
wakeup_behavior_status唤醒表现覆盖配置状态事件触发
vision_perception视觉感知摘要高频(限 10 Hz)
speaker当前发言人信息事件触发
settings端侧开关状态面板事件触发

map_info

地图基础信息与导航点位。

字段类型必填说明
map_idstring / number否地图 ID
map_namestring否地图名称
navi_pointsarray否导航点列表
wallsarray否墙位置信息列表
infeasible_areasarray否人工墙位置信息列表

walls / infeasible_areas 元素格式:

字段类型必填说明
idnumber是点位 ID
xnumber否X 坐标
ynumber否Y 坐标
znumber否Z 坐标

navi_points 元素格式:

字段类型必填说明
namestring是点位名称
idnumber是点位 ID
point_xnumber否X 坐标
point_ynumber否Y 坐标

JSON 样例:

json
{
    "map_id": "MAP_001",
    "map_name": "1F 大厅",
    "navi_points": [
        { "name": "前台", "id": 1, "point_x": 1.2, "point_y": 3.4 },
        { "name": "茶水间", "id": 2, "point_x": 5.6, "point_y": 7.8 }
    ],
    "walls": [
        { "id": 101, "x": 0.0, "y": 0.0, "z": 0.0 },
        { "id": 102, "x": 10.0, "y": 0.0, "z": 0.0 }
    ],
    "infeasible_areas": [
        { "id": 201, "x": 2.5, "y": 3.0, "z": 0.0 }
    ]
}

map_2d_grid

二维栅格地图快照——仅在地图切换、地图版本变化、首次全量同步或收到 session.input_status_info.sync 时低频上报。

默认推荐编码:int8 raw 原始栅格、zstd 压缩、base64 封装,对应 encoding 为 int8_zstd_base64。

字段类型必填说明
map_idstring / number是地图 ID
map_namestring否地图名称
versionstring否地图版本号
framestring否坐标系,例如 map
widthnumber是栅格宽度(格)
heightnumber是栅格高度(格)
resolutionnumber是米 / 格
originobject是原点对象,含 x / y / yaw
encodingstring是首推 int8_zstd_base64;调试可用 int8_raw
datastring否压缩并 base64 编码后的地图内容
data_md5string否地图内容摘要
compressionobject否大数据压缩元信息
transportobject否大数据特化传输元信息

JSON 样例:

json
{
    "map_id": "MAP_001",
    "map_name": "1F 大厅",
    "version": "v2",
    "frame": "map",
    "width": 1024,
    "height": 1024,
    "resolution": 0.05,
    "origin": { "x": -25.6, "y": -25.6, "yaw": 0.0 },
    "encoding": "int8_zstd_base64",
    "data": "KLUv/QBYDQAA...<base64>...",
    "data_md5": "9e107d9d372bb6826bd81d3542a419d6",
    "compression": {
        "raw_layout": "int8_row_major",
        "algorithm": "zstd",
        "binary_encoding": "base64"
    },
    "transport": { "mode": "inline" }
}

current_location

当前语义位置信息(高频几何位姿请走 robot_pose)。

字段类型必填说明
location_namestring否位置名称
location_coordinatestring否坐标字符串,建议格式 "x,y"
orientationnumber / null否朝向角,建议单位为度
floorstring / number否楼层信息
buildingstring否楼宇 / 场馆信息

JSON 样例:

json
{
    "location_name": "前台",
    "location_coordinate": "1.2,3.4",
    "orientation": 90,
    "floor": "1F",
    "building": "总部大楼"
}

robot_pose

机器人当前几何位姿。

字段类型必填说明
map_idstring / number否所属地图 ID
framestring否map / odom 等
xnumber是当前 X 坐标
ynumber是当前 Y 坐标
znumber否当前 Z 坐标
yawnumber是当前偏航角,建议弧度
pitchnumber否俯仰角
rollnumber否翻滚角
quaternionobject否四元数对象
linear_velocityobject否线速度对象
angular_velocityobject否角速度对象
timestamp_msnumber否采样时间戳

高频几何状态——SDK 上传层默认按模块做最大 10 Hz 限频;限频仅约束上云频率,本地缓存仍保留最新一次写入。

JSON 样例:

json
{
    "map_id": "MAP_001",
    "frame": "map",
    "x": 1.234,
    "y": 5.678,
    "z": 0.0,
    "yaw": 1.5708,
    "pitch": 0.0,
    "roll": 0.0,
    "quaternion": { "w": 0.7071, "x": 0.0, "y": 0.0, "z": 0.7071 },
    "linear_velocity": { "x": 0.3, "y": 0.0, "z": 0.0 },
    "angular_velocity": { "x": 0.0, "y": 0.0, "z": 0.1 },
    "timestamp_ms": 1774828800210
}

planned_path

当前算路路径,建议按整条路径替换,不做点级局部 merge。

字段类型必填说明
path_idstring否路径 ID
map_idstring / number否所属地图 ID
framestring否坐标系
plannerstring否规划器名称
planning_statusstring是running / ready / replanned / blocked / failed
start_poseobject否起点位姿
target_poseobject否终点位姿
path_pointsarray是路径点列表
total_length_mnumber否总路径长度
remaining_length_mnumber否剩余路径长度
eta_secnumber否预计剩余时间(秒)
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "path_id": "path_001",
    "map_id": "MAP_001",
    "frame": "map",
    "planner": "global_planner_v2",
    "planning_status": "running",
    "start_pose": { "x": 0.0, "y": 0.0, "yaw": 0.0 },
    "target_pose": { "x": 10.0, "y": 5.0, "yaw": 1.5708 },
    "path_points": [
        { "x": 0.0, "y": 0.0 },
        { "x": 2.5, "y": 1.2 },
        { "x": 5.0, "y": 2.5 },
        { "x": 7.5, "y": 3.8 },
        { "x": 10.0, "y": 5.0 }
    ],
    "total_length_m": 11.18,
    "remaining_length_m": 8.94,
    "eta_sec": 30,
    "updated_at_ms": 1774828800210
}

locomotion_status

当前导航执行状态。

字段类型必填说明
motion_task_idstring / number否导航任务 ID
task_namestring否任务名称
task_typestring否首阶段建议固定为 navigation
statestring是waiting / running / paused / completed / failed
target_xnumber否目标 X
target_ynumber否目标 Y
target_znumber否目标 Z
start_time_msnumber否开始时间
estimated_completion_msnumber否预计完成时间
timestamp_msnumber否更新时间
trace_idstring否追踪 ID
error_messagestring否错误原因

JSON 样例:

json
{
    "motion_task_id": "nav_001",
    "task_name": "前往茶水间",
    "task_type": "navigation",
    "state": "running",
    "target_x": 10.0,
    "target_y": 5.0,
    "target_z": 0.0,
    "start_time_ms": 1774828800000,
    "estimated_completion_ms": 1774828830000,
    "timestamp_ms": 1774828810000,
    "trace_id": "trace_abc123",
    "error_message": ""
}

pnc_status

规划 / 控制 / 避障状态摘要。

字段类型必填说明
statusstring是running / path_block / start_replan / replan_timeout / task_finish / task_error
detailstring否面向云端看板的简短补充说明

JSON 样例:

json
{
    "status": "path_block",
    "detail": "前方有静态障碍物,正在重规划"
}

task_status

任务状态列表。值类型:array<object>。

字段类型必填说明
statestring是running / idle / pause 等任务状态
task_namestring是用户可理解的任务名
task_idstring / number否任务 ID
task_typestring否任务类型,例如 navigation / calligraphy
messagestring否当前任务说明
updated_at_msnumber否最近更新时间

JSON 样例:

json
[
    {
        "state": "running",
        "task_name": "导航到茶水间",
        "task_id": "nav_001",
        "task_type": "navigation",
        "message": "执行中",
        "updated_at_ms": 1774828810000
    }
]

exhibit_tasks

当前 aimrt_agent 落地使用的扩展模块,用于同步展厅讲解任务列表。值类型:array。

字段类型必填说明
task_namestring是讲解任务名称
task_idstring / number是讲解任务 ID
pointsarray<object>否任务关联点位列表

points 元素:

字段类型必填说明
namestring是点位名称
idstring / number是点位 ID

JSON 样例:

json
[
    {
        "task_name": "总部参观线路 A",
        "task_id": "exhibit_001",
        "points": [
            { "name": "前台", "id": 1 },
            { "name": "展示厅", "id": 2 },
            { "name": "茶水间", "id": 3 }
        ]
    }
]

silisoon

SDK 兼容专项事件 waiter.silisoon.status_upload 写入的扩展模块。

字段类型必填说明
modenumber是业务模式:1=interaction / 2=silisoon / 3=抓取模式
silisoon_statusnumber是业务状态值:1=送货中 / 2=空闲

JSON 样例:

json
{
    "mode": 2,
    "silisoon_status": 1
}

robot_form

机器人形态。值类型:string(裸字符串,不是对象)。

示例值:"two-legged" / "four-legged" / "wheeled"。

JSON 样例(裸字符串):

json
"wheeled"

manipulation

机械臂 / 抓取 / 操作能力相关状态。

字段类型必填说明
is_onboolean是当前是否处于 manipulation 能力开启 / 可用状态
modestring否可选运行模式,例如 pick / place / assist
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "is_on": true,
    "mode": "pick",
    "updated_at_ms": 1774828810000
}

supported_calligraphy_list

支持的书法文字列表。值类型:array<string>。

JSON 样例:

json
["福", "禄", "寿", "喜", "你好", "新年快乐"]

tts_status

TTS 运行态快照。

字段类型必填说明
statestring是idle / begin / playing / finished / interrupted / failed
item_idstring否本次播报唯一标识
event_idstring否关联对话事件 ID
textstring否当前播报文本
domainstring否领域标识(task_master / omnissdk / agent 等)
prioritynumber否当前播报优先级
error_msgstring否失败原因
in_queue_item_idsarray<string>否当前排队中的剩余 item 列表
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "state": "playing",
    "item_id": "item_tts_001",
    "event_id": "event_dialog_001",
    "text": "好的,正在为您播报。",
    "domain": "agent",
    "priority": 5,
    "error_msg": "",
    "in_queue_item_ids": ["item_tts_002", "item_tts_003"],
    "updated_at_ms": 1774828810000
}

vad_status

VAD 运行态快照。

字段类型必填说明
statestring是bos / continue / eos / bos_timeout / finish
event_idstring否关联对话事件 ID
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "state": "eos",
    "event_id": "event_dialog_001",
    "updated_at_ms": 1774828810000
}

dialog_status

对话状态快照,覆盖 quit_voice 之前 / 之后的阶段。

字段类型必填说明
statestring是idle / wake_up / waiting_asr / waiting_dm / processing_local / processing_remote / interrupted / finish
event_idstring否当前对话事件 ID
before_quit_voiceboolean否是否表示 quit_voice 前最后一次稳定状态
sourcestring否状态来源
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "state": "waiting_dm",
    "event_id": "event_dialog_001",
    "before_quit_voice": false,
    "source": "sdk_dialog_manager",
    "updated_at_ms": 1774828810000
}

action_status

动作 / 技能 / 运行任务状态快照。

字段类型必填说明
statestring是idle / running / pause / completed / failed
tagstring否动作标签,如 write / navigation / grasp
task_namestring否任务名称
task_idstring / number否任务 ID
messagestring否当前运行说明
updated_at_msnumber否最近更新时间

多个并行任务可上传数组。

JSON 样例(单任务对象):

json
{
    "state": "running",
    "tag": "write",
    "task_name": "写 福 字",
    "task_id": "action_001",
    "message": "笔顺执行中 3/5",
    "updated_at_ms": 1774828810000
}

listening_status

端侧聆听状态快照。

字段类型必填说明
statestring是listening / non_wakeup_silent
wakeup_statestring是already_wake_up / idle
event_idstring否当前对话 / 唤醒事件 ID
sourcestring否状态来源
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "state": "listening",
    "wakeup_state": "already_wake_up",
    "event_id": "status_nav_001",
    "source": "sdk_wakeup_manager",
    "updated_at_ms": 1774828800210
}

wakeup_behavior_status

唤醒表现覆盖状态快照——用于回传云端下发的 agentsdk.flow 唤醒表现控制是否已生效。

字段类型必填说明
statestring是active / expired / cleared / failed
flow_idstring否触发该覆盖配置的 flow ID
request_event_idstring否触发该覆盖配置的 event ID
ttl_msnumber否本次覆盖配置的保活时长,默认 30000
expires_at_msnumber否端侧本地计算的过期时间戳
interrupt_current_interactionboolean否是否需要打断当前交互
behaviorobject否当前生效的表现配置;空对象表示仅开启聆听
error_msgstring否state=failed 时的失败原因
sourcestring否状态来源
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "state": "active",
    "flow_id": "flow_mock_demo_001",
    "request_event_id": "event_wakeup_behavior_001",
    "ttl_ms": 30000,
    "expires_at_ms": 1774828830210,
    "interrupt_current_interaction": true,
    "behavior": {
        "tts": { "text": "我在,请说" },
        "emoticon": { "id": 103, "times": 1 },
        "motion": { "id": [10226] }
    },
    "source": "agentsdk.flow",
    "updated_at_ms": 1774828800210
}

vision_perception

视觉感知摘要快照,可同时承载相对图像的几何位置信息。

字段类型必填说明
perception_modestring否当前感知模式,示例:full / only_face
greeting_in_dialogboolean否当前是否允许全双工下迎宾
streamsobject否各感知流的摘要,key 为 stream_id
aggregateobject是跨 stream 聚合后的稳定摘要
updated_at_msnumber否最近更新时间

JSON 样例:

json
{
    "perception_mode": "full",
    "greeting_in_dialog": true,
    "streams": {
        "front_cam": {
            "image_size": { "width": 1280, "height": 720 },
            "person_count": 2,
            "tracked_person_count": 2,
            "known_face_ids": ["face_uid001"],
            "gesture_labels": ["wave"],
            "action_labels": [],
            "persons": [
                {
                    "track_id": 1,
                    "global_id": "g_1",
                    "face_uid": "face_uid001",
                    "identity_category": "recognized_known",
                    "face": {
                        "box_norm": { "x": 0.29, "y": 0.17, "w": 0.05, "h": 0.11, "cx": 0.32, "cy": 0.22 },
                        "yaw": 4.8, "pitch": -2.1, "roll": 0.9
                    }
                }
            ]
        }
    },
    "aggregate": {
        "person_count": 2,
        "tracked_person_count": 2,
        "known_face_ids": ["face_uid001"],
        "unknown_face_count": 1,
        "facing_face_count": 1,
        "gesture_labels": ["wave"],
        "action_labels": []
    },
    "updated_at_ms": 1774828810000
}

speaker

发言人信息。

字段类型必填说明
event_idstring否关联对话事件 ID
orderstring否多说话人时的排序
image_sizeobject否当前帧的图像尺寸 {width, height}
speaker_idstring否当前发言人 ID
doanumber否DOA 角度估计
personsarray<object>是候选人列表

JSON 样例:

json
{
    "event_id": "event_xxx",
    "order": "left_to_right",
    "image_size": { "width": 1280, "height": 720 },
    "speaker_id": "face_uid001",
    "doa": 60,
    "persons": [
        {
            "face_uid": "face_uid001",
            "identity_category": "recognized_known",
            "user_name": "张三",
            "user_desc": "001 号员工,创业元老",
            "age": 14,
            "gender": 0
        }
    ]
}

settings

端侧开关状态面板——每个子字段原则上都是 bool。

字段类型必填说明
greeting_in_dialogbool否当前是否开启全双工状态下迎宾功能

JSON 样例:

json
{
    "greeting_in_dialog": true
}

在业务侧消费

Swift

swift
override func onState(agentId: String, eventId: String, stateName: String, stateValue: String) {
    guard let data = stateValue.data(using: .utf8),
          let obj = try? JSONSerialization.jsonObject(with: data) else { return }

    switch stateName {
    case "robot_pose":
        if let pose = obj as? [String: Any] {
            print("x=\(String(describing: pose["x"])) yaw=\(String(describing: pose["yaw"]))")
        }
    case "tts_status":
        if let tts = obj as? [String: Any], tts["state"] as? String == "finished" {
            // TTS 已播完
        }
    case "robot_form":
        // robot_form 是裸字符串,无需 JSON 解析
        print("form = \(stateValue)")
    default:
        break
    }
}

Java

java
@Override
public void onState(String agentId, String eventId, String stateName, String stateValue) {
    switch (stateName) {
        case "robot_pose" -> {
            JSONObject pose = JSONObject.parseObject(stateValue);
            log.info("x={} y={} yaw={}", pose.getDouble("x"), pose.getDouble("y"), pose.getDouble("yaw"));
        }
        case "robot_form" -> log.info("form = {}", stateValue);
        default -> { /* ignore */ }
    }
}

要点:

  1. stateValue 不一定是 JSON 对象——例如 robot_form 是裸字符串、supported_calligraphy_list 是 array<string>、task_status / exhibit_tasks 是 array<object>。先按本页对应模块查清楚类型再解析。
  2. 频率敏感:robot_pose 与 vision_perception 默认按模块 ≤ 10 Hz,业务侧不要在每次 onState 里做重 I/O。
  3. 整体替换语义:planned_path / exhibit_tasks / supported_calligraphy_list 等的更新是整数组替换,不要做点级 merge。
  4. 空态显式上发:若当前无任务但需要显式同步,约定上发 task_status = [{"state":"idle","task_name":""}]。