跳转到内容

任务执行引擎模块

本页面放置了任务执行引擎模块(TaskEngine)包含的话题与服务的相关文档协议,以支持用户进行任务的启动和控制等。

注意本模块仅对任务进行启动和控制,不包含任务的创建、修改、删除等管理相关操作,管理操作请到 AimMaster 上进行查看。 该模块接口能力主要为 AimMaster 上的任务启停等提供一个程序化接口进行轻度二开。

另外请注意尽量不要混用 AimMaster 控制和 TaskEngine 接口控制,部分接口调用冲突可能导致未定义行为。

本模块在旗舰款上位于 orin 开发板上,http 后端监听的端口均为 57881。

注:调用执行引擎时必须先保证机器人状态处于自动模式,可在 AimMaster 上进行调整。

接口名接口描述请求消息类型答复消息类型备注通信后端
pb:/aimdk.protocol.TaskEngineService/GetTask获取单个任务的执行信息aimdk::protocol::GetTaskRequestaimdk::protocol::GetTaskResponsehttp
pb:/aimdk.protocol.TaskEngineService/GetAllTasks获取全部任务的执行信息aimdk::protocol::GetAllTasksRequestaimdk::protocol::GetAllTasksResponsehttp
pb:/aimdk.protocol.TaskEngineService/GetAllFSMs获取全部任务FSM信息aimdk::protocol::GetAllFSMsRequestaimdk::protocol::GetAllFSMsResponsehttp
pb:/aimdk.protocol.TaskEngineService/SetTask设置任务信息aimdk::protocol::SetTaskRequestaimdk::protocol::SetTaskResponse用于创建或修改任务http
pb:/aimdk.protocol.TaskEngineService/SetCurrentTask输入任务ID并设置任务aimdk::protocol::SetCurrentTaskRequestaimdk::protocol::SetCurrentTaskResponse有任务正在执行时不可调用http
pb:/aimdk.protocol.TaskEngineService/DeleteTask删除任务aimdk::protocol::DeleteTaskRequestaimdk::protocol::DeleteTaskResponsehttp
pb:/aimdk.protocol.TaskEngineService/DeleteTaskMap删除任务地图aimdk::protocol::DeleteTaskMapRequestaimdk::protocol::DeleteTaskMapResponsehttp
pb:/aimdk.protocol.TaskEngineService/LaunchTask开始任务执行aimdk::protocol::LaunchTaskRequestaimdk::protocol::LaunchTaskResponse1. 在开始任务执行之前需要先调用 SetCurrentTask 接口设置当前任务
2. 需传入相同的 task_id,传入不同 task_id 属未定义行为
http
pb:/aimdk.protocol.TaskEngineService/CtrlTaskState控制任务暂停、继续、终止等aimdk::protocol::CtrlTaskStateRequestaimdk::protocol::CtrlTaskStateResponsehttp

任务元信息

FieldTypeDescription
task_idint64任务id,用于全局标识唯一一个任务。在任务创建/修改接口中,task_id > 0 视为修改任务 task_id < 0 视为创建新任务。客户端获得全部 task_id 的方式是调用 GetAllTasks 接口
namestring任务名
fsm_namestring任务FSM名
is_validbool任务有效性
stateaimdk::protocol::Task::StateType任务状态
durationint64任务执行时间,选填
settingstring系统任务配置后传输给task engine的yaml原文,选填
task_databytesTask内部的随路数据

状态类型

NameNumberDescription
StateType_UNDEFINED0
StateType_IDLE1静默状态
StateType_RUNNING2运行中
StateType_PAUSED3暂停
StateType_STOPPED4终止
StateType_PAUSING5暂停中
StateType_STOPPING6终止中
StateType_RESUMING7恢复中
StateType_FAILPAUSE8暂停失败
StateType_FAILSTOP9终止失败
StateType_FAILRESUME10恢复失败
StateType_EXCEPTION11运行异常
StateType_LAZY_PAUSING12等待节拍结束的暂停

task enigine 状态上报信息

FieldTypeDescription
headeraimdk::protocol::RequestHeader
dataaimdk::protocol::Task任务信息

任务信息请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader
task_idint64任务id

任务信息响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
dataaimdk::protocol::Tasktask任务信息

所有任务信息请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader

所有任务信息响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
dataaimdk::protocol::Task[]任务信息列表

所有任务FSM信息请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader

所有任务FSM信息响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
datastring[]任务FSM信息列表

任务信息设置请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader
datastring客户端生成的任务配置yaml原文

如果是创建新任务,data字段中task_id=-1;如果是修改老任务,task_id为对应的老任务id

任务信息设置响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
task_idint64成功新建、修改后的任务id
is_successbool是否设置成功

设置当前任务请求(不一定是运行任务,且有任务运行时不可设置)

FieldTypeDescription
headeraimdk::protocol::RequestHeader
task_idint64设置为当前任务的任务id

设置当前任务响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
task_idint64设置任务 id
is_successbool是否设置成功

任务删除请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader
task_idint64任务id

任务删除请求响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
task_idint64任务id
is_successbool是否成功

地图删除请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader
map_idstring地图id

地图删除请求响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
map_idstring地图id
is_successbool是否成功删除

任务启动请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader
task_idint64任务id

任务启动请求结果

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
task_idint64任务id
resaimdk::protocol::LaunchTaskResponse::ReturnType启动请求结果

aimdk::protocol::LaunchTaskResponse::ReturnType

Section titled “aimdk::protocol::LaunchTaskResponse::ReturnType”

启动请求结果类型

NameNumberDescription
ReturnType_UNDEFINED0
ReturnType_SUCCEED1请求成功
ReturnType_FAIL_TASK_CONFLICT2已有任务运行,任务冲突
ReturnType_FAIL_TASK_VALIDATE3任务校验失败
ReturnType_FAIL_UNKNOWN4未知原因

任务状态切换请求

FieldTypeDescription
headeraimdk::protocol::RequestHeader
task_idint64任务id, 如果不赋值则暂停当前任务
typeaimdk::protocol::CtrlTaskStateRequest::Type控制类型

aimdk::protocol::CtrlTaskStateRequest::Type

Section titled “aimdk::protocol::CtrlTaskStateRequest::Type”

任务状态切换类型

NameNumberDescription
Type_UNDEFINED0
Type_PAUSE1暂停
Type_RESUME2继续
Type_STOP3终止

任务状态切换响应

FieldTypeDescription
headeraimdk::protocol::ResponseHeader
task_idint64任务id
is_successbool控制结果

提供 Http Curl 示例, 如在机器人 ORIN 开发板以外执行需要将 192.168.100.110 替换为机器人 orin 开发板的 IP 地址, task_id替换为想要执行的任务id:

Terminal window
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"
}
]}
Terminal window
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",
...
}
...
]}
Terminal window
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
}
Terminal window
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"
}
Terminal window
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
}