From 64970fd6a77e9f8a5b7b35627414cd4de413cadb Mon Sep 17 00:00:00 2001 From: bmy <2583236812@qq.com> Date: Wed, 22 May 2024 18:50:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cfg_main.toml | 16 +++--- cfg_mtask => cfg_mtask.toml | 0 main.py | 3 +- majtask.py | 2 +- subtask.py | 98 +++++++++++++++++++++++++++++++++---- utils.py | 49 +++++++++++++++++++ 6 files changed, 148 insertions(+), 20 deletions(-) rename cfg_mtask => cfg_mtask.toml (100%) create mode 100644 utils.py diff --git a/cfg_main.toml b/cfg_main.toml index 98511cd..1f20d4f 100644 --- a/cfg_main.toml +++ b/cfg_main.toml @@ -3,12 +3,12 @@ logger_filename = "log/file_{time}.log" logger_format = "{time} {level} {message}" [task] -GetBlock_enable = true # 人员施救使能 +GetBlock_enable = true # 人员施救使能 PutBlock_enable = false # 紧急转移使能 -GetBBall_enable = true # 整装上阵使能 -UpTower_enable = true # 通信抢修使能 -GetRBall_enable = true # 高空排险使能 -PutBBall_enable = true # 派发物资使能 -PutHanoi_enable = true # 物资盘点使能 -MoveArea_enable = true # 应急避险使能 -KickAss_enable = true # 扫黑除暴使能 +GetBBall_enable = true # 整装上阵使能 +UpTower_enable = true # 通信抢修使能 +GetRBall_enable = true # 高空排险使能 +PutBBall_enable = true # 派发物资使能 +PutHanoi_enable = true # 物资盘点使能 +MoveArea_enable = true # 应急避险使能 +KickAss_enable = true # 扫黑除暴使能 diff --git a/cfg_mtask b/cfg_mtask.toml similarity index 100% rename from cfg_mtask rename to cfg_mtask.toml diff --git a/main.py b/main.py index dd48294..67784e5 100644 --- a/main.py +++ b/main.py @@ -19,7 +19,8 @@ task_queue.put(sb.task(sb.get_bball.exec, sb.get_bball.find, cfg_main['task']['G task_queue.put(sb.task(sb.up_tower.exec, sb.up_tower.find, cfg_main['task']['UpTower_enable'])) task_queue.put(sb.task(sb.get_rball.exec, sb.get_rball.find, cfg_main['task']['GetRBall_enable'])) task_queue.put(sb.task(sb.put_bball.exec, sb.put_bball.find, cfg_main['task']['PutBBall_enable'])) -task_queue.put(sb.task(sb.put_hanoi.exec, sb.put_hanoi.find, cfg_main['task']['PutHanoi_enable'])) +task_queue.put(sb.task(sb.put_hanoi1.exec, sb.put_hanoi1.find, True)) # 无论是否进行任务,检测标识并转向都是必须进行的 +task_queue.put(sb.task(sb.put_hanoi2.exec, sb.put_hanoi2.find, cfg_main['task']['PutHanoi_enable'])) task_queue.put(sb.task(sb.move_area.exec, sb.move_area.find, cfg_main['task']['MoveArea_enable'])) task_queue.put(sb.task(sb.kick_ass.exec, sb.kick_ass.find, cfg_main['task']['KickAss_enable'])) diff --git a/majtask.py b/majtask.py index d29c335..80d01bc 100644 --- a/majtask.py +++ b/majtask.py @@ -67,4 +67,4 @@ class main_task(): # self.by_cmd.send_speed_x(7) pid_out = self.pid1.get(self.lane_error) # self.by_cmd.send_speed_omega(pid_out) - self.lane_socket.send_string("infer") \ No newline at end of file + # self.lane_socket.send_string("infer") \ No newline at end of file diff --git a/subtask.py b/subtask.py index 2297e24..d82034a 100644 --- a/subtask.py +++ b/subtask.py @@ -1,5 +1,7 @@ from enum import Enum from loguru import logger +from utils import label_filter +from utils import tlabel import time # 任务类 @@ -73,7 +75,16 @@ class task_queuem(task): # 人员施救 class get_block(): def find(): - return True + # 目标检测红/蓝方块 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.RBLOCK) + ret2, list2 = filter.get(tlabel.BBLOCK) + + if (ret1 > 0) or (ret2 > 0): + logger.info("[TASK1]# find label") + return True + else: + return False def exec(): pass @@ -81,56 +92,123 @@ class get_block(): # 紧急转移 class put_block(): def find(): - return False + # 目标检测医院 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.HOSPITAL) + if ret1 > 0: + return True + else: + return False def exec(): pass # 整装上阵 class get_bball(): def find(): - return False + # 目标检测黄球 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.YBALL) + if ret1 > 0: + return True + else: + return False def exec(): pass # 通信抢修 class up_tower(): def find(): - return False + # 目标检测通信塔 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.YBALL) + if ret1 > 0: + return True + else: + return False def exec(): pass # 高空排险 class get_rball(): def find(): - return False + # 目标检测红球 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.RBALL) + if ret1 > 0: + return True + else: + return False def exec(): pass # 派发物资 class put_bball(): def find(): - return False + # 目标检测通信塔 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.BASKET) + if ret1 > 0: + return True + else: + return False def exec(): pass # 物资盘点 -class put_hanoi(): +class put_hanoi1(): def find(): - return False + # 目标检测左右转向标识 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.MARKL) + ret2, list2 = filter.get(tlabel.MARKR) + + if (ret1 > 0) or (ret2 > 0): + return True + else: + return False + def exec(): + pass + +class put_hanoi2(): + def find(): + # 目标检测左右转向标识 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.LPILLAR) + + if ret1 > 0: + return True + else: + return False def exec(): pass # 应急避险 class move_area(): def find(): - return False + # 目标检测标志牌 + # TODO 如何确保在都检测标志牌的情况下,和下一个任务进行区分 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.SIGN) + + if ret1 > 0: + return True + else: + return False def exec(): pass # 扫黑除暴 class kick_ass(): def find(): - return False + # 目标检测标志牌 + # TODO 如何确保在都检测标志牌的情况下,和上一个任务进行区分 + filter = label_filter(None) + ret1, list1 = filter.get(tlabel.SIGN) + + if ret1 > 0: + return True + else: + return False def exec(): pass diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..dcf282d --- /dev/null +++ b/utils.py @@ -0,0 +1,49 @@ +from enum import Enum + +# 根据标签修改 +class tlabel(Enum): + BBLOCK = 1 # 蓝色方块 + RBLOCK = 2 # 红色方块 + HOSPITAL = 3 # 医院 + BBALL = 4 # 蓝球 + YBALL = 5 # 黄球 + TOWER = 6 # 通信塔 + RBALL = 7 # 红球 + BASKET = 8 # 球筐 + MARKL = 9 # 指向标 + MARKR = 10 # 指向标 + SPILLAR = 11 # 小柱体 (红色) + MPILLAR = 12 # 中柱体 (蓝色) + LPILLAR = 13 # 大柱体 (红色) + SIGN = 14 # 文字标牌 + TARGET = 15 # 目标靶 + SHELTER = 16 # 停车区 + BASE = 17 # 基地 + +class label_filter: + def __init__(self, list_src): + self.num = 0 + self.pos = [] + self.list = list_src # 获取目标检测输出的接口 (含标签,位置,置信度) + # TODO 添加置信度阈值 + pass + def get(self, tlabel): + # TODO 循环查找匹配的标签值 + # TODO 返回对应标签的个数,以及坐标列表 + return self.num, self.pos + def find(self, tlabel): + # TODO 遍历返回的列表,有对应标签则返回 True + return False + def aim_left(self, tlabel): + # TODO 如果标签存在,则返回列表中位置最靠左的目标框和中心的偏移值 + error = 0 + return error + def aim_right(self, tlabel): + # TODO 如果标签存在,则返回列表中位置最靠右的目标框和中心的偏移值 + error = 0 + return error + def aim_near(self, tlabel): + # TODO 如果标签存在,则返回列表中位置最近的目标框和中心的偏移值 + error = 0 + return error + \ No newline at end of file