曹以龙, 帅禄玮, 涂少博
(上海电力学院 电子与信息工程学院, 上海 200090)
低碳出行逐渐成为社会的主流趋势,电动汽车也越来越被大多数人所接受.随之而来的就是电动汽车的充电问题,目前短期内高性能的蓄电池技术难以取得突破,因此如何根据客户的习惯和要求快速找到充电桩是目前面临的主要问题.传统的做法是基于电动汽车充电站预约网站给定的路线,客户直接按照网站提供的路线方案行驶,最后需对客户进行满意度调查,再进行实地路况查询,两相结合进行改进.这种做法耗费大量的人力和物力,而且由于网页端无法进行实时导航,使得顾客只能按照固定路线行驶,无法满足客户的习惯和要求,没有灵活的应变能力.
考虑到充电桩的固定性,更多的客户会有自己更加方便和熟悉的行驶路线,可以绕过拥堵路段、避免突发情况、处理固定事物等.本设计在采集到的网站提供的原始方案与车辆实际行动轨迹的基础上,进行大数据的存储、比较、分析和挖掘;通过大量的方案对比与拟合,给出针对客户本身的最优化路径方案,同时面向更多的客户同步推荐,为更多的客户提供最优化路径服务.
网站整体采用LAMP环境配置.因为原始提供方案是由百度地图智能提供,所以无法通过服务器后台得到,但可以使用AJAX技术将百度地图提交给服务器后台,利用PHP语言存入数据库中.AJAX是一种常见的连接Web前端与后端的技术,当用户预约充电桩后,Web前端会自动生成导航路线,同时启用AJAX提交数据.
首先根据百度地图开发JS实例[1-2],得到百度地图智能提供的行车路线,将路线上的主要经纬度以字符串的形式连接并保存.部分代码如下:
……
var str_route_point="";
var options = {
renderOptions:{map:map,autoViewport:true},
onSearchComplete:function(results){
if (driving.getStatus() == BMAP_STATUS_SUCCESS){
//获取第一条方案
var plan = results.getPlan(0);
//获取方案的驾车线路
var route = plan.getRoute(0);
//获取每个关键步骤,并输出到页面
var s =[];
for(var j = 0;j < plan.getNumRoutes();j++){
var route = plan.getRoute(j);
for (var i = 0;i < route.getNumSteps();i++){
var step = route.getStep(i);
var p=step.getPosition();//得到关键点经纬度:
str_route_point=str_route_point+p.lng+"-"+p.lat+"|";//经纬度字符串拼接
}
}
}
}
};
……
服务器后台提供AJAX和GET方式得到包含着经纬度信息的字符串,再将其拆分,还原数据,存入MYSQL数据库即可.
采用ELEMENT生产的BEAGLEBONE BLACK(以下简称“BBB”)作为嵌入式开发平台.BBB是ELEMENT生产的一款开源硬件,使用了TI生产的AM3358微处理器(ARM Cortex-A8内核),512 MB的DDR3 SDRAM,4 GB的EMMC,数量众多的GPIO接口,与信用卡同等尺寸的面积,十分适合作为车载平台的开发.
在安装了DEBIAN系统后,利用PYTHON编程语言[3]与开源库ADAFRUIT_BBIO进行开发.在读回接收到的北斗定位信息后,对数据进行处理,获取真实经纬度[4-7],并插入SQLITE3本地数据库[8],在相同的时间间隔执行类似操作,便可以获取用户驾驶轨迹.部分代码如下:
……
#function 用于经纬度的转换
def numtrans(str_num):
num=float(str_num)#将字符串转换为浮点型
num_deg=int(num/100)#提出度
num_min=float(num-num_deg*100)#提出分
num_after_point=num_min/60#将分转换为度
num_final=num_deg+num_after_point#
returnnum_final#返回结果
#function 用于处理接收到的字符串,提取出经纬度信息
def datapram(re_list):
re_lng_status=re_list[lng_status]
re_lng_num = re_list[lng_num]#提取出经度
re_lat_status = re_list[lat_status]
re_lat_num = re_list[lat_num]#提取出纬度
#将经纬度拼接成列表
data_list=[re_lng_status,numtrans(re_lng_num),re_lat_status,numtrans(re_lat_num)]
returndata_list#返回列表
#function 用于从接收到的字符串中提取有用信息
def datatrans(re_str):
try:
re_first=re_str.index(‘$BDGGA’)#查询“$BDGGA”的字符串,返回首位
except:
return -1#没有则返回-1
re_buf=re_str[re_first:]#字符串截取
try:
re_end= re_buf.index(‘ ’)# 查询换行符位置,返回首位
except:
return -1#没有则返回-1
re_real=re_buf[:re_end];#字符串截取
re_list = re_real.split(‘,’)#利用”,”分割字符串
data_list = datapram(re_list)#信息进一步提取
returndata_list#返回列表
……
REQUESTS是PYTHON语言中一个极具特色的库,相比较URLLIB,REQUESTS功能更加强大,支持GET,POST,PUT等方式,这里使用POST方式提交,将数据上传至服务器.
……
import requests
r=requests.post(“http://xxxx.com/xxxx.php?get=”+str(routelist))
……
优化算法的核心,是提取出两条路径的差异.对于任意一次预约而言,是提取出智能推荐路径与用户实际行驶路径的差异;对于多条路径而言,是提取出多条路径之间的相同点,作为推荐给新用户的推荐点.因此,对比两条路径的差异,得出路径中相同与不同的点是算法的关键.
传统的对比算法,一般可以采用直接对比的方式,但由于路况与路线的差异,此方法往往不可行,因为不同的路线与路况,采集的用户位置点的疏密度也会呈现较大差异.本文使用了一种较为简单的分区域线性拟合法,首先根据百度地图API的说明,使用GETSTEP().GETPOSITION()方法分别得到智能推荐路径的关键点(一般是路线拐角处的经纬度),再以两两关键点进行区域划分,常见的两种情况如图1所示.
图1 常见的两种用户行车路线
图1a表示的是情况1,在这一情况下,用户完全没有按照推荐路径进行行驶,矩形区域2,3,4中没有找到用户相应的坐标点,判断从区域1右上角的关键点到区域5左上角的关键点为用户偏离推荐路径的行驶路线,以此找寻到两条路径的差异.
图1b表示的是情况2,在这种情况往往更加普遍,用户行驶路线没有完全偏离推荐路线,而是在推荐路线附近(相邻的道路)行驶,所以矩形区域2,3,4中可以找到用户相应的坐标点.在这一情况下应对每一个区域中的两条线段进行线性拟合,对比拟合结果,可以计算出矩形区域2,3,4的拟合结果相差较大,与原始推荐路径重合度较低,判断从区域1右上角的关键点到区域5左上角的关键点为用户偏离推荐路径的行驶路线,以此找寻到两条路径的差异.
同理,使用相同的方法也可以得到多条路径之间的相同点.指定任意一条路径作为原始路径,从原始路径中随机提取一定数量的点作为关键点,重复上述算法即可.
图2为预约网站提供的导航路线和客户的实际行驶路线示意.图2中的实线部分为电动汽车充电站预约网站提供的导航路线,虚线部分为客户实际行驶的路线.通过北斗卫星定位系统采集数据[9]并存入我们的数据库,方便以后的优化使用.
图2 预约网站提供的导航路线和客户实际行驶路线
将网站提供的导航路线和北斗提供的重要的经纬度信息提取出来.
图3为经过算法优化的路线.比较图2和图3可以发现,图2中的虚线部分是大多数客户行驶的路线,而经过算法处理过后,将客户导航的路线很好地优化成了大多数客户选择的虚线部分行驶,而重合率较低的部分,则按照网站提供的路线行驶.
图3 优化路线显示
根据测试实验结果,本文所设计的电动汽车智能充电路线优化系统,具有以下功能和特点:一是能够实现原始路线与实际路线的大数据采集;二是经过大量的数据分析和拟合,能够智能地为客户提供更好、更优质、更人性化的充电路线服
务;三是解决了传统网页端原始路线的弊端,实现了充电导航路线的灵活可变,大大提高了客户的生活质量;四是该系统采集的路线大数据信息能够为充电网站提供更优质的路线导航,同时为汽车导航提供了一种新的参考.
[1] 曾探.JavaScript设计模式与开发实践[M].北京:人民邮电出版社,2015:125-232.
[2] 廖雪峰.JavaScript教程[EB/OL].[2015-07-01].http://www.liaoxuefeng.com/.
[3] 张良均.Python数据分析与挖掘实战[M].北京:机械工业出版社,2016:101-153.
[4] 武汉大学卫星导航定位技术研究中心.北斗卫星导航系统的精密定轨与定位研究[J].科学与技术前沿论坛,2012,42(6):851-861.
[5] 葛君伟,李恭伟,邓思兵.位置预测在定位服务中的应用研究[J].计算机应用研究,2008(12):3 572-3 574.
[6] 钱成越,薛原.基于北斗导航系统的移动导航定位终端设计[J].现代计算机(专业版),2010(6):165-167.
[7] 易炯,张雷,王建宇,等.基于卫星定位的位置服务分析及其应用研究[J].世界科技研究与发展,2008,30(3):328-330.
[8] 王飞飞.MySQL数据库应用从入门到精通[M].北京:中国铁道出版社,2014:256-340.
[9] 王茂励,郝凤琦,郝慧娟,等.基于北斗导航的电动汽车自动驾驶系统及其控制方法[P].中国,2015102457069.2015-05-15.