任务执行引擎模块
任务执行引擎模块
Section titled “任务执行引擎模块”本页面放置了任务执行引擎模块(TaskEngine)包含的话题与服务的相关文档协议,以支持用户进行任务的启动和控制等。
注意本模块仅对任务进行启动和控制,不包含任务的创建、修改、删除等管理相关操作,管理操作请到 AimMaster 上进行查看。 该模块接口能力主要为 AimMaster 上的任务启停等提供一个程序化接口进行轻度二开。
另外请注意尽量不要混用 AimMaster 控制和 TaskEngine 接口控制,部分接口调用冲突可能导致未定义行为。
本模块在旗舰款上位于 orin 开发板上,http 后端监听的端口均为 57881。
注:调用执行引擎时必须先保证机器人状态处于自动模式,可在 AimMaster 上进行调整。
RPC 接口
Section titled “RPC 接口”| 接口名 | 接口描述 | 请求消息类型 | 答复消息类型 | 备注 | 通信后端 |
|---|---|---|---|---|---|
pb:/aimdk.protocol.TaskEngineService/GetTask | 获取单个任务的执行信息 | aimdk::protocol::GetTaskRequest | aimdk::protocol::GetTaskResponse | http | |
pb:/aimdk.protocol.TaskEngineService/GetAllTasks | 获取全部任务的执行信息 | aimdk::protocol::GetAllTasksRequest | aimdk::protocol::GetAllTasksResponse | http | |
pb:/aimdk.protocol.TaskEngineService/GetAllFSMs | 获取全部任务FSM信息 | aimdk::protocol::GetAllFSMsRequest | aimdk::protocol::GetAllFSMsResponse | http | |
pb:/aimdk.protocol.TaskEngineService/SetTask | 设置任务信息 | aimdk::protocol::SetTaskRequest | aimdk::protocol::SetTaskResponse | 用于创建或修改任务 | http |
pb:/aimdk.protocol.TaskEngineService/SetCurrentTask | 输入任务ID并设置任务 | aimdk::protocol::SetCurrentTaskRequest | aimdk::protocol::SetCurrentTaskResponse | 有任务正在执行时不可调用 | http |
pb:/aimdk.protocol.TaskEngineService/DeleteTask | 删除任务 | aimdk::protocol::DeleteTaskRequest | aimdk::protocol::DeleteTaskResponse | http | |
pb:/aimdk.protocol.TaskEngineService/DeleteTaskMap | 删除任务地图 | aimdk::protocol::DeleteTaskMapRequest | aimdk::protocol::DeleteTaskMapResponse | http | |
pb:/aimdk.protocol.TaskEngineService/LaunchTask | 开始任务执行 | aimdk::protocol::LaunchTaskRequest | aimdk::protocol::LaunchTaskResponse | 1. 在开始任务执行之前需要先调用 SetCurrentTask 接口设置当前任务2. 需传入相同的 task_id,传入不同 task_id 属未定义行为 | http |
pb:/aimdk.protocol.TaskEngineService/CtrlTaskState | 控制任务暂停、继续、终止等 | aimdk::protocol::CtrlTaskStateRequest | aimdk::protocol::CtrlTaskStateResponse | http |
Protobuf 消息类型
Section titled “Protobuf 消息类型”aimdk::protocol::Task
Section titled “aimdk::protocol::Task”任务元信息
| Field | Type | Description |
|---|---|---|
| task_id | int64 | 任务id,用于全局标识唯一一个任务。在任务创建/修改接口中,task_id > 0 视为修改任务 task_id < 0 视为创建新任务。客户端获得全部 task_id 的方式是调用 GetAllTasks 接口 |
| name | string | 任务名 |
| fsm_name | string | 任务FSM名 |
| is_valid | bool | 任务有效性 |
| state | aimdk::protocol::Task::StateType | 任务状态 |
| duration | int64 | 任务执行时间,选填 |
| setting | string | 系统任务配置后传输给task engine的yaml原文,选填 |
| task_data | bytes | Task内部的随路数据 |
aimdk::protocol::Task::StateType
Section titled “aimdk::protocol::Task::StateType”状态类型
| Name | Number | Description |
|---|---|---|
| StateType_UNDEFINED | 0 | |
| StateType_IDLE | 1 | 静默状态 |
| StateType_RUNNING | 2 | 运行中 |
| StateType_PAUSED | 3 | 暂停 |
| StateType_STOPPED | 4 | 终止 |
| StateType_PAUSING | 5 | 暂停中 |
| StateType_STOPPING | 6 | 终止中 |
| StateType_RESUMING | 7 | 恢复中 |
| StateType_FAILPAUSE | 8 | 暂停失败 |
| StateType_FAILSTOP | 9 | 终止失败 |
| StateType_FAILRESUME | 10 | 恢复失败 |
| StateType_EXCEPTION | 11 | 运行异常 |
| StateType_LAZY_PAUSING | 12 | 等待节拍结束的暂停 |
aimdk::protocol::TaskEngineHeartBeat
Section titled “aimdk::protocol::TaskEngineHeartBeat”task enigine 状态上报信息
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| data | aimdk::protocol::Task | 任务信息 |
aimdk::protocol::GetTaskRequest
Section titled “aimdk::protocol::GetTaskRequest”任务信息请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| task_id | int64 | 任务id |
aimdk::protocol::GetTaskResponse
Section titled “aimdk::protocol::GetTaskResponse”任务信息响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| data | aimdk::protocol::Task | task任务信息 |
aimdk::protocol::GetAllTasksRequest
Section titled “aimdk::protocol::GetAllTasksRequest”所有任务信息请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader |
aimdk::protocol::GetAllTasksResponse
Section titled “aimdk::protocol::GetAllTasksResponse”所有任务信息响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| data | aimdk::protocol::Task[] | 任务信息列表 |
aimdk::protocol::GetAllFSMsRequest
Section titled “aimdk::protocol::GetAllFSMsRequest”所有任务FSM信息请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader |
aimdk::protocol::GetAllFSMsResponse
Section titled “aimdk::protocol::GetAllFSMsResponse”所有任务FSM信息响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| data | string[] | 任务FSM信息列表 |
aimdk::protocol::SetTaskRequest
Section titled “aimdk::protocol::SetTaskRequest”任务信息设置请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| data | string | 客户端生成的任务配置yaml原文 |
如果是创建新任务,data字段中task_id=-1;如果是修改老任务,task_id为对应的老任务id
aimdk::protocol::SetTaskResponse
Section titled “aimdk::protocol::SetTaskResponse”任务信息设置响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| task_id | int64 | 成功新建、修改后的任务id |
| is_success | bool | 是否设置成功 |
aimdk::protocol::SetCurrentTaskRequest
Section titled “aimdk::protocol::SetCurrentTaskRequest”设置当前任务请求(不一定是运行任务,且有任务运行时不可设置)
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| task_id | int64 | 设置为当前任务的任务id |
aimdk::protocol::SetCurrentTaskResponse
Section titled “aimdk::protocol::SetCurrentTaskResponse”设置当前任务响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| task_id | int64 | 设置任务 id |
| is_success | bool | 是否设置成功 |
aimdk::protocol::DeleteTaskRequest
Section titled “aimdk::protocol::DeleteTaskRequest”任务删除请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| task_id | int64 | 任务id |
aimdk::protocol::DeleteTaskResponse
Section titled “aimdk::protocol::DeleteTaskResponse”任务删除请求响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| task_id | int64 | 任务id |
| is_success | bool | 是否成功 |
aimdk::protocol::DeleteTaskMapRequest
Section titled “aimdk::protocol::DeleteTaskMapRequest”地图删除请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| map_id | string | 地图id |
aimdk::protocol::DeleteTaskMapResponse
Section titled “aimdk::protocol::DeleteTaskMapResponse”地图删除请求响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| map_id | string | 地图id |
| is_success | bool | 是否成功删除 |
aimdk::protocol::LaunchTaskRequest
Section titled “aimdk::protocol::LaunchTaskRequest”任务启动请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| task_id | int64 | 任务id |
aimdk::protocol::LaunchTaskResponse
Section titled “aimdk::protocol::LaunchTaskResponse”任务启动请求结果
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| task_id | int64 | 任务id |
| res | aimdk::protocol::LaunchTaskResponse::ReturnType | 启动请求结果 |
aimdk::protocol::LaunchTaskResponse::ReturnType
Section titled “aimdk::protocol::LaunchTaskResponse::ReturnType”启动请求结果类型
| Name | Number | Description |
|---|---|---|
| ReturnType_UNDEFINED | 0 | |
| ReturnType_SUCCEED | 1 | 请求成功 |
| ReturnType_FAIL_TASK_CONFLICT | 2 | 已有任务运行,任务冲突 |
| ReturnType_FAIL_TASK_VALIDATE | 3 | 任务校验失败 |
| ReturnType_FAIL_UNKNOWN | 4 | 未知原因 |
aimdk::protocol::CtrlTaskStateRequest
Section titled “aimdk::protocol::CtrlTaskStateRequest”任务状态切换请求
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::RequestHeader | |
| task_id | int64 | 任务id, 如果不赋值则暂停当前任务 |
| type | aimdk::protocol::CtrlTaskStateRequest::Type | 控制类型 |
aimdk::protocol::CtrlTaskStateRequest::Type
Section titled “aimdk::protocol::CtrlTaskStateRequest::Type”任务状态切换类型
| Name | Number | Description |
|---|---|---|
| Type_UNDEFINED | 0 | |
| Type_PAUSE | 1 | 暂停 |
| Type_RESUME | 2 | 继续 |
| Type_STOP | 3 | 终止 |
aimdk::protocol::CtrlTaskStateResponse
Section titled “aimdk::protocol::CtrlTaskStateResponse”任务状态切换响应
| Field | Type | Description |
|---|---|---|
| header | aimdk::protocol::ResponseHeader | |
| task_id | int64 | 任务id |
| is_success | bool | 控制结果 |
提供 Http Curl 示例, 如在机器人 ORIN 开发板以外执行需要将 192.168.100.110 替换为机器人 orin 开发板的 IP 地址, task_id替换为想要执行的任务id:
获取单个任务
Section titled “获取单个任务”curl --location --request POST 'http://192.168.100.110:57881/rpc/aimdk.protocol.TaskEngineService/GetTask' \--header 'Content-Type: application/json' \--data-raw '{ "task_id": "1" }'# GetTaskResponse{"data": [{ "task_id": "1", "name": "task1", "is_valid": true, "state": "StateType_IDLE", "duration": "0", "setting": "task_type: interaction_1 xxx YAML content"}]}获取全量任务
Section titled “获取全量任务”curl --location --request POST 'http://192.168.100.110:57881/rpc/aimdk.protocol.TaskEngineService/GetAllTasks' \--header 'Content-Type: application/json' \--data-raw '{}'# GetAllTasksResponse{"data": [{ "task_id": "1", "name": "task1", "is_valid": true, "state": "StateType_IDLE", "duration": "0", "setting": "task_type: interaction_1 xxx YAML content"},{ "task_id": "2", "name": "task2", ...}...]}用任务ID设置任务
Section titled “用任务ID设置任务”curl --location --request POST 'http://192.168.100.110:57881/rpc/aimdk.protocol.TaskEngineService/SetCurrentTask' \--header 'Content-Type: application/json' \--data-raw '{ "task_id": "15" }'
# SetCurrentTaskResponse{ "header":{ "code":"0", "msg":"", "domain":"" }, "task_id":"15", "is_success":true}curl --location --request POST 'http://192.168.100.110:57881/rpc/aimdk.protocol.TaskEngineService/LaunchTask' \--header 'Content-Type: application/json' \--data-raw '{ "task_id": "15" }'
# LaunchTaskResponse{ "header":{ "code":"0", "msg":"", "domain":"" }, "task_id":"15", "res":"ReturnType_SUCCEED"}暂停/恢复/终止任务
Section titled “暂停/恢复/终止任务”curl --location --request POST 'http://192.168.100.110:57881/rpc/aimdk.protocol.TaskEngineService/CtrlTaskState' \--header 'Content-Type: application/json' \--data-raw '{ "task_id": "15", "type" : "Type_PAUSE" }'
# CtrlTaskStateResponse{ "header":{ "code":"0", "msg":"", "domain":"" }, "task_id":"15", "is_success":true}