Python开发智能移动小车平台上位机

智能移动小车平台上位机界面设计告一段落,特此记录一下整体的框架,以免之后再用的时候回忆不起来。

一、地图获取路径数据:
1、首先通过奥维地图绘制从起点到终点的多条路径,然后根据最优路径选择算法(此处选用分支界限算法,简化实际地图为有向有权图),选取距离最短的路径(两点间的权重为真实两点间的距离),或者用时最短的路径(通过改变两点间的权重模拟路段的拥堵情况)或者途径红绿灯最少的路径(两点间权重都改为1)。
2、得到最优路径后,在奥维地图上导出该路径上的经纬度点(最小间距是每0.5米一个经纬度点),为了提高精度,采用插值法在每两个经纬度之间插入9个等间距点。
3、我们采用的是百度地图的API接口,而奥维地图导出的是WGS84格式的经纬度数据,所以需要将第2步中导出的经纬度数据进行转化,得到BD-09格式的与百度地图适配的经纬度数据。(卫星定位数据有不同的格式,GPS获取的为WGS84格式经纬度,在国内为了安全进行一次加密操作,也就是坐标变换成为GCJ02火星坐标系,各家地图公司又在火星坐标系的基础上进行二次加密得到与自家软件适配的坐标系,百度地图为BD-09坐标系)。
4、得到了第3步中的百度地图格式经纬度数据后,将其导入百度地图API接口的html文件中,在百度地图为背景的情况下显示该路径。

二、上位机界面设计:
1、首先基于Pyqt设计UI界面,布置相应的组件。
2、根据TCP/IP通信协议与下位机之间进行数据传输。
3、具体要实现的功能有:
1)上位机主动下发第一组经纬度数据(经纬度为一中导出的经纬度数据,需不需要进行经纬度格式转化要看下位机需要什么格式的数据);
2)上位机每隔一定时间向下位机请求车辆的状态以及图像数据(第一次需要手动按请求按钮,之后自动每隔一定时间下发请求指令);
3)接收下位机实时上传的小车GPS定位信息;
4)接收下位机应答上传的车辆状态信息与摄像头获取的图像信息。
4、Python程序:
1)主程序:
一个UI主线程;
一个Listen监听子线程;
一个read_thread_method子线程用来读取下位机上传的各类数据;
一个fun_time子线程用来将接收到并转换后的小车的经纬度数据写入weather.json文件(用于百度地图html文件读取);
一个线程用来将接收到的经纬度数据发送给UI界面;
一个线程用来将接收的图像字节流数据写入image_file.jpg文件,同时读取该图像文件并进行图像处理后将其发送到UI界面;
一个askstate_thread子线程用来以一定时间间隔发送状态请求指令;
一个askimage_thread子线程用来以一定时间间隔发送图像请求指令。
2)子程序:
一个BD_map.html子程序用来实时更新UI界面内嵌的百度地图;
一个wgs84_to_bd09_change.py子程序用来改变经纬度数据的类型;

三、阿里云服务器:
1、有两个上位机主程序:
一个是不使用阿里云服务器时,作为服务器与下位机客户端进行数据传输;
一个是使用阿里云云端服务器,将上位机与下位机都设计成客户端的形式,通过阿里云服务器进行两者间的数据收发。
2、阿里云程序(结合数据库MySQL):
两个线程,一个接收上位机数据解包并分析消息类型后按照一定包长读取剩余数据,后再打包发送给下位机;另一个线程接收下位机数据解包辨别消息类型并读取剩余长度字节,再打包发送给上位机;
数据库记录云服务器收发的数据:
首先在Navicat中创建一个数据库Car_Upload;
然后运行MySQL_lng_lat.py和MySQL_State.py在数据库中建立两张表,分别记录上传的经纬度和状态数据;
最后在上位机程序main_client_v6_MySQL.py中的经纬度和状态数据接收程序段插入MySQL_cloud_insert.py程序,将收到的数据写入数据表中;
在Ali_Server_v9_log.py中加入一段程序,记录每个时间点发生的事件。
3、Python程序:
1)主程序:
Ali_Server_v9_log.py结合数据库并加入一个.log记录文件;
2)子程序:
MySQL_lng_lat.py和MySQL_State.py,在数据库中建立记录经纬度和状态数据的数据表。

四、注意事项:
1、接收下位机数据时要以小端格式(unpack解包时不加“!”),与网络调试助手传输数据时以大端格式。
2、socket接收数据时,不能按固定缓冲区大小读取定常的字节数,特别是读取图像数据时。需要先分析接收的是什么数据,然后按照通信协议规定的读取一定长度的字节数。
3、用unpack解包时存在“字节对齐”现象,一般出现在两个不同类型的数据交界处(如int与double数据),需要分多次recv数据然后依次解包。
4、emit发送小车上传的经纬度给UI界面时,采样时间不能太大,不然小车上发经纬度数据的频率变大会导致程序崩溃。
5、接收小车上发的经纬度数据时要调用经纬度数据类型转换函数,将其格式转换成BD_09格式。

最后放一张上位机界面效果图:
在这里插入图片描述

ps:项目已经在github上开源啦(包括以上三个模块在内),欢迎大家来访,另外要多多标星呀哈哈!

https://github.com/zjy812240127/monitor_system_for_autonomous_vehicles

开源让世界更美好!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值