大型地下停车场反向寻车系统设计及路径规划算法研究

目 录
摘 要 I
Abstract II
(空一行)
第1章 绪 论 1
1.1 课题背景及研究的目的和意义 1
1.2 国内外研究现状 1
1.3 本文研究的主要内容 3
第2章 反向寻车系统总体设计及关键技术 4
2.1 系统功能需求阐述 4
2.2 系统总体设计方案 5
2.3 关键技术与实现方案 5
2.3.1 车辆停车入位检测方案 6
2.3.2 无线通信方案 6
2.3.3 车牌识别方案 7
2.3.4 室内定位方案 7
2.3.5 路径规划算法 9
2.3.6 软件开发技术方案 9
2.4 本章小结 12
第3章 系统单元模块设计 4
2.1 停车场地图生成模块设计 4
2.2 图像采集设备车位识别模块设计 5
2.3 停车入位检测模块设计 5
2.4 车牌图像识别模块设计 4
2.6 移动端室内定位模块设计 4
2.7 路径规划算法模块设计 4
2.8 寻车PC客户端设计 4
2.9 寻车App客户端设计 4
2.10 本章小结 12
第4章 路径规划算法研究 4
3.1 路径规划方案选择 4
3.2 常用的最短路径算法 5
3.2.1 Dijkstra算法 5
3.2.2 Floyd算法 4
3.2.3 A算法 4
3.2.4算法比较 4
3.3 改进A
算法的研究 4
3.3.1 启发函数 4
3.3.2 方向约束方法 4
3.3.3 路径分割方法 4
3.4 仿真分析 12
3.5 本章小结 12
第5章 车辆图像处理算法研究 4
3.1 车牌图像数据集预处理 4
3.2 视频流车牌图像定位 5
3.3 车牌图像预处理 4
3.3 车牌图像识别 4
3.4 仿真分析 12
3.5 本章小结 12
第6章 反向寻车系统的平台实现 4
3.1 数据库的设计 4
3.2 寻车Web管理端界面设计 5
3.2 寻车PC客户端界面设计 5
3.2 寻车移动客户端界面设计 5
3.3 寻车功能平台调试及实现 4
3.4 仿真分析 12
3.5 本章小结 12
结 论 14
参考文献 16
致 谢 19
附 录 20
附录1 20
附录2 21
第2章 基于BP神经网络的WIFI指纹库定位技术
2.1 WIFI指纹库定位技术
2.1.1 WIFI指纹定位原理
在许多大型的室内综合体内,存在大量的人员走动和复杂的空间结构,同时也会收到室内设施摆放等环境影响,在RSSI信号传播过程中对RSSI值产生影响。所以这就使得在同一个空间中,每个位置的每个RSSI值是有差别的,而位置指纹定位方法就是利用的这一特性,将每个位置的每个不同RSSI值用来表示不同位置的RSSI数据库。其工作原理可以划分为两个阶段:离线阶段和在线阶段。
(1)离线阶段
将室内环境分成规格大小一样的小区域,收集各个小区域内样本接收的AP节点发射的RSSI数据信息和样本位于小区域中的位置坐标,然后收集室内所有的位置样本点来组建样本数据的位置指纹数据库。
(2)在线阶段
在现阶段则是通过获取未知样本的实时收集到室内所有AP节点发射的RSSI数据信息和位于小区域中位置坐标来与离线阶段产生的位置指纹数据可来进行指纹匹配定位,通过数据比较即可得出定位区域和坐标。
KNN算法对于室内定位具有较好的定位效果,但该算法的准确度强依赖于采样点的密度,为减少大规模车库中RSSI指纹的采样难度,引入BP神经网络以减少在离线环节的RSSI指纹采样过程中的成本,提升了模型对于停车场环境的适应性。
模块运行流程逻辑如图X所示
在这里插入图片描述

图7 室内定位算法流程图

2.1.2 构建仿真模拟地图生成WIFI指纹数据集

2.2 BP神经网络
2.2.1 模型原理及网络结构
BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。神经网络使用由计算结构组成的层,每层都有众多单元,这些单元都是模拟的生物神经元,每个神经元都连接在一起,如图8所示。
在这里插入图片描述

图8 神经网络结构

import time

import openpyxl
from openpyxl.styles import PatternFill

from algorithm.Astart3 import astar_search as astar_search3
from algorithm.Astart2 import astar_search as astar_search2

file_path = "./map/map.xlsx"

sheet = "Sheet1"
wb = openpyxl.load_workbook(file_path)
ws = wb[sheet]

rows, cols = ws.max_row, ws.max_column
map = []
cross = []
for row in range(1, rows + 1):
    rowList = []
    rowCross = []
    for col in range(1, cols + 1):
        if row <= 1 or col <= 1:
            point = (row, col)
            rowList.append(point)
            rowCross.append(False)
        else:
            cell = ws.cell(row, col)
            # cell.fill = PatternFill("solid", fgColor="3CB371")
            # 获取单元格的填充样式
            color = cell.fill.start_color.index
            Tigs = True
            if color == 1:
                Tigs = False
            point = (row, col)
            rowList.append(point)
            rowCross.append(Tigs)
    map.append(rowList)
    cross.append(rowCross)
start_node = [16, 17]
end_node = [6, 27]
start_time = time.time()

algorithm = (
    astar_search2(start=[start_node[0], start_node[1]],
                  goal=[end_node[0], end_node[1]],
                  map=map, cross=cross),
    astar_search3(start=[start_node[0], start_node[1]],
                  goal=[end_node[0], end_node[1]],
                  map=map, cross=cross)
)
save_path_list = ["./map/map2.xlsx", "./map/map3.xlsx"]
index = 0
for item in algorithm:
    save_path = save_path_list[index]
    index += 1
    path, closed_list, search_list = item.find()
    print("最优路径:", path)
    print("最优路径长度:", len(path))

    closeSet = []
    for point in closed_list:
        cell = ws.cell(point['pos'][0], point['pos'][1])
        closeSet.append([point['pos'][0], point['pos'][1]])
        cell.fill = PatternFill("solid", fgColor="0000ff")  # 蓝色
    print("未去重范围:", len(closed_list))
    # 遍历范围去重复
    closeSet = list(set(tuple(i) for i in closeSet))
    print("搜索范围:", len(closeSet))
    for point in path:
        cell = ws.cell(point[0], point[1])
        cell.fill = PatternFill("solid", fgColor="ffff00")  # 黄色

    originList = [start_node, end_node]
    for point in originList:
        cell = ws.cell(point[0], point[1])
        cell.fill = PatternFill("solid", fgColor="ff0000")  # 红色
    wb.save(save_path)

    end_time = time.time()
    print("运行时间:", end_time - start_time)
    print("search:", len(search_list))
    print("------")

部署:https://blog.csdn.net/qq_42263280/article/details/128257200

vim /etc/profile

wget http://nginx.org/download/nginx-1.14.0.tar.gz

tar -zxvf nginx-1.14.0.tar.gz

cd nginx-1.14.0
./configure --prefix=/home/nginx/nginx
make && make install

1.2.5,查看nginx
ps -ef | grep nginxroot

00:00:00 nginx: master process ./nginx
nobody1385113850 0 17:01 ?
oe :00:80 nginx: worker process
root138791128 0 17:11 pts/000:00:00 grep --color=auto nginx
#重启
./nginx -s reload
#关闭
./ nginx -s stop

本地运行java包

java -jar *.jar运行jar包 这就是测一测

3.3,设置后台启动
通过命令设置即可

nohup java -jar quest-service-1.0-SNAPSHOT.jar &
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/newlw/article/details/134729865