###车辆云系统: 只负责车自动驾驶控制的核心部分。主要包括数据接收与存储模块,车辆运动控制模块,车辆监控模块。 ####数据接收与存储模块:
为实现车辆足够简化,筛选后车辆主要提供以下数据:
- 基本信息:车辆ID,出厂日期
初始化时扫码注册,数据格式:
{"type":"carBasic","carId": 1, "release_date": 2016-07-20 }
- 运动状态:精确定位,速度,加速度,方向;
车辆启动后开始实时发送数据格式:
{“type”:“runInfo”,"carId": 0, "location_x": 0," location_y":0," Acceleration": 0.0, "speed_current": 0, "angel": 45, "currentTime": yyyy-MM-dd HH:mm:ss SSS }
- 运营状态:故障码。(服务器接收后存储为历史故障留作记录)
由车端定义,并事先录入数据库各故障码的含义,车辆只传输故障码,如{“code”:10001}
接发:需考虑高并发与延时。保证1W辆车同时以10HZ的频率发送运动状态信息,延时不得超过(雷达监测障碍物距离-紧急制动距离)/当前速度。
TCPServerHandler:新建session,存入单例的sessionMap。根据信息类型调用carhandler的不同函数。发送carBasic的时候一般为第一次注册入库的时候。
发送数据:给出目的车id和指令。然后根据车id获取相应的session,利用该session发送数据。
存储:
考虑存储的并发性能,接收后立即推送给监控模块计算。NOSQL+MySQL
接收的数据存入redis(专门的线程定期将数据批量写入持久化数据库)
封装发送命令接口
####车辆自动驾驶控制模块:
1.该模块负责获取需求A?B,根据全局地图规划路径,将生成的路径解析为具体的控制命令。
2.向车端发送命令,尽量减少发送次数:
一次行程确定后即向车辆发送一系列命令,理想情况下车辆执行完这些命令后即可到达目的地。比如:1.以v速度前进x千米 2.以r角度向左转向,行驶x1千米……
[24 25 04 11 00 0A 64 00 00 00 00 00 00 7A 0D 0A]
[24 25 04 13 00 50 FF 00 00 00 00 00 00 B9 0D 0A]
发送:需考虑命令发送的可靠性与延迟,利用算法抵消延迟。
####监控模块: 1.保证全局有序,定期计算车流量,车与车之间距离。 2.保证局域范围内车辆不偏离车道。 3.车当前状态与服务器按命令预测出的状态之间的偏差,添加偏差到redis中运动状态。
雷达监测或者视觉监测。
1. 雷达法:根据车辆精确定位计算车辆与车道的相对距离,根据速度与姿态预测接下来可能出现的偏差。
2. 视觉法:
####云诊断 car-Maintenance
1.获取故障码(轮询redis或者消息队列)
2.查找故障码对应故障信息
3.查找故障解决办法(线下维护后,录入故障码以及解决办法,以供后面使用)
####云管理car-Manage 注册车辆 注销车辆