跳转到内容

规划控制模块

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

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

话题名话题描述订阅 or 发布消息类型频率通信后端
/body_drive/wheel_joint_command关节指令发布joint_msg_interface::msg::JointCommand100hzros2
/cmd_vel速度指令发布geometry_msgs/msg/Twist20hzros2
/pnc/human_detectpnc的行人检测结果发布std_msg::msg::Bool20hzros2
/pathpnc的路径规划path发布nav_msgs/msg/Path事件触发ros2

任务下发接口统一说明:
1.执行任务前,需要机器人重定位成功,且下发任务的地图id需要与重定位的地图一致
2.下发任务时,需要设置task_id,若不设置(默认为0),PNC会自动生成一个task_id,并在response中返回,客户端需要保存该task_id以便后续下发控制指令或查询任务状态

接口名接口描述请求消息类型答复消息类型备注通信后端
pb:/aimdk.protocol.PncService/PlanningNaviToGoal下发给定目标点ID的规划导航任务aimdk::protocol::PncPlanningNaviToGoalRequestaimdk::protocol::CommonTaskResponse到点精度范围约0.05米http
pb:/aimdk.protocol.PncService/PlanningNaviToPose2D下发给定目标点位姿的规划导航任务aimdk::protocol::PncPlanningNaviToPose2DRequestaimdk::protocol::CommonTaskResponse到点精度范围约0.05米http
pb:/aimdk.protocol.PncService/MobileNaviToGoal下发给定目标点ID的短距离导航任务, 适用拆垛任务aimdk::protocol::PncPlanningNaviToGoalRequestaimdk::protocol::CommonTaskResponse到点精度范围约0.05米http
pb:/aimdk.protocol.PncService/MobileNaviToPose2D下发给定目标点位姿的短距离导航任务, 适用拆垛任务aimdk::protocol::PncPlanningNaviToPose2DRequestaimdk::protocol::CommonTaskResponse到点精度范围约0.05米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下发直线平移任务, 该Action会根据用户设置的angle的范围决定采用纵向移动模式或是横向移动模式,当angle在[-30, 30]度、[-150, -180]度、[150, 180]度范围内时,机器人会采用纵向移动模式,即机器人会沿着angle方向移动distance距离;当angle在[60, 120]度或[-60, -120]度范围内时,机器人会采用横向移动模式,即机器人会沿着angle方向移动distance距离。其它情况下任务返回失败。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匹配时才返回正确的任务状态,否则返回PncServiceState_FAILEDhttp
FieldTypeDescription
headeraimdk::protocol::Header自定义消息头,指定路线所在的坐标系
poseaimdk::protocol::SE3Pose[]路径点位姿
FieldTypeDescription
headeraimdk::protocol::Header消息头
infoaimdk::protocol::MapMetaData地图元数据信息
dataint32[]占用栅格数据,-1表示未知,0表示空闲,100表示占用
FieldTypeDescription
map_load_timeaimdk::protocol::Timestamp地图加载时间
resolutionfloat地图分辨率,米/像素
widthuint32地图宽度,像素
heightuint32地图高度,像素
originaimdk::protocol::SE3Pose地图原点位姿
FieldTypeDescription
headeraimdk::protocol::Header消息头
avoid_statusaimdk::protocol::AvoidStatus避障状态
NameNumberDescription
AvoidStatus_UNKNOWN0未知状态
AvoidStatus_NORMAL1正常状态
AvoidStatus_AVOIDING2避障中
AvoidStatus_BLOCKED3被阻挡

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阿克曼模式,保留字段,未使用
enable_obstacle_avoidancebool是否开启实时避障

aimdk::protocol::PncPlanningNaviToPose2DRequest

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

aimdk::protocol::PncMobileNaviToGoalRequest

Section titled “aimdk::protocol::PncMobileNaviToGoalRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
target_idint64目标点id
guide_line_idint64引导路线id,保留字段,未使用
ackerman_modebool阿克曼模式,保留字段,未使用
waypointsrepeated [aimdk::protocol::SE2Pose]途经点坐标,保留字段,未使用
enable_obstacle_avoidancebool是否开启实时避障

aimdk::protocol::PncMobileNaviToPose2DRequest

Section titled “aimdk::protocol::PncMobileNaviToPose2DRequest”
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
map_iduint64地图id
poseaimdk::protocol::SE2Pose[]目标点位姿
ackerman_modebool阿克曼模式,保留字段,未使用
waypointsrepeated [aimdk::protocol::SE2Pose]途经点坐标,保留字段,未使用
enable_obstacle_avoidancebool是否开启实时避障

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::RequestHeaderRPC 请求的 header
task_iduint64任务id
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
FieldTypeDescription
headeraimdk::protocol::RequestHeaderRPC 请求的 header
task_iduint64任务id
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任务失败
FieldTypeDescription
headeraimdk::protocol::Header请求头
twistaimdk::protocol::pnc::Twist
#!/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,
"enable_obstacle_avoidance": true
}'
#!/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,
"enable_obstacle_avoidance": true
}'
#!/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/MobileNaviToGoal' \
-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,
"enable_obstacle_avoidance": true
}'
#!/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/MobileNaviToPose2D' \
-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,
"enable_obstacle_avoidance": true
}'
#!/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
}'