Skip to content

规划控制模块

This content is not available in your language yet.

【本模块仅供旗舰款调用,基础款用户无需查阅】

本页面包含了规划控制模块(Planning and Control, PNC)包含的话题和服务的相关文档协议,以支持系统的规划控制功能。

本模块位于 orin 开发板上,http 后端监听的端口为 53176。

话题名话题描述订阅 or 发布消息类型备注通信后端
/path机器人运行路线发布nav_msgs::msg::Path用于可视化和调试,仅供参考ros2
/pnc/estimate_odomPNC估计的运行速度发布nav_msgs::msg::Odometry根据实时定位结果估计,仅在导航任务中发布,速度结果仅供参考,不一定准确;
如果需要持续获取机器人的定位信息请从 /tf 变换中获取(map 到 base_link 的变换)
ros2

任务下发接口统一说明:
1.执行任务前,需要机器人重定位成功,且下发任务的地图id需要与重定位的地图一致
2.执行任务前,需要将MC状态切换到RL_LOCOMOTION_DEFAULT(强化直腿)模式,否则机器人可能无法正常响应PNC的速度指令
3.下发任务时,需要设置task_id,若不设置(默认为0),PNC会自动生成一个task_id,并在response中返回,客户端需要保存该task_id以便后续下发控制指令或查询任务状态

接口名接口描述请求消息类型答复消息类型备注通信后端
pb:/aimdk.protocol.PncService/PlanningNaviToGoal下发给定目标点ID的规划导航任务aimdk::protocol::PncPlanningNaviToGoalRequestaimdk::protocol::CommonTaskResponse到点精度范围约0.4米http
pb:/aimdk.protocol.PncService/PlanningNaviToPose2D下发给定目标点位姿的规划导航任务aimdk::protocol::PncPlanningNaviToPose2DRequestaimdk::protocol::CommonTaskResponse到点精度范围约0.4米http
pb:/aimdk.protocol.PncService/LinearNaviToRelative下发给定相对目标点位姿的直线导航任务aimdk::protocol::PncLinearNaviToRelativeRequestaimdk::protocol::CommonTaskResponse先执行原地旋转,再执行直线移动http
pb:/aimdk.protocol.PncService/LinearNaviToGoal下发给定目标点ID的直线导航任务aimdk::protocol::PncLinearNaviToGoalRequestaimdk::protocol::CommonTaskResponse先执行原地旋转,再执行直线移动http
pb:/aimdk.protocol.PncService/LinearNaviToPose2D下发给定目标点位姿的直线导航任务aimdk::protocol::PncLinearNaviToPose2DRequestaimdk::protocol::CommonTaskResponse先执行原地旋转,再执行直线移动http
pb:/aimdk.protocol.PncService/DirectNaviToRelativeGoal下发给定目标点ID的直接移动任务aimdk::protocol::PncDirectNaviToRelativeGoalRequestaimdk::protocol::CommonTaskResponse一边平移一边旋转,仅适用于目标点与机器人朝向偏差较小的任务,否则可能导致到点偏差较大http
pb:/aimdk.protocol.PncService/DirectNaviToRelative下发给定相对目标点位姿的直接移动任务aimdk::protocol::PncDirectNaviToRelativeRequestaimdk::protocol::CommonTaskResponse一边平移一边旋转,仅适用于目标点与机器人朝向偏差较小的任务,否则可能导致到点偏差较大http
pb:/aimdk.protocol.PncService/SpinTurnAndMoveForward下发给原地旋转+直线前进任务,会先执行原地旋转,再执行直线前进aimdk::protocol::PncSpinTurnAndMoveForwardRequestaimdk::protocol::CommonTaskResponsehttp
pb:/aimdk.protocol.PncService/SpinTurn下发原地旋转任务aimdk::protocol::PncSpinTurnRequestaimdk::protocol::CommonTaskResponsehttp
pb:/aimdk.protocol.PncService/MoveForward下发直线平移任务aimdk::protocol::PncMoveForwardRequestaimdk::protocol::CommonTaskResponse任务执行后机器朝向不会发生变化http
pb:/aimdk.protocol.PncService/PreciseNaviToGoal下发给定目标点ID的高精度导航任务aimdk::protocol::PncPreciseNaviToGoalRequestaimdk::protocol::CommonTaskResponse仅适用于特殊场景下的高精到点任务,机器人会先以普通规划导航模式走到目标点后方约0.5米的位置,再直接移动到目标点,直接移动过程中不避障,并可能多次调整。到点精度约0.1米左右。需要保证目标点后方有足够空间。非特殊需求不建议使用此模式http
pb:/aimdk.protocol.PncService/ActionCancel下发取消任务指令aimdk::protocol::CommonTaskRequestaimdk::protocol::CommonTaskResponse仅当task_id匹配时才响应指令,否则返回CommonState_FAILUREhttp
pb:/aimdk.protocol.PncService/ActionPause下发暂停任务指令aimdk::protocol::CommonTaskRequestaimdk::protocol::CommonTaskResponse仅当task_id匹配时才响应指令,否则返回CommonState_FAILUREhttp
pb:/aimdk.protocol.PncService/ActionResume下发恢复暂停中的任务指令aimdk::protocol::CommonTaskRequestaimdk::protocol::CommonTaskResponse仅当task_id匹配时才响应指令,否则返回CommonState_FAILUREhttp
pb:/aimdk.protocol.PncService/ActionGetState获取导航任务状态aimdk::protocol::CommonTaskRequestaimdk::protocol::PncServiceStateResponse仅当task_id匹配时才返回正确的任务状态,若请求的task_id为0则返回最近一次任务的task_id及对应的状态,其它task_id不匹配的请求则返回PncServiceState_FAILEDhttp
FieldTypeDescription
headeraimdk::protocol::Header自定义消息头,指定路线所在的坐标系
poseaimdk::protocol::SE3Pose[]路径点位姿

aimdk::protocol::PncPlanningNaviToGoalRequest

Section titled “aimdk::protocol::PncPlanningNaviToGoalRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
target_idint64目标点id
guide_line_idint64引导路线id,保留字段,未使用
ackerman_modebool阿克曼模式,保留字段,未使用

aimdk::protocol::PncPlanningNaviToPose2DRequest

Section titled “aimdk::protocol::PncPlanningNaviToPose2DRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
poseaimdk::protocol::SE2Pose[]目标点位姿
ackerman_modebool阿克曼模式,保留字段,未使用

aimdk::protocol::PncLinearNaviToRelativeRequest

Section titled “aimdk::protocol::PncLinearNaviToRelativeRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
poseaimdk::protocol::SE2Pose[]相对机器本体的目标点位姿

aimdk::protocol::PncLinearNaviToGoalRequest

Section titled “aimdk::protocol::PncLinearNaviToGoalRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
target_idint64目标点id

aimdk::protocol::PncLinearNaviToPose2DRequest

Section titled “aimdk::protocol::PncLinearNaviToPose2DRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
poseaimdk::protocol::SE2Pose[]目标点位姿

aimdk::protocol::PncDirectNaviToRelativeGoalRequest

Section titled “aimdk::protocol::PncDirectNaviToRelativeGoalRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
target_idint64目标点id

aimdk::protocol::PncDirectNaviToRelativeRequest

Section titled “aimdk::protocol::PncDirectNaviToRelativeRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
poseaimdk::protocol::SE2Pose[]相对机器本体的目标点位姿

aimdk::protocol::PncSpinTurnAndMoveForwardRequest

Section titled “aimdk::protocol::PncSpinTurnAndMoveForwardRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
angledouble相对机器当前朝向的旋转角度,单位:弧度
distancedouble相对机器当前位置的前进距离,单位:米
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
angledouble相对机器当前朝向的旋转角度,单位:弧度
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
angledouble相对机器当前朝向的平移方向,单位:弧度
distancedouble相对机器当前位置的平移距离,单位:米

aimdk::protocol::PncPreciseNaviToGoalRequest

Section titled “aimdk::protocol::PncPreciseNaviToGoalRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
target_idint64目标点id
pose_offsetaimdk::protocol::SE2Pose[]目标点相对偏移
FieldTypeDescription
headeraimdk::protocol::ResponseHeaderRPC 响应的 header
task_iduint64当前任务id
stateaimdk::protocol::PncServiceState[]PNC运行状态
NameNumberDescription
PncServiceState_UNDEFINED0未知状态
PncServiceState_IDLE1任务空闲中
PncServiceState_RUNNING2任务运行中
PncServiceState_PAUSED3任务暂停中
PncServiceState_SUCCESS4任务完成
PncServiceState_FAILED5任务失败
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/PlanningNaviToGoal' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"target_id": 0,
"guide_line_id": 0,
"ackerman_mode": false
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/PlanningNaviToPose2D' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"pose": {
"position": {
"x": 10.0,
"y": 5.0
},
"angle": 3.14159
},
"ackerman_mode": false
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/LinearNaviToRelative' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"pose": {
"position": {
"x": 1.0,
"y": 1.0
},
"angle": 1.57
}
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/LinearNaviToGoal' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"target_id": 0
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/LinearNaviToPose2D' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"pose": {
"position": {
"x": 1.0,
"y": 1.0
},
"angle": 1.57
}
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/DirectNaviToRelativeGoal' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"target_id": 0
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/DirectNaviToRelative' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"pose": {
"position": {
"x": 1.0,
"y": 1.0
},
"angle": 0.0
}
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/SpinTurnAndMoveForward' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"angle": 3.14159,
"distance": 1.0
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/SpinTurn' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"angle": 3.14159
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/MoveForward' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"angle": 0.0,
"distance": 1.0
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/PreciseNaviToGoal' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 0,
"map_id": 1,
"target_id": 0,
"pose_offset": {
"position": {
"x": 1.0,
"y": 1.0
},
"angle": 0.0
}
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/ActionCancel' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 6874745825616545102
}'
#!/bin/bash
#curl使用示例(以 ORIN ip: 192.168.100.110 为例):
curl -i -H 'content-type:application/json' \
-H 'timeout: 60000' \
-X POST 'http://192.168.100.110:53176/rpc/aimdk.protocol.PncService/ActionGetState' \
-d '{
"header": {
"timestamp": {
"seconds": 0,
"nanos": 0,
"ms_since_epoch": 0
},
"control_source": 0
},
"task_id": 6874745825616545102
}'