导航模块架构
TraceNavigate发还给业务模块GTraceList数据结构中,GTraceList/GTraceSeg/finished 标志当前完成的情况; GTraceList/status 标志当前任务完成或者出发停障
ObstacleNavigate 发还给业务模块GTraceList数据结构中,应当更新GTraceList/GTraceSeg/finished 标示该继续从哪个GTraceSeg走;GTraceList/status标志绕障成功或失败
& 6. 中,每5s间隔更新GTraceList并发还给业务模块用于任务状态监控,GTraceList/status 等于EXECUTE_STATUS_RUNNING
业务模块发送的GTraceList中如果GTraceSeg为空列表,导航模块视为取消所有当前正在执行任务,发布0速度后进入idle状态
数据结构定义
# 路径点、速度
message GTracePoint{
required double x = 1;
required double y = 2;
required double angle =3;
optional int32 speed = 4;
optional int32 starter = 5; # 可选 改点是否可作为起始点
}
# 前后相邻两个点组成的有向段、完成比例
message GTraceSeg {
required GTracePoint first = 1;
required GTracePoint second = 2;
required double finished = 3;
}
# 有向段的列表
message GTraceList {
enum ExecuteStatus{
# 1/2/3都是持续性状态 4是瞬时状态
EXECUTE_STATUS_IDLE = 1;
EXECUTE_STATUS_RUNNING = 2;
EXECUTE_STATUS_BLOCKED = 3;
EXECUTE_STATUS_FINISHED = 4;
}
repeated GTraceSeg lists = 1;
required bytes map = 2;
# 下发给导航模块可以不带status,导航模块上报必须带status
optional ExecuteStatus status = 3;
}
消息名
消息方向
消息定义
msg_robot_laser_data
激光采集-->TraceNavigate
NODE.subscribe<GLaserScan>("msg_robot_laser_data",CallBackNewScan);
msg_robot_global_pos
定位-->TraceNavigate
NODE.subscribe<RobotPose2D>("msg_robot_global_pos",CallBackNewRobotPos);
msg_trace_navigate_route
业务-->TraceNavigate
NODE.subscribe<GTraceList>("msg_trace_navigate_route",CallBackNavigateRoute);
msg_trace_navigate_status
TraceNavigate-->业务
NODE.advertise<GTraceList>("msg_trace_navigate_status");
msg_robot_speed_control
TraceNavigate-->底盘
NODE.advertise<GRobotSpeedControl>("msg_robot_speed_control");
消息名
消息方向
消息定义
msg_robot_laser_data
激光采集-->ObstacleNavigate
NODE.subscribe<GLaserScan>("msg_robot_laser_data",CallBackNewScan);
msg_robot_global_pos
定位-->ObstacleNavigate
NODE.subscribe<RobotPose2D>("msg_robot_global_pos",CallBackNewRobotPos);
msg_obstacle_navigate_route
业务-->ObstacleNavigate
NODE.subscribe<GTraceList>("msg_obstacle_navigate_route",CallBackNavigateRoute);
msg_obstacle_navigate_status
ObstacleNavigate-->业务
NODE.advertise<GTraceList>("msg_obstacle_navigate_status");
msg_robot_speed_control
ObstacleNavigate-->底盘
NODE.advertise<GRobotSpeedControl>("msg_robot_speed_control");
附
title 导航功能模块间调用
业务节点->TraceNavigate:1.publish message<GTraceList>
note left of 业务节点:调用轨迹跟踪
TraceNavigate->TraceNavigate:2.trace loop
TraceNavigate->TraceNavigate:3.waiting 60\n seconds
note left of 业务节点:停障超时
业务节点<--TraceNavigate:4.publish message<GTraceList>::\nEXECUTE_STATUS_BLOCKED
业务节点->ObstacleNavigate:5.publish message<GTraceList>
note left of 业务节点:调用绕障导航
ObstacleNavigate->ObstacleNavigate:6.navigate Loop
业务节点<--ObstacleNavigate:7.publish message<GTraceList>::\nEXECUTE_STATUS_FINISHED
业务节点->TraceNavigate:8.publish message<GTraceList>
note left of 业务节点:恢复轨迹跟踪
TraceNavigate->TraceNavigate:9.trace loop
业务节点<--TraceNavigate:10.publish message<GTraceList>::\nEXECUTE_STATUS_FINISHED
最后编辑于 :2019.04.20 20:24:38
©著作权归作者所有,转载或内容合作请联系作者 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。