feat: 增加扫黑除暴假动作

This commit is contained in:
bmy
2024-08-06 15:20:46 +08:00
parent 2e6ce3e1f7
commit 25e3b60cd8
5 changed files with 100 additions and 35 deletions

View File

@@ -2,7 +2,7 @@ from enum import Enum
from loguru import logger
from utils import label_filter
from utils import tlabel
from utils import LLM
# from utils import LLM
from utils import LLM_deepseek
from utils import CountRecord
import utils
@@ -769,7 +769,8 @@ class get_rball():
# 靠近塔
by_cmd.send_angle_scoop(20)
# 上古參數
by_cmd.send_distance_y(-15, 50) # 50 # 70
# by_cmd.send_distance_y(-15, 50) # 50 # 70
by_cmd.send_distance_y(-15, 40) # 50 # 70
# 6_9 參數
# by_cmd.send_distance_y(-15, 35)
# time.sleep(2)
@@ -1236,8 +1237,10 @@ class put_hanoi3():
def nexec(self):
pass
def after(self):
by_cmd.send_angle_storage(20)
by_cmd.send_position_axis_x(1, 150)
var.pid_turning.set(cfg["put_hanoi3"]["pid_kp"], cfg["put_hanoi3"]["pid_ki"], cfg["put_hanoi3"]["pid_kd"])
var.pid_turning.set(cfg["put_hanoi3"]["pid_kp"] - 0.2, cfg["put_hanoi3"]["pid_ki"], cfg["put_hanoi3"]["pid_kd"])
# FIXME 此处 -0.2 在 `2e6ce3e1f7d326d6ce8110855e2339ebc03ab2da` 前没有
# 应急避险 第一阶段 找目标牌
class move_area1():
@@ -1257,7 +1260,7 @@ class move_area1():
car_stop()
time.sleep(1)
# calibrate_new(tlabel.SIGN, offset = 8, run = True)
calibrate_new(tlabel.SIGN, offset = -30, run = True, run_speed = 5)
calibrate_new(tlabel.SIGN, offset = -1, run = True, run_speed = 5)
time.sleep(1)
by_cmd.send_position_axis_x(1, 50)
@@ -1290,11 +1293,14 @@ class move_area1():
return
logger.error(f"OCR 检出字符:\"{var.llm_text}\"")
llm_bot.request(var.llm_text)
if len(var.llm_text) < 3:
if len(var.llm_text) < 5:
var.skip_llm_task_flag = True
return
else:
# 当有效字符大于 5 个文字时 才请求大模型
llm_bot.request(var.llm_text)
else:
# 不需要文字识别 直接使用传入的参数执行 action
pass
@@ -1356,6 +1362,7 @@ class move_area2():
return 5000
return False
def add_item(self, item):
# FIXME 没有对传入参数的范围进行校验,如果出现单位错误,可能会导致无法回位的问题
try:
return self.action_dict[item.get('action')](item.get('time'))
except:
@@ -1449,22 +1456,22 @@ class move_area2():
speed_time_y = int(abs(_dis_y) * 750)
by_cmd.send_distance_x(10 * direct_x, speed_time_x)
by_cmd.send_distance_y(10 * direct_y, speed_time_y)
time.sleep(max(speed_time_x, speed_time_y) / 100) #FIXME 除以 100 是否正确
time.sleep(max(speed_time_x, speed_time_y) / 150) #FIXME 除以 100 是否正确
return True
def go_left_rotate(self, _time):
self.abs_w += math.radians(_time) # 弧度制
logger.info(f"向左旋转:[目标位置 ({self.abs_y:.2f}, {self.abs_x:.2f}) - 角度 {math.degrees(self.abs_w)} ]")
self.sum_rotate_angle -= _time
speed_time = int(abs(_time) * 7.25)
by_cmd.send_angle_omega(30, speed_time)
speed_time = int(abs(_time) * 3.8)
by_cmd.send_angle_omega(50, speed_time)
time.sleep(speed_time / 200 + 0.5)
return True
def go_right_rotate(self, _time):
self.abs_w -= math.radians(_time) # 弧度制
logger.info(f"向右旋转:[目标位置 ({self.abs_y:.2f}, {self.abs_x:.2f}) - 角度 {math.degrees(self.abs_w)} ]")
self.sum_rotate_angle += _time
speed_time = int(abs(_time) * 7.25)
by_cmd.send_angle_omega(-30, speed_time)
speed_time = int(abs(_time) * 3.8)
by_cmd.send_angle_omega(-50, speed_time)
time.sleep(speed_time / 200 + 0.5)
return True
def go_sleep(self, _time):
@@ -1497,12 +1504,23 @@ class move_area2():
calibrate_new(tlabel.SHELTER, offset = 30, run = True)
time.sleep(0.5)
if cfg_move_area == None:
resp = None
# 调用大模型 然后执行动作
try:
resp = llm_bot.get_command_json(var.llm_text)
logger.info(f"llm 返回原数据 {resp}")
logger.info("llm 阻塞等待服务器返回中")
start_wait_time = time.perf_counter()
while True:
if llm_bot.success_status.isSet():
resp = llm_bot.response.choices[0].message.content
logger.info(f"llm 返回原数据 {resp}")
break
now_time = time.perf_counter()
if llm_bot.error_status.isSet() or (now_time - start_wait_time) > 6.5 :
logger.error("大模型 llm_bot 超时,跳过任务")
return
except:
logger.error("大模型 llm_bot 超时,跳过任务")
logger.error("大模型 llm_bot 未知错误,跳过任务")
return
try:
@@ -1583,15 +1601,40 @@ class kick_ass():
by_cmd.send_position_axis_z(30, 80)
by_cmd.send_position_axis_x(1, 130)
# 移动到中间
by_cmd.send_distance_x(10, 295)
time.sleep(4)
if self.target_person == 1:
target_distance = self.pos_gap1
by_cmd.send_distance_x(-10, 150)
time.sleep(1.5)
car_stop()
elif self.target_person == 2:
by_cmd.send_distance_x(-10, 50)
time.sleep(1.5)
car_stop()
elif self.target_person == 3:
by_cmd.send_distance_x(10, 50)
time.sleep(1.5)
car_stop()
else:
target_distance = self.pos_gap1 + (self.target_person - 1) * self.pos_gap2 + (self.target_person - 1) * 10
by_cmd.send_distance_x(10, target_distance)
logger.info(f"target distance {target_distance}")
time.sleep(1.5 + (self.target_person - 1) * 0.7 )
car_stop()
by_cmd.send_distance_x(10, 150)
time.sleep(1.5)
car_stop()
# 先移动到第一个人的地方 假动作
# by_cmd.send_distance_x(10, self.pos_gap1)
# time.sleep(1.5)
# if self.target_person == 1:
# # target_distance = self.pos_gap1
# pass
# else:
# # target_distance = self.pos_gap1 + (self.target_person - 1) * self.pos_gap2 + (self.target_person - 1) * 10
# target_distance = (self.target_person - 1) * self.pos_gap2 + (self.target_person - 1) * 10
# by_cmd.send_distance_x(10, target_distance)
# logger.info(f"target distance {target_distance}")
# time.sleep(1.5 + (self.target_person - 1) * 0.7 )
# car_stop()
# by_cmd.send_angle_claw_arm(225)
# time.sleep(0.5)