1632 lines
36 KiB
JSON
1632 lines
36 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "urn:robot-bt:contracts:blackboard-group-snapshot:1",
|
|
"title": "Robot BT Blackboard atomic group snapshot v1 — proposed external-store protocol",
|
|
"description": "This is a proposed shared storage envelope, not a deployed service or the ROS IDL. Semantic CAS, TTL, writer authentication, UUID correlation and epoch validation are required outside JSON Schema. No motor/velocity/joint/action-chunk fields are accepted. Timeout fields are storage projections in milliseconds, not additions to ExecuteManipulation.action.",
|
|
"type": "object",
|
|
"properties": {
|
|
"schema_version": {
|
|
"const": 1
|
|
},
|
|
"robot_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"group": {
|
|
"type": "string",
|
|
"enum": [
|
|
"task",
|
|
"current_step",
|
|
"navigation_config",
|
|
"target_binding",
|
|
"placement_binding",
|
|
"navigation_execution",
|
|
"manipulation_execution",
|
|
"verification",
|
|
"robot_state",
|
|
"safety_state",
|
|
"task_result"
|
|
]
|
|
},
|
|
"revision": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"previous_revision": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"writer": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TaskCoordinator",
|
|
"BTExecutor",
|
|
"TaskAdapter",
|
|
"GroundTargetAdapter",
|
|
"FreeSpaceAdapter",
|
|
"NavigationActionAdapter",
|
|
"ManipulationActionAdapter",
|
|
"VerificationAdapter",
|
|
"RobotStateBridge",
|
|
"SafetyBridge",
|
|
"TaskFinalizer"
|
|
]
|
|
},
|
|
"trace": {
|
|
"$ref": "#/$defs/trace"
|
|
},
|
|
"source_goal_id": {
|
|
"type": "string"
|
|
},
|
|
"geometry_epoch": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,19})$",
|
|
"description": "Canonical unsigned decimal string; semantic validator enforces uint64 range."
|
|
},
|
|
"clock_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"observed_at_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"valid_until_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"payload": {}
|
|
},
|
|
"required": [
|
|
"schema_version",
|
|
"robot_id",
|
|
"group",
|
|
"revision",
|
|
"previous_revision",
|
|
"writer",
|
|
"trace",
|
|
"source_goal_id",
|
|
"geometry_epoch",
|
|
"clock_id",
|
|
"observed_at_ns",
|
|
"valid_until_ns",
|
|
"payload"
|
|
],
|
|
"additionalProperties": false,
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "task"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "TaskCoordinator"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/task_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "current_step"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "BTExecutor"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/current_step_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "navigation_config"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "TaskAdapter"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/navigation_config_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "target_binding"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "GroundTargetAdapter"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/target_binding_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "placement_binding"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "FreeSpaceAdapter"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/placement_binding_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "navigation_execution"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "NavigationActionAdapter"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/navigation_execution_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "manipulation_execution"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "ManipulationActionAdapter"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/manipulation_execution_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "verification"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "VerificationAdapter"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/verification_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "robot_state"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "RobotStateBridge"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/robot_state_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "safety_state"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "SafetyBridge"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/safety_state_payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"group": {
|
|
"const": "task_result"
|
|
}
|
|
},
|
|
"required": [
|
|
"group"
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"writer": {
|
|
"const": "TaskFinalizer"
|
|
},
|
|
"payload": {
|
|
"$ref": "#/$defs/task_result_payload"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"$defs": {
|
|
"trace": {
|
|
"type": "object",
|
|
"properties": {
|
|
"task_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"subtask_id": {
|
|
"type": "string"
|
|
},
|
|
"attempt": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 4294967295
|
|
},
|
|
"task_revision": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 4294967295
|
|
},
|
|
"plan_version": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 4294967295
|
|
},
|
|
"run_id": {
|
|
"type": "string"
|
|
},
|
|
"execution_generation": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,19})$",
|
|
"description": "Canonical unsigned decimal string; semantic validator enforces uint64 range."
|
|
}
|
|
},
|
|
"required": [
|
|
"task_id",
|
|
"subtask_id",
|
|
"attempt",
|
|
"task_revision",
|
|
"plan_version",
|
|
"run_id",
|
|
"execution_generation"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"object_target": {
|
|
"type": "object",
|
|
"properties": {
|
|
"object_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"required": [
|
|
"object_ref",
|
|
"description"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"region_target": {
|
|
"type": "object",
|
|
"properties": {
|
|
"region_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"required": [
|
|
"region_ref",
|
|
"description"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"empty_region_target": {
|
|
"type": "object",
|
|
"properties": {
|
|
"region_ref": {
|
|
"const": ""
|
|
},
|
|
"description": {
|
|
"const": ""
|
|
}
|
|
},
|
|
"required": [
|
|
"region_ref",
|
|
"description"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"point": {
|
|
"type": "object",
|
|
"properties": {
|
|
"frame_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"stamp_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
},
|
|
"z": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"frame_id",
|
|
"stamp_ns",
|
|
"x",
|
|
"y",
|
|
"z"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"pose": {
|
|
"type": "object",
|
|
"properties": {
|
|
"frame_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"stamp_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"position": {
|
|
"type": "object",
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
},
|
|
"z": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"x",
|
|
"y",
|
|
"z"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"orientation": {
|
|
"type": "object",
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
},
|
|
"z": {
|
|
"type": "number"
|
|
},
|
|
"w": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"x",
|
|
"y",
|
|
"z",
|
|
"w"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"frame_id",
|
|
"stamp_ns",
|
|
"position",
|
|
"orientation"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"holding": {
|
|
"type": "string",
|
|
"enum": [
|
|
"EMPTY",
|
|
"HOLDING_TARGET",
|
|
"HOLDING_OTHER",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"valid_bool": {
|
|
"type": "object",
|
|
"properties": {
|
|
"valid": {
|
|
"type": "boolean"
|
|
},
|
|
"value": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"valid",
|
|
"value"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"station": {
|
|
"type": "object",
|
|
"properties": {
|
|
"station_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"registry_version": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 4294967295
|
|
},
|
|
"region_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"shelf_id": {
|
|
"type": "string"
|
|
},
|
|
"side_id": {
|
|
"type": "string"
|
|
},
|
|
"column_id": {
|
|
"type": "string"
|
|
},
|
|
"station_type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"OBSERVATION",
|
|
"SOURCE",
|
|
"DESTINATION"
|
|
]
|
|
},
|
|
"pose": {
|
|
"$ref": "#/$defs/pose"
|
|
},
|
|
"position_tolerance_m": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"orientation_tolerance_rad": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0,
|
|
"maximum": 3.141592653589793
|
|
}
|
|
},
|
|
"required": [
|
|
"station_id",
|
|
"registry_version",
|
|
"region_ref",
|
|
"shelf_id",
|
|
"side_id",
|
|
"column_id",
|
|
"station_type",
|
|
"pose",
|
|
"position_tolerance_m",
|
|
"orientation_tolerance_rad"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"execution_result": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"COMPLETED",
|
|
"FAILED",
|
|
"CANCELED",
|
|
"TIMED_OUT",
|
|
"REJECTED"
|
|
]
|
|
},
|
|
"error_code": {
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"stop_state": {
|
|
"type": "string",
|
|
"enum": [
|
|
"UNKNOWN",
|
|
"CONFIRMED"
|
|
]
|
|
},
|
|
"stopped_at_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"stop_evidence_ref": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"status",
|
|
"error_code",
|
|
"message",
|
|
"stop_state",
|
|
"stopped_at_ns",
|
|
"stop_evidence_ref"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"navigation_request": {
|
|
"type": "object",
|
|
"properties": {
|
|
"trace": {
|
|
"$ref": "#/$defs/trace"
|
|
},
|
|
"target_pose": {
|
|
"$ref": "#/$defs/pose"
|
|
},
|
|
"position_tolerance_m": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"orientation_tolerance_rad": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0,
|
|
"maximum": 3.141592653589793
|
|
},
|
|
"timeout_ms": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"trace",
|
|
"target_pose",
|
|
"position_tolerance_m",
|
|
"orientation_tolerance_rad",
|
|
"timeout_ms"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"manipulation_request": {
|
|
"type": "object",
|
|
"properties": {
|
|
"trace": {
|
|
"$ref": "#/$defs/trace"
|
|
},
|
|
"skill": {
|
|
"type": "string",
|
|
"enum": [
|
|
"pick",
|
|
"place"
|
|
]
|
|
},
|
|
"instruction": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"target": {
|
|
"$ref": "#/$defs/object_target"
|
|
},
|
|
"destination": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/$defs/region_target"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/empty_region_target"
|
|
}
|
|
]
|
|
},
|
|
"timeout_ms": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"trace",
|
|
"skill",
|
|
"instruction",
|
|
"target",
|
|
"destination",
|
|
"timeout_ms"
|
|
],
|
|
"additionalProperties": false,
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"skill": {
|
|
"const": "pick"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"destination": {
|
|
"$ref": "#/$defs/empty_region_target"
|
|
}
|
|
}
|
|
},
|
|
"else": {
|
|
"properties": {
|
|
"destination": {
|
|
"$ref": "#/$defs/region_target"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"navigation_feedback": {
|
|
"type": "object",
|
|
"properties": {
|
|
"stamp_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"sequence": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 4294967295
|
|
},
|
|
"phase": {
|
|
"type": "string",
|
|
"enum": [
|
|
"CHECKING",
|
|
"PLANNING",
|
|
"NAVIGATING",
|
|
"WAITING_OBSTACLE",
|
|
"RECOVERING",
|
|
"ARRIVING",
|
|
"STOPPING"
|
|
]
|
|
},
|
|
"pose_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"current_pose": {
|
|
"$ref": "#/$defs/pose"
|
|
},
|
|
"errors_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"position_error_m": {
|
|
"type": "number"
|
|
},
|
|
"orientation_error_rad": {
|
|
"type": "number"
|
|
},
|
|
"blocked_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"blocked": {
|
|
"type": "boolean"
|
|
},
|
|
"elapsed_ms": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"stamp_ns",
|
|
"sequence",
|
|
"phase",
|
|
"pose_valid",
|
|
"current_pose",
|
|
"errors_valid",
|
|
"position_error_m",
|
|
"orientation_error_rad",
|
|
"blocked_valid",
|
|
"blocked",
|
|
"elapsed_ms",
|
|
"message"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"manipulation_feedback": {
|
|
"type": "object",
|
|
"properties": {
|
|
"stamp_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
},
|
|
"sequence": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 4294967295
|
|
},
|
|
"phase": {
|
|
"type": "string",
|
|
"enum": [
|
|
"PREPARING",
|
|
"WAITING_OBSERVATION",
|
|
"INFERRING",
|
|
"EXECUTING",
|
|
"COMPLETING",
|
|
"STOPPING"
|
|
]
|
|
},
|
|
"progress_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"progress": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1
|
|
},
|
|
"elapsed_ms": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"stamp_ns",
|
|
"sequence",
|
|
"phase",
|
|
"progress_valid",
|
|
"progress",
|
|
"elapsed_ms",
|
|
"message"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"goal_record": {
|
|
"type": "object",
|
|
"properties": {
|
|
"goal_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"run_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"subtask_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"attempt": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 4294967295
|
|
},
|
|
"state": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SENDING",
|
|
"ACTIVE",
|
|
"CANCEL_REQUESTED",
|
|
"STOP_UNKNOWN",
|
|
"TERMINAL"
|
|
]
|
|
},
|
|
"cancel_intent": {
|
|
"type": "boolean"
|
|
},
|
|
"native_terminal": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NONE",
|
|
"SUCCEEDED",
|
|
"ABORTED",
|
|
"CANCELED",
|
|
"REJECTED",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"stop_state": {
|
|
"type": "string",
|
|
"enum": [
|
|
"UNKNOWN",
|
|
"CONFIRMED"
|
|
]
|
|
},
|
|
"last_sequence": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 4294967295
|
|
},
|
|
"result": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/execution_result"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"goal_id",
|
|
"run_id",
|
|
"subtask_id",
|
|
"attempt",
|
|
"state",
|
|
"cancel_intent",
|
|
"native_terminal",
|
|
"stop_state",
|
|
"last_sequence",
|
|
"result"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"verification_evidence": {
|
|
"type": "object",
|
|
"properties": {
|
|
"check": {
|
|
"type": "string",
|
|
"enum": [
|
|
"PRECHECK",
|
|
"PICK",
|
|
"TRANSPORT",
|
|
"PLACE",
|
|
"STOPPED"
|
|
]
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"PASSED",
|
|
"FAILED",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"target_ref": {
|
|
"type": "string"
|
|
},
|
|
"destination_ref": {
|
|
"type": "string"
|
|
},
|
|
"holding_state": {
|
|
"$ref": "#/$defs/holding"
|
|
},
|
|
"target_match": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"grasp_stable": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"hand_empty": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"target_in_destination": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"stopped": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"source": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"evidence_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"error_code": {
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"check",
|
|
"status",
|
|
"target_ref",
|
|
"destination_ref",
|
|
"holding_state",
|
|
"target_match",
|
|
"grasp_stable",
|
|
"hand_empty",
|
|
"target_in_destination",
|
|
"stopped",
|
|
"source",
|
|
"evidence_ref",
|
|
"error_code",
|
|
"message"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"delivery_record": {
|
|
"type": "object",
|
|
"properties": {
|
|
"task_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"item_index": {
|
|
"const": 0
|
|
},
|
|
"target_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"destination_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"verification_goal_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"evidence_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"committed_at_ns": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,18})$",
|
|
"description": "Nanoseconds in the declared ROS clock domain, encoded as decimal string to preserve precision; zero is invalid for observations."
|
|
}
|
|
},
|
|
"required": [
|
|
"task_id",
|
|
"item_index",
|
|
"target_ref",
|
|
"destination_ref",
|
|
"verification_goal_id",
|
|
"evidence_ref",
|
|
"committed_at_ns"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"task_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"RECEIVED",
|
|
"QUEUED",
|
|
"PLANNING",
|
|
"NEEDS_CLARIFICATION",
|
|
"READY",
|
|
"EXECUTING",
|
|
"PAUSING",
|
|
"PAUSED",
|
|
"CANCELING",
|
|
"INTERVENTION_REQUIRED",
|
|
"SUCCEEDED",
|
|
"FAILED",
|
|
"CANCELED",
|
|
"EXPIRED"
|
|
]
|
|
},
|
|
"status_version": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]{0,19})$",
|
|
"description": "Canonical unsigned decimal string; semantic validator enforces uint64 range."
|
|
},
|
|
"instruction": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 1000
|
|
},
|
|
"plan_hash": {
|
|
"type": "string"
|
|
},
|
|
"approved_plan_ref": {
|
|
"type": "string"
|
|
},
|
|
"question_id": {
|
|
"type": "string"
|
|
},
|
|
"canceled": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"status",
|
|
"status_version",
|
|
"instruction",
|
|
"plan_hash",
|
|
"approved_plan_ref",
|
|
"question_id",
|
|
"canceled"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"current_step_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"stage": {
|
|
"type": "string",
|
|
"enum": [
|
|
"PREFLIGHT",
|
|
"NAVIGATE_OBSERVE",
|
|
"LOCATE_SHELF_COLUMN",
|
|
"NAVIGATE_SOURCE",
|
|
"LOCALIZE_TARGET",
|
|
"PICK",
|
|
"VERIFY_PICK",
|
|
"TRANSPORT_POSTURE",
|
|
"VERIFY_TRANSPORT",
|
|
"NAVIGATE_DESTINATION",
|
|
"CHECK_FREE_SPACE",
|
|
"PLACE",
|
|
"VERIFY_PLACE",
|
|
"DELIVER",
|
|
"CLEANUP"
|
|
]
|
|
},
|
|
"subtask_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"attempt": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"active_goal_id": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"stage",
|
|
"subtask_id",
|
|
"attempt",
|
|
"active_goal_id"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"navigation_config_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"source_observation": {
|
|
"$ref": "#/$defs/station"
|
|
},
|
|
"source_parking": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/station"
|
|
}
|
|
]
|
|
},
|
|
"destination": {
|
|
"$ref": "#/$defs/station"
|
|
}
|
|
},
|
|
"required": [
|
|
"source_observation",
|
|
"source_parking",
|
|
"destination"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"target_binding_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"target": {
|
|
"$ref": "#/$defs/object_target"
|
|
},
|
|
"grasp_region_ref": {
|
|
"type": "string"
|
|
},
|
|
"target_point": {
|
|
"$ref": "#/$defs/point"
|
|
},
|
|
"grasp_point": {
|
|
"$ref": "#/$defs/point"
|
|
},
|
|
"grasp_point_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"geometry_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"station_binding_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"shelf_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"side_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"column_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"tier_id": {
|
|
"type": "string"
|
|
},
|
|
"calibration_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"observation_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"required": [
|
|
"target",
|
|
"grasp_region_ref",
|
|
"target_point",
|
|
"grasp_point",
|
|
"grasp_point_valid",
|
|
"geometry_valid",
|
|
"station_binding_ref",
|
|
"shelf_id",
|
|
"side_id",
|
|
"column_id",
|
|
"tier_id",
|
|
"calibration_id",
|
|
"observation_id"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"placement_binding_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"target_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"destination": {
|
|
"$ref": "#/$defs/region_target"
|
|
},
|
|
"placement_region_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"placement_point": {
|
|
"$ref": "#/$defs/point"
|
|
},
|
|
"placement_point_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"placement_pose": {
|
|
"$ref": "#/$defs/pose"
|
|
},
|
|
"placement_pose_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"geometry_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"observation_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"required": [
|
|
"target_ref",
|
|
"destination",
|
|
"placement_region_ref",
|
|
"placement_point",
|
|
"placement_point_valid",
|
|
"placement_pose",
|
|
"placement_pose_valid",
|
|
"geometry_valid",
|
|
"observation_id"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"navigation_execution_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"request": {
|
|
"$ref": "#/$defs/navigation_request"
|
|
},
|
|
"current_goal_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"feedback": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/navigation_feedback"
|
|
}
|
|
]
|
|
},
|
|
"result": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/execution_result"
|
|
}
|
|
]
|
|
},
|
|
"stop_state": {
|
|
"type": "string",
|
|
"enum": [
|
|
"UNKNOWN",
|
|
"CONFIRMED"
|
|
]
|
|
},
|
|
"active_goal_records": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/goal_record"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"request",
|
|
"current_goal_id",
|
|
"feedback",
|
|
"result",
|
|
"stop_state",
|
|
"active_goal_records"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"manipulation_execution_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"request": {
|
|
"$ref": "#/$defs/manipulation_request"
|
|
},
|
|
"current_goal_id": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
},
|
|
"feedback": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/manipulation_feedback"
|
|
}
|
|
]
|
|
},
|
|
"result": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/execution_result"
|
|
}
|
|
]
|
|
},
|
|
"stop_state": {
|
|
"type": "string",
|
|
"enum": [
|
|
"UNKNOWN",
|
|
"CONFIRMED"
|
|
]
|
|
},
|
|
"execution_record_ref": {
|
|
"type": "string"
|
|
},
|
|
"active_goal_records": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/goal_record"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"request",
|
|
"current_goal_id",
|
|
"feedback",
|
|
"result",
|
|
"stop_state",
|
|
"execution_record_ref",
|
|
"active_goal_records"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"verification_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"evidence": {
|
|
"$ref": "#/$defs/verification_evidence"
|
|
},
|
|
"held_target_binding": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/object_target"
|
|
}
|
|
]
|
|
},
|
|
"subject_goal_id": {
|
|
"type": "string",
|
|
"description": "Proposed storage-only linkage to the preceding manipulation/posture goal; empty only for PRECHECK/standalone stop checks. Not a field in the current VerifyState.action."
|
|
}
|
|
},
|
|
"required": [
|
|
"evidence",
|
|
"held_target_binding",
|
|
"subject_goal_id"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"robot_state_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"base_stopped": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"posture_settled": {
|
|
"$ref": "#/$defs/valid_bool"
|
|
},
|
|
"holding_state": {
|
|
"$ref": "#/$defs/holding"
|
|
},
|
|
"held_target_ref": {
|
|
"type": "string"
|
|
},
|
|
"posture_id": {
|
|
"type": "string"
|
|
},
|
|
"pose_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"pose": {
|
|
"$ref": "#/$defs/pose"
|
|
},
|
|
"evidence_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"required": [
|
|
"base_stopped",
|
|
"posture_settled",
|
|
"holding_state",
|
|
"held_target_ref",
|
|
"posture_id",
|
|
"pose_valid",
|
|
"pose",
|
|
"evidence_ref"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"safety_state_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safety_valid": {
|
|
"type": "boolean"
|
|
},
|
|
"motion_allowed": {
|
|
"type": "boolean"
|
|
},
|
|
"emergency_stop_active": {
|
|
"type": "boolean"
|
|
},
|
|
"protective_stop_active": {
|
|
"type": "boolean"
|
|
},
|
|
"error_code": {
|
|
"type": "string"
|
|
},
|
|
"evidence_ref": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"required": [
|
|
"safety_valid",
|
|
"motion_allowed",
|
|
"emergency_stop_active",
|
|
"protective_stop_active",
|
|
"error_code",
|
|
"evidence_ref"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"task_result_payload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SUCCEEDED",
|
|
"FAILED",
|
|
"CANCELED",
|
|
"INTERVENTION_REQUIRED"
|
|
]
|
|
},
|
|
"completed_quantity": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 1
|
|
},
|
|
"remaining_quantity": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 1
|
|
},
|
|
"failure_codes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 512
|
|
}
|
|
},
|
|
"delivery_ledger_ref": {
|
|
"type": "string"
|
|
},
|
|
"deliveries": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/delivery_record"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"status",
|
|
"completed_quantity",
|
|
"remaining_quantity",
|
|
"failure_codes",
|
|
"delivery_ledger_ref",
|
|
"deliveries"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|