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

一、地图获取路径数据:

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格式。

最后放一张上位机界面效果图:

标签:经纬度,Python,小车,py,地图,上位,线程,数据

来源: https://blog.csdn.net/skye_fly/article/details/110123613

基于python的智能小车_Python开发智能移动小车平台上位机相关推荐

  1. python在材料模拟中的应用_基于Python的ABAQUS二次开发及在板料快速冲压成形模拟中的应用...

    2009 doi :10 1 3969/ j 1 issn 1 1007 2 2012 1 2009 1 04 1 013 基于 Python 的 ABAQUS 二次开发及在板料快速 冲压成形模拟中的 ...

  2. python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  3. autocad python二次开发_基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

    AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...

  4. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

    应广大python学员的期盼,九宝老师精心制作的"基于python的微信公众号开发"视频教程即将上线. 该课程秉承九宝培训一贯的"简单.高效.快速"的讲课原则, ...

  5. 基于python的植物大战僵尸游戏开发

    1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目,基于python的植物大战僵尸游戏开发. 计算机毕业生设计,课程设计需要帮助的可以找我 2 设计概要 21世纪是信息化时代,随着信息技术和网 ...

  6. 基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

    AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...

  7. abaqus生成odb文件_【前沿技术】基于Python的ABAQUS二次开发在飞机蒙皮锤铆中的应用...

    基于Python的ABAQUS 二次开发在飞机 蒙皮锤铆中的应用 在飞机蒙皮铆接技术中,锤铆是用一个小冲击力循环累计施加到铆钉使之变形的过程.根据锤铆铆接工艺和铆枪结构原理,铆钉的塑性变形是由铆枪的活 ...

  8. 基于Python的DELMIA二次开发(一):创建零件

    基于Python的delmia二次开发系列 文章目录 前言 一.基础概念 1.对象.集合.属性.方法 2.继承.聚合 二.Python连接Delmia 三.简单示例 前言 delmia和catia属同 ...

  9. 基于 Python 的信用评分模型开发-附数据和代码

    来源 | 知乎  作者 | Carl 文章链接 | https://zhuanlan.zhihu.com/p/35284849 信用评分模型可用"四张卡"来表示,分别是 A卡(Ap ...

最新文章

  1. Session丢值的问题
  2. 软件架构师证书有用吗_健康管理师证书在求职时有用吗?
  3. 【Python】推荐6个好用到爆的Pycharm插件
  4. 互联网1分钟 |1226
  5. linux常用命令:top 命令
  6. 邮箱用户名登录php,让WordPress支持用户名或邮箱登录
  7. Silverlight-Cailburn应用框架
  8. linux 安装pinphp遇到的“系统不支持curl!”问题
  9. 计算机是怎么分类,计算机一般按什么分类
  10. Fake Location(安卓)
  11. IDEA单机,双人五子棋
  12. 湖南省首届逻辑推理大赛(中南大学)
  13. SpringBoot整合Flyway
  14. php aes解密中文,PHP AES加密解密算法
  15. 天猫双11背后的阿里技术
  16. Visual Studio 2019 卸载干净+下载安装方法 2021-5-7
  17. Java开源技术分享交流群
  18. 【AI易操作-深度学习算法代码解读】基于keras实现图像识别CNN模型-含CNN卷积神经网络模型原理
  19. 教程:AT32F435 QSPI 读写W25Q256
  20. 怎么跳槽?这七步走完,你完全可以面试大厂了

热门文章

  1. 安信可A9G-Pudding开发板 GPIO功能使用及固件开发
  2. 【快速.png转.jpg】批量转换png格式图片为jpg图片
  3. 中国激光雷达行业竞争状况及应用前景预测报告(2022-2027年)
  4. 小伙子利用C++模拟斗地主洗牌和发牌,欢乐斗地主游戏源码展现!
  5. 漫画阅读器ComicReader应用源码
  6. 江苏师范大学计算机全国排名,2015年计算机考研学校排名
  7. Hamlib说明翻译
  8. sentry收集错误[Failed to fetch dynamically imported module]解决
  9. 我形我速 服务器正在运行中,我形我速使用教程
  10. ckplayer循环播放不能设置的问题