2019-04-02

导航模块架构

航功能模块间调用.png
    1. TraceNavigate发还给业务模块GTraceList数据结构中,GTraceList/GTraceSeg/finished 标志当前完成的情况; GTraceList/status 标志当前任务完成或者出发停障
    1. ObstacleNavigate 发还给业务模块GTraceList数据结构中,应当更新GTraceList/GTraceSeg/finished 标示该继续从哪个GTraceSeg走;GTraceList/status标志绕障成功或失败
    1. & 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;
}
  • TraceNavigate模块消息
消息名 消息方向 消息定义
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");
  • ObstacleNavigate模块消息
消息名 消息方向 消息定义
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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 概念 线程:系统调度的最小单位,CPU资源分配的基本单位。进程:一段执行的程序,可以包含多个进程。 在And...
    单向时间轴阅读 559评论 0 1
  • 今天下午挺忙大家都忙着干活一直也都没有闲着最近车辆会慢慢的多最后干活一定要保证每个车辆的安全出厂,都细心检查检查一...
    AAAAA京心达张水尚阅读 87评论 0 0
  • 在一段足够长的关系当中,我们常常面临两个人意见不同的情况。如何解决这个问题变成了这段关系走向的关键。 我们常常采用...
    玩儿_温暖阅读 150评论 0 0
  • 感谢美女领导的分享,发现了这样一款的好用APP。 用这个工具来做一些图文的教程分享应该是不错哦,省去了申请微信公众...
    喜欢尝试新鲜事物的老九阅读 331评论 0 1
  • 第一个安卓程序设计------简易计算器 MainActivity package com.example.a18...
    枭_1429阅读 1,104评论 0 1