From 6362b52c7c6233af81ea773c4910024c60cd864b Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 16 十二月 2024 15:05:08 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/resources/agv.py | 135 +++++++++++++++++---------
zy-acs-manager/src/main/resources/agv1.py | 160 ++++++++++++++++++++++++++++++++
2 files changed, 247 insertions(+), 48 deletions(-)
diff --git a/zy-acs-manager/src/main/resources/agv.py b/zy-acs-manager/src/main/resources/agv.py
index 1b2669a..2425f67 100644
--- a/zy-acs-manager/src/main/resources/agv.py
+++ b/zy-acs-manager/src/main/resources/agv.py
@@ -1,19 +1,14 @@
import ast
import sys
-
import numpy as np
import json
import time
import redis
radiusLen = None
-
-#with open("./codeMatrix.txt", "r") as file:
-# codeMatrix = np.array(json.loads(file.read()))
-
-#with open("./cdaMatrix.txt", "r") as file:
-# data = json.loads(file.read())
-# cdaMatrix = np.array(data)
+codeMatrix = None # 鍏ㄥ眬鍙橀噺
+cdaMatrix = None # 鍏ㄥ眬鍙橀噺
+waveMatrix = None # 鍏ㄥ眬鍙橀噺
# 灏嗗瓧绗︿覆杞崲涓烘诞鐐瑰瀷鏁扮粍
def convert_to_float_array(str_array):
@@ -64,6 +59,7 @@
return list(zip(indices[0], indices[1]))
def initWaveMatrix():
+ global codeMatrix, waveMatrix # 澹版槑浣跨敤鍏ㄥ眬鍙橀噺
lev = 1
waveMatrix = np.empty_like(codeMatrix, dtype=object)
@@ -79,7 +75,10 @@
# 浼樺寲鐗堟湰锛氫娇鐢ㄩ泦鍚堟潵鎻愰珮鎬ц兘
def mergeWave(originWave, vehicle):
# 灏嗗瓧绗︿覆瑙f瀽涓洪泦鍚�
- set_data = set(ast.literal_eval(originWave))
+ try:
+ set_data = set(ast.literal_eval(originWave))
+ except (ValueError, SyntaxError):
+ set_data = set()
# 濡傛灉 vehicle 涓嶅湪闆嗗悎涓紝鍒欐坊鍔�
set_data.add(vehicle)
# 杩斿洖搴忓垪鍖栧悗鐨勫瓧绗︿覆
@@ -96,6 +95,7 @@
# 浣跨敤 numpy 鍔犻�熺殑浠g爜
def process_dynamic_matrix(dynamicMatrix, codeMatrix):
+ global waveMatrix # 澹版槑浣跨敤鍏ㄥ眬鍙橀噺
# 灏� dynamicMatrix 杞崲涓虹粨鏋勫寲鏁扮粍
dynamicMatrix = convert_to_structured_array(dynamicMatrix)
@@ -111,59 +111,98 @@
# 閬嶅巻婊¤冻鏉′欢鐨勫潗鏍�
for x, y in zip(x_indices, y_indices):
# print(code)
- data = dynamicMatrix[x][y]
- vehicle = data['vehicle']
- includeList = getWaveScopeByCode(x,y)
+ vehicle = dynamicMatrix[x][y]['vehicle']
+ includeList = getWaveScopeByCode(x, y)
for include in includeList:
originWave = waveMatrix[include['x']][include['y']]
waveMatrix[include['x']][include['y']] = mergeWave(originWave, vehicle)
-radiusLenStr = sys.argv[1]
-radiusLen = float(radiusLenStr)
+def main():
+ global radiusLen, codeMatrix, cdaMatrix, waveMatrix # 澹版槑浣跨敤鍏ㄥ眬鍙橀噺
-codeMatrixPath = sys.argv[2]
-cdaMatrixPath = sys.argv[3]
+ if len(sys.argv) != 6:
+ print("鐢ㄦ硶: python agv.py <radiusLen> <redisHost> <redisPwd> <redisPort> <redisIdx>")
+ sys.exit(1)
-redisHost = sys.argv[4]
-redisPwd = sys.argv[5]
-redisPort = sys.argv[6]
-redisIdx = sys.argv[7]
+ radiusLenStr = sys.argv[1]
+ try:
+ radiusLen = float(radiusLenStr)
+ except ValueError:
+ print("radiusLen 蹇呴』鏄竴涓诞鐐规暟")
+ sys.exit(1)
-with open(codeMatrixPath, "r") as file:
- codeMatrix = np.array(json.loads(file.read()))
+ redisHost = sys.argv[2]
+ redisPwd = sys.argv[3]
+ redisPort = sys.argv[4]
+ redisIdx = sys.argv[5]
-with open(cdaMatrixPath, "r") as file:
- data = json.loads(file.read())
- cdaMatrix = np.array(data)
+ startTime = time.perf_counter()
-startTime = time.perf_counter()
+ # 鍒涘缓涓�涓繛鎺ユ睜
+ try:
+ pool = redis.ConnectionPool(host=redisHost, port=int(redisPort), password=redisPwd, db=int(redisIdx))
+ r = redis.Redis(connection_pool=pool, decode_responses=True)
+ except Exception as e:
+ print(f"鏃犳硶杩炴帴鍒� Redis: {e}")
+ sys.exit(1)
-waveMatrix = initWaveMatrix()
+ try:
+ codeMatrixStr = r.get('KV.AGV_MAP_ASTAR_CODE_FLAG.1')
+ if codeMatrixStr is None:
+ raise ValueError("Redis 涓湭鎵惧埌閿�: KV.AGV_MAP_ASTAR_CODE_FLAG.1")
+ codeMatrix = np.array(json.loads(codeMatrixStr))
+ except Exception as e:
+ print(f"鑾峰彇 codeMatrix 澶辫触: {e}")
+ sys.exit(1)
-# 鍒涘缓涓�涓繛鎺ユ睜
-pool = redis.ConnectionPool(host=redisHost, port=int(redisPort), password=redisPwd, db=int(redisIdx))
-r = redis.Redis(connection_pool=pool)
-dynamicMatrixStr = r.get('KV.AGV_MAP_ASTAR_DYNAMIC_FLAG.1')
+ try:
+ cdaMatrixStr = r.get('KV.AGV_MAP_ASTAR_CDA_FLAG.1')
+ if cdaMatrixStr is None:
+ raise ValueError("Redis 涓湭鎵惧埌閿�: KV.AGV_MAP_ASTAR_CDA_FLAG.1")
+ cdaMatrix = np.array(json.loads(cdaMatrixStr))
+ except Exception as e:
+ print(f"鑾峰彇 cdaMatrix 澶辫触: {e}")
+ sys.exit(1)
-dynamicMatrix = np.array(json.loads(dynamicMatrixStr))
-# # 浣跨敤 numpy 鍔犻�熺殑浠g爜
-process_dynamic_matrix(dynamicMatrix, codeMatrix)
+ try:
+ dynamicMatrixStr = r.get('KV.AGV_MAP_ASTAR_DYNAMIC_FLAG.1')
+ if dynamicMatrixStr is None:
+ raise ValueError("Redis 涓湭鎵惧埌閿�: KV.AGV_MAP_ASTAR_DYNAMIC_FLAG.1")
+ dynamicMatrix = np.array(json.loads(dynamicMatrixStr))
+ except Exception as e:
+ print(f"鑾峰彇 dynamicMatrix 澶辫触: {e}")
+ sys.exit(1)
-# for x in range(dynamicMatrix.shape[0]):
-# for y in range(dynamicMatrix.shape[1]):
-# data = dynamicMatrix[x, y]
-# vehicle = data['vehicle']
-# if vehicle != '0' and vehicle != '-1':
-# getWaveScopeByCode(x, y)
+ # 鍒濆鍖� waveMatrix
+ try:
+ waveMatrix = initWaveMatrix()
+ except Exception as e:
+ print(f"鍒濆鍖� waveMatrix 澶辫触: {e}")
+ sys.exit(1)
-# 灏� numpy.ndarray 杞崲涓哄祵濂楀垪琛�
-waveMatrixList = waveMatrix.tolist()
-# 灏嗗祵濂楀垪琛ㄨ浆鎹负 JSON 瀛楃涓�
-waveMatrixJsonStr = json.dumps(waveMatrixList)
+ # 澶勭悊 dynamicMatrix
+ try:
+ process_dynamic_matrix(dynamicMatrix, codeMatrix)
+ except Exception as e:
+ print(f"澶勭悊 dynamicMatrix 澶辫触: {e}")
+ sys.exit(1)
-r.set("KV.AGV_MAP_ASTAR_WAVE_FLAG.1",waveMatrixJsonStr)
+ # 灏� numpy.ndarray 杞崲涓哄祵濂楀垪琛�
+ waveMatrixList = waveMatrix.tolist()
+ # 灏嗗祵濂楀垪琛ㄨ浆鎹负 JSON 瀛楃涓�
+ waveMatrixJsonStr = json.dumps(waveMatrixList)
-end = time.perf_counter()
-# print('绋嬪簭杩愯鏃堕棿涓�: %s Seconds' % (end - startTime))
-print("1")
+ try:
+ r.set("KV.AGV_MAP_ASTAR_WAVE_FLAG.1", waveMatrixJsonStr)
+ except Exception as e:
+ print(f"灏� waveMatrix 鍐欏叆 Redis 澶辫触: {e}")
+ sys.exit(1)
+ end = time.perf_counter()
+ # print('绋嬪簭杩愯鏃堕棿涓�: %s Seconds' % (end - startTime))
+ print("1")
+ # 濡傛灉闇�瑕侊紝鍙互鎵撳嵃杩愯鏃堕棿
+ # print(f"绋嬪簭杩愯鏃堕棿涓�: {end - startTime:.2f} 绉�")
+
+if __name__ == "__main__":
+ main()
diff --git a/zy-acs-manager/src/main/resources/agv1.py b/zy-acs-manager/src/main/resources/agv1.py
new file mode 100644
index 0000000..b58567c
--- /dev/null
+++ b/zy-acs-manager/src/main/resources/agv1.py
@@ -0,0 +1,160 @@
+import ast
+import sys
+
+import numpy as np
+import json
+import time
+import redis
+
+radiusLen = None
+
+
+# 灏嗗瓧绗︿覆杞崲涓烘诞鐐瑰瀷鏁扮粍
+def convert_to_float_array(str_array):
+ if isinstance(str_array, str):
+ return np.array(ast.literal_eval(str_array), dtype=float)
+ return str_array
+
+def getWaveScopeByCode(x, y):
+ code = codeMatrix[x, y]
+ includeList = []
+ existNodes = set()
+ spreadWaveNode({"x": x, "y": y}, {"x": x, "y": y}, existNodes, includeList)
+ return includeList
+
+def spreadWaveNode(originNode, currNode, existNodes, includeList):
+ x, y = currNode['x'], currNode['y']
+ neighbors = [(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)]
+ for neighbor in neighbors:
+ extendNeighborNodes(originNode, {"x": neighbor[0], "y": neighbor[1]}, existNodes, includeList)
+
+def extendNeighborNodes(originNode, nextNode, existNodes, includeList):
+ x, y = nextNode['x'], nextNode['y']
+ if (x < 0 or x >= codeMatrix.shape[0] or y < 0 or y >= codeMatrix.shape[1]):
+ return
+
+ if (x, y) in existNodes:
+ return
+
+ existNodes.add((x, y))
+
+ nextNodeCodeData = codeMatrix[x, y]
+
+ if nextNodeCodeData == 'NONE':
+ spreadWaveNode(originNode, nextNode, existNodes, includeList)
+ else:
+ o1Cda = convert_to_float_array(cdaMatrix[originNode['x'], originNode['y']])
+ o2Cda = convert_to_float_array(cdaMatrix[x, y])
+
+ num1 = (o1Cda[0] - o2Cda[0]) ** 2
+ num2 = (o1Cda[1] - o2Cda[1]) ** 2
+ if num1 + num2 <= radiusLen ** 2:
+ includeList.append({"x": int(x), "y": int(y), "code": str(codeMatrix[x, y])})
+ spreadWaveNode(originNode, nextNode, existNodes, includeList)
+
+# 鎵惧埌鏌愪釜鍊煎搴旂殑 x, y 涓嬫爣
+def find_value_in_matrix(value):
+ indices = np.where(codeMatrix == value)
+ return list(zip(indices[0], indices[1]))
+
+def initWaveMatrix():
+ lev = 1
+ waveMatrix = np.empty_like(codeMatrix, dtype=object)
+
+ for x in range(codeMatrix.shape[0]):
+ for y in range(codeMatrix.shape[1]):
+ if codeMatrix[x][y] == 'NONE':
+ waveMatrix[x][y] = "-"
+ else:
+ waveMatrix[x][y] = '[]'
+
+ return waveMatrix
+
+# 浼樺寲鐗堟湰锛氫娇鐢ㄩ泦鍚堟潵鎻愰珮鎬ц兘
+def mergeWave(originWave, vehicle):
+ # 灏嗗瓧绗︿覆瑙f瀽涓洪泦鍚�
+ set_data = set(ast.literal_eval(originWave))
+ # 濡傛灉 vehicle 涓嶅湪闆嗗悎涓紝鍒欐坊鍔�
+ set_data.add(vehicle)
+ # 杩斿洖搴忓垪鍖栧悗鐨勫瓧绗︿覆
+ return json.dumps(list(set_data))
+
+# 灏� dynamicMatrix 杞崲涓� numpy 缁撴瀯鍖栨暟缁�
+def convert_to_structured_array(dynamicMatrix):
+ # 瀹氫箟缁撴瀯鍖栨暟缁勭殑 dtype
+ dtype = [('serial', int), ('vehicle', 'U2')]
+ # 灏嗗祵濂楃殑鍒楄〃杞崲涓虹粨鏋勫寲鏁扮粍
+ structured_array = np.array([tuple(d.values()) for row in dynamicMatrix for d in row], dtype=dtype)
+ # 閲嶅涓哄師濮嬬殑浜岀淮褰㈢姸
+ return structured_array.reshape(len(dynamicMatrix), -1)
+
+# 浣跨敤 numpy 鍔犻�熺殑浠g爜
+def process_dynamic_matrix(dynamicMatrix, codeMatrix):
+ # 灏� dynamicMatrix 杞崲涓虹粨鏋勫寲鏁扮粍
+ dynamicMatrix = convert_to_structured_array(dynamicMatrix)
+
+ # 鑾峰彇 dynamicMatrix 鐨勫舰鐘�
+ rows, cols = dynamicMatrix.shape
+
+ # 鍒涘缓涓�涓竷灏旀帺鐮侊紝鐢ㄤ簬绛涢�夊嚭 vehicle 涓嶄负 '0' 鍜� '-1' 鐨勫厓绱�
+ mask = (dynamicMatrix['vehicle'] != '0') & (dynamicMatrix['vehicle'] != '-1')
+
+ # 鑾峰彇婊¤冻鏉′欢鐨� x 鍜� y 鍧愭爣
+ x_indices, y_indices = np.where(mask)
+
+ # 閬嶅巻婊¤冻鏉′欢鐨勫潗鏍�
+ for x, y in zip(x_indices, y_indices):
+ # print(code)
+ data = dynamicMatrix[x][y]
+ vehicle = data['vehicle']
+ includeList = getWaveScopeByCode(x,y)
+ for include in includeList:
+ originWave = waveMatrix[include['x']][include['y']]
+ waveMatrix[include['x']][include['y']] = mergeWave(originWave, vehicle)
+
+radiusLenStr = sys.argv[1]
+radiusLen = float(radiusLenStr)
+
+redisHost = sys.argv[2]
+redisPwd = sys.argv[3]
+redisPort = sys.argv[4]
+redisIdx = sys.argv[5]
+
+startTime = time.perf_counter()
+
+waveMatrix = initWaveMatrix()
+
+# 鍒涘缓涓�涓繛鎺ユ睜
+pool = redis.ConnectionPool(host=redisHost, port=int(redisPort), password=redisPwd, db=int(redisIdx))
+r = redis.Redis(connection_pool=pool)
+
+codeMatrixStr = r.get('KV.AGV_MAP_ASTAR_CODE_FLAG.1')
+codeMatrix = np.array(json.loads(codeMatrixStr))
+
+cdaMatrixStr = r.get('KV.AGV_MAP_ASTAR_CDA_FLAG.1')
+cdaMatrix = np.array(json.loads(cdaMatrixStr))
+
+dynamicMatrixStr = r.get('KV.AGV_MAP_ASTAR_DYNAMIC_FLAG.1')
+dynamicMatrix = np.array(json.loads(dynamicMatrixStr))
+
+# # 浣跨敤 numpy 鍔犻�熺殑浠g爜
+process_dynamic_matrix(dynamicMatrix, codeMatrix)
+
+# for x in range(dynamicMatrix.shape[0]):
+# for y in range(dynamicMatrix.shape[1]):
+# data = dynamicMatrix[x, y]
+# vehicle = data['vehicle']
+# if vehicle != '0' and vehicle != '-1':
+# getWaveScopeByCode(x, y)
+
+# 灏� numpy.ndarray 杞崲涓哄祵濂楀垪琛�
+waveMatrixList = waveMatrix.tolist()
+# 灏嗗祵濂楀垪琛ㄨ浆鎹负 JSON 瀛楃涓�
+waveMatrixJsonStr = json.dumps(waveMatrixList)
+
+r.set("KV.AGV_MAP_ASTAR_WAVE_FLAG.1",waveMatrixJsonStr)
+
+end = time.perf_counter()
+# print('绋嬪簭杩愯鏃堕棿涓�: %s Seconds' % (end - startTime))
+print("1")
+
--
Gitblit v1.9.1