feat: 初步增加抓取第二个物块和放置动作

This commit is contained in:
bmy
2024-06-12 20:33:32 +08:00
parent 6f426d9576
commit 21ac0f773e
6 changed files with 328 additions and 152 deletions

View File

@@ -3,28 +3,28 @@ logger_filename = "log/file_{time}.log"
logger_format = "{time} {level} {message}" logger_format = "{time} {level} {message}"
[task] [task]
GetBlock_enable = false # 人员施救使能 GetBlock_enable = true # 人员施救使能
PutBlock_enable = false # 紧急转移使能 PutBlock_enable = false # 紧急转移使能
GetBBall_enable = false # 整装上阵使能 GetBBall_enable = false # 整装上阵使能
UpTower_enable = false # 通信抢修使能 UpTower_enable = false # 通信抢修使能
GetRBall_enable = false # 高空排险使能 GetRBall_enable = true # 高空排险使能
PutBBall_enable = false # 派发物资使能 PutBBall_enable = false # 派发物资使能
PutHanoi_enable = false # 物资盘点使能 PutHanoi_enable = false # 物资盘点使能
MoveArea_enable = false # 应急避险使能 MoveArea_enable = false # 应急避险使能
KickAss_enable = true # 扫黑除暴使能 KickAss_enable = false # 扫黑除暴使能
[find_counts] [find_counts]
GetBlock_counts = 20 # 人员施救计数 GetBlock_counts = 5 # 人员施救计数
PutBlock_counts = 20 # 紧急转移计数 PutBlock_counts = 5 # 紧急转移计数
GetBBall_counts = 5 # 整装上阵计数 GetBBall_counts = 5 # 整装上阵计数
UpTower_counts = 10 # 通信抢修计数 UpTower_counts = 3 # 通信抢修计数
GetRBall_counts = 10 # 高空排险计数 GetRBall_counts = 10 # 高空排险计数
PutBBall_counts = 5 # 派发物资计数 PutBBall_counts = 5 # 派发物资计数
PutHanoi1_counts = 18 # 物资盘点计数 PutHanoi1_counts = 10 # 物资盘点计数
PutHanoi2_counts = 2 # 物资盘点计数 PutHanoi2_counts = 2 # 物资盘点计数
PutHanoi3_counts = 2 # 物资盘点计数 PutHanoi3_counts = 2 # 物资盘点计数
MoveArea1_counts = 10 # 应急避险计数 MoveArea1_counts = 6 # 应急避险计数
MoveArea2_counts = 1700 # 应急避险第二阶段计数 MoveArea2_counts = 1700 # 应急避险第二阶段计数
KickAss_counts = 20 # 扫黑除暴计数 KickAss_counts = 20 # 扫黑除暴计数

View File

@@ -1,5 +1,6 @@
[get_block] [get_block]
first_block = "red" first_block = "red"
# first_block = "blue"
[put_block] [put_block]
[get_bball] [get_bball]
@@ -23,4 +24,4 @@ llm_enable = false # 大模型机器人
[kick_ass] [kick_ass]
pos_gap1 = 150 # 目标牌和第一个 person 之间的距离 pos_gap1 = 150 # 目标牌和第一个 person 之间的距离
pos_gap2 = 80 # person 之间的距离 pos_gap2 = 80 # person 之间的距离
target_person = 1 target_person = 3

View File

@@ -18,9 +18,9 @@ logger.add(cfg_main['debug']['logger_filename'], format=cfg_main['debug']['logge
# 向任务队列添加任务 # 向任务队列添加任务
task_queue = queue.Queue() task_queue = queue.Queue()
task_queue.put(sb.task(sb.get_block, cfg_main['find_counts']['GetBlock_counts'], cfg_main['task']['GetBlock_enable'])) task_queue.put(sb.task(sb.get_block1, cfg_main['find_counts']['GetBlock_counts'], cfg_main['task']['GetBlock_enable']))
# task_queue.put(sb.task(sb.get_block, cfg_main['find_counts']['GetBlock_counts'], cfg_main['task']['GetBlock_enable'])) task_queue.put(sb.task(sb.get_block2, cfg_main['find_counts']['GetBlock_counts'], cfg_main['task']['GetBlock_enable']))
task_queue.put(sb.task(sb.put_block, cfg_main['find_counts']['PutBlock_counts'], cfg_main['task']['GetBlock_enable'] and cfg_main['task']['PutBlock_enable'])) task_queue.put(sb.task(sb.put_block, cfg_main['find_counts']['PutBlock_counts'], cfg_main['task']['GetBlock_enable']))
task_queue.put(sb.task(sb.get_bball, cfg_main['find_counts']['GetBBall_counts'], cfg_main['task']['GetBBall_enable'])) task_queue.put(sb.task(sb.get_bball, cfg_main['find_counts']['GetBBall_counts'], cfg_main['task']['GetBBall_enable']))
# TODO 添加一个空任务用于提前降 z 轴 # TODO 添加一个空任务用于提前降 z 轴
task_queue.put(sb.task(sb.up_tower, cfg_main['find_counts']['UpTower_counts'], cfg_main['task']['UpTower_enable'])) task_queue.put(sb.task(sb.up_tower, cfg_main['find_counts']['UpTower_counts'], cfg_main['task']['UpTower_enable']))

View File

@@ -33,7 +33,8 @@ class main_task():
self.by_cmd = by_cmd self.by_cmd = by_cmd
# 转向 pid # 转向 pid
self.pid1 = PidWrap(1, 0, 0, output_limits=40) # self.pid1 = PidWrap(0.5, 0, 0, output_limits=55) # 1.2
self.pid1 = PidWrap(1.2, 0, 0, output_limits=55) # 1.2
self.pid1.set_target(0) self.pid1.set_target(0)
def parse_data(self,data): def parse_data(self,data):
@@ -68,27 +69,34 @@ class main_task():
self.x = 0 self.x = 0
self.y = 0 self.y = 0
error_abs = abs(self.lane_error) error_abs = abs(self.lane_error)
if error_abs > 45: if error_abs > 50:
speed = 8 speed = 10
# pid_out = self.lane_error * 1.1 elif error_abs > 45:
# self.pid1.set(1, 0, 0) speed = 11
elif error_abs > 35: elif error_abs > 35:
speed = 13 speed = 13
# pid_out = self.lane_error * 1
# self.pid1.set(1, 0, 0)
elif error_abs > 25: elif error_abs > 25:
speed = 15 speed = 15
# pid_out = self.lane_error * 1
# self.pid1.set(1.8, 0, 0)
elif error_abs > 15: elif error_abs > 15:
speed = 15 speed = 15
# pid_out = self.lane_error * 0.8
# self.pid1.set(1.8, 0, 0)
else: else:
speed = 15 speed = 18
# pid_out = self.lane_error * 0.4
# self.pid1.set(0.7, 0, 0) # lane_model initial
# if error_abs > 50:
# speed = 10
# elif error_abs > 45:
# speed = 11
# elif error_abs > 35:
# speed = 13
# elif error_abs > 25:
# speed = 15
# elif error_abs > 15:
# speed = 15
# else:
# speed = 18
if utils.task_speed != 0: if utils.task_speed != 0:
speed = utils.task_speed speed = utils.task_speed
self.by_cmd.send_speed_x(speed) self.by_cmd.send_speed_x(speed)

View File

@@ -3,6 +3,7 @@ from loguru import logger
from utils import label_filter from utils import label_filter
from utils import tlabel from utils import tlabel
from utils import LLM from utils import LLM
from utils import CountRecord
import utils import utils
import toml import toml
import zmq import zmq
@@ -37,6 +38,7 @@ def car_stop():
by_cmd.send_speed_x(0) by_cmd.send_speed_x(0)
time.sleep(0.2) time.sleep(0.2)
by_cmd.send_speed_omega(0) by_cmd.send_speed_omega(0)
# 蓝色球使用
def calibrate_right_new(label, offset, run = True, run_speed = 3.5): def calibrate_right_new(label, offset, run = True, run_speed = 3.5):
not_found_counts = 0 not_found_counts = 0
ret, error = filter.aim_right(label) ret, error = filter.aim_right(label)
@@ -45,7 +47,7 @@ def calibrate_right_new(label, offset, run = True, run_speed = 3.5):
if not_found_counts >= 20: if not_found_counts >= 20:
not_found_counts = 0 not_found_counts = 0
error = -320 # error > 0 front run error = -320 # error > 0 front run
logger.info("找不到 直接向前") logger.info("calibrate_right_new:找不到次数超过 20 帧 直接前进寻找")
break break
ret, error = filter.aim_right(label) ret, error = filter.aim_right(label)
@@ -58,11 +60,12 @@ def calibrate_right_new(label, offset, run = True, run_speed = 3.5):
pass pass
# 停的位置已经很接近目标,可以直接使用 distance 校准 # 停的位置已经很接近目标,可以直接使用 distance 校准
else: else:
error = error * 3 # logger.info("停车时误差就小于")
if error > 0: # error = error * 3
by_cmd.send_distance_x(-10, int(error)) # if error > 0:
else: # by_cmd.send_distance_x(-10, int(error))
by_cmd.send_distance_x(10, int(-error)) # else:
# by_cmd.send_distance_x(10, int(-error))
return return
while True: while True:
ret, error = filter.aim_right(label) ret, error = filter.aim_right(label)
@@ -72,13 +75,15 @@ def calibrate_right_new(label, offset, run = True, run_speed = 3.5):
if ret: if ret:
if abs(error) <= 8: if abs(error) <= 8:
car_stop() car_stop()
logger.info("可以停车") logger.info("calibrate_right_new:行进时 误差小于 8 直接停车")
ret, error = filter.aim_right(label) ret, error = filter.aim_right(label)
while not ret: while not ret:
ret, error = filter.aim_right(label) ret, error = filter.aim_right(label)
error += offset error += offset
logger.info(f"calibrate_right_new:停车后的误差是{error}")
if abs(error) > 8: if abs(error) > 8:
logger.info(f"calibrate_right_new:停车后的误差大于 8 使用 distance 校准")
error = error * 3 error = error * 3
if error > 0: if error > 0:
by_cmd.send_distance_x(-10, int(error)) by_cmd.send_distance_x(-10, int(error))
@@ -97,8 +102,14 @@ param {*} run_speed
return {*} return {*}
''' '''
def calibrate_new(label, offset, run = True, run_speed = 3.5): def calibrate_new(label, offset, run = True, run_speed = 3.5):
not_found_counts = 0
ret, box = filter.get(label) ret, box = filter.get(label)
while not ret: while not ret:
not_found_counts += 1
if not_found_counts >= 20:
not_found_counts = 0
error = -320 # error > 0 front run
logger.info("calibrate_new:找不到次数超过 20 帧 直接前进寻找")
ret, box = filter.get(label) ret, box = filter.get(label)
error = (box[0][2] + box[0][0] - 320) / 2 + offset error = (box[0][2] + box[0][0] - 320) / 2 + offset
@@ -109,12 +120,16 @@ def calibrate_new(label, offset, run = True, run_speed = 3.5):
by_cmd.send_speed_x(run_speed) by_cmd.send_speed_x(run_speed)
# 停的位置已经很接近目标,可以直接使用 distance 校准 # 停的位置已经很接近目标,可以直接使用 distance 校准
else: else:
error = error * 3 if abs(error) > 8:
if error > 0: logger.info(f"calibrate_new:停车后误差{error}大于 8 使用 distance 校准")
by_cmd.send_distance_x(-10, int(error)) # error = error # 3
else: if error > 0:
by_cmd.send_distance_x(10, int(-error)) by_cmd.send_distance_x(-10, int(error))
return else:
by_cmd.send_distance_x(10, int(-error))
return
logger.info(f"calibrate_new:停车后误差{error}小于 8 不校准")
return
while True: while True:
ret, box = filter.get(label) ret, box = filter.get(label)
while not ret: while not ret:
@@ -124,16 +139,18 @@ def calibrate_new(label, offset, run = True, run_speed = 3.5):
if ret: if ret:
if abs(error) <= 10: # 5 if abs(error) <= 10: # 5
car_stop() car_stop()
logger.info("可以停车") logger.info("calibrate_new:行进时 误差小于 10 直接停车")
ret, box = filter.get(label) ret, box = filter.get(label)
while not ret: while not ret:
ret, box = filter.get(label) ret, box = filter.get(label)
error = (box[0][2] + box[0][0] - 320) / 2 + offset error = (box[0][2] + box[0][0] - 320) / 2 + offset
logger.info(f"停车后像素误差:{error}") logger.info(f"calibrate_new:停车后误差{error}")
if abs(error) > 8: if abs(error) > 8:
error = error * 1.5 # 3 logger.info(f"calibrate_new:停车后的误差大于 8 使用 distance 校准")
error = error * 3
logger.error(f"error * 3{error}")
if error > 0: if error > 0:
by_cmd.send_distance_x(-10, int(error)) by_cmd.send_distance_x(-10, int(error))
else: else:
@@ -155,9 +172,9 @@ def explore_calibrate_new(label, offset, run_direc ,run_speed = 3.5):
error = (box[0][2] + box[0][0] - 320) / 2 + offset error = (box[0][2] + box[0][0] - 320) / 2 + offset
if ret: if ret:
# 校准速度越大 停车的条件越宽泛 # 校准速度越大 停车的条件越宽泛
if abs(error) <= 15: if abs(error) <= 10:
car_stop() car_stop()
logger.info("可以停车") logger.info("explore_calibrate_new:行进时 误差小于 10 直接停车")
ret, box = filter.get(label) ret, box = filter.get(label)
while not ret: while not ret:
@@ -165,6 +182,7 @@ def explore_calibrate_new(label, offset, run_direc ,run_speed = 3.5):
error = (box[0][2] + box[0][0] - 320) / 2 + offset error = (box[0][2] + box[0][0] - 320) / 2 + offset
logger.info(f"停车后像素误差:{error}") logger.info(f"停车后像素误差:{error}")
if abs(error) > 8: if abs(error) > 8:
logger.info(f"explore_calibrate_new:停车后的误差大于 8 使用 distance 校准")
error = error * 3 error = error * 3
if error > 0: if error > 0:
by_cmd.send_distance_x(-10, int(error)) by_cmd.send_distance_x(-10, int(error))
@@ -246,16 +264,73 @@ class task_queuem(task):
return True return True
# 人员施救 # 人员施救
class get_block(): class get_block1():
def init(self): def init(self):
logger.info("人员施救初始化") logger.info(f"人员施救 1 初始化,第一抓取块为 {cfg['get_block']['first_block']}")
while (by_cmd.send_angle_camera(180) == -1): while (by_cmd.send_angle_camera(180) == -1):
by_cmd.send_angle_camera(180) by_cmd.send_angle_camera(180)
filter.switch_camera(1) filter.switch_camera(1)
if cfg['get_block']['first_block'] == "blue": if cfg['get_block']['first_block'] == "blue":
self.target_label = tlabel.BBLOCK self.target_label = tlabel.BBLOCK
self.another_label = tlabel.RBLOCK self.another_label = tlabel.RBLOCK
cfg['get_block']['first_block'] = '' else:
self.target_label = tlabel.RBLOCK
self.another_label = tlabel.BBLOCK
cfg['get_block']['first_block'] = "red"
def find(self):
# 目标检测红/蓝方块
ret = filter.find(self.target_label)
if ret > 0:
return True
return False
def exec(self):
car_stop()
calibrate_new(self.target_label, offset = 15, run = True)
logger.info("抓取块")
time.sleep(0.5)
by_cmd.send_position_axis_z(20, 60)
by_cmd.send_position_axis_x(1, 100)
time.sleep(1)
by_cmd.send_angle_claw_arm(220)
by_cmd.send_angle_claw(63)
by_cmd.send_position_axis_x(1, 20)
time.sleep(2)
by_cmd.send_angle_claw(30)
by_cmd.send_beep(1)
time.sleep(0.5)
by_cmd.send_beep(0)
time.sleep(0.5)
by_cmd.send_position_axis_x(1, 80)
by_cmd.send_position_axis_z(20, 130)
time.sleep(2)
by_cmd.send_angle_claw_arm(36)
time.sleep(1)
by_cmd.send_position_axis_z(20, 20)
time.sleep(0.5)
by_cmd.send_position_axis_x(1, 40)
time.sleep(2)
by_cmd.send_angle_claw(45)
time.sleep(0.5)
by_cmd.send_position_axis_z(20, 80)
time.sleep(2)
by_cmd.send_angle_claw_arm(220)
time.sleep(0.5)
by_cmd.send_position_axis_x(1, 100)
time.sleep(1)
pass
def nexec(self):
# TODO 完成不执行任务的空动作
pass
class get_block2():
def init(self):
logger.info(f"人员施救 2 初始化,第一抓取块为 {cfg['get_block']['first_block']}")
while (by_cmd.send_angle_camera(180) == -1):
by_cmd.send_angle_camera(180)
filter.switch_camera(1)
if cfg['get_block']['first_block'] == "red":
self.target_label = tlabel.BBLOCK
self.another_label = tlabel.RBLOCK
else: else:
self.target_label = tlabel.RBLOCK self.target_label = tlabel.RBLOCK
self.another_label = tlabel.BBLOCK self.another_label = tlabel.BBLOCK
@@ -267,57 +342,23 @@ class get_block():
return False return False
def exec(self): def exec(self):
car_stop() car_stop()
calibrate_new(self.target_label, offset = 12, run = True) calibrate_new(self.target_label, offset = 15, run = True)
logger.info("抓取块") logger.info("抓取块")
time.sleep(0.5) time.sleep(0.5)
by_cmd.send_position_axis_z(20, 60)
by_cmd.send_position_axis_x(1, 140)
time.sleep(4)
by_cmd.send_angle_claw_arm(220) by_cmd.send_angle_claw_arm(220)
by_cmd.send_angle_claw(63) by_cmd.send_angle_claw(63)
by_cmd.send_position_axis_x(1, 20) by_cmd.send_position_axis_x(1, 20)
time.sleep(2) time.sleep(1)
by_cmd.send_position_axis_z(20, 60)
time.sleep(1)
by_cmd.send_angle_claw(30) by_cmd.send_angle_claw(30)
by_cmd.send_light(1)
by_cmd.send_beep(1) by_cmd.send_beep(1)
time.sleep(0.5) time.sleep(0.5)
by_cmd.send_light(0)
by_cmd.send_beep(0) by_cmd.send_beep(0)
time.sleep(0.5) time.sleep(0.5)
by_cmd.send_position_axis_x(1, 140) by_cmd.send_position_axis_x(1, 100)
time.sleep(3) time.sleep(2)
pass pass
# 调试 临时注释掉
# calibrate(tlabel.RBLOCK,15)
# time.sleep(2)
# by_cmd.send_position_axis_z(10, 150)
# time.sleep(5)
# by_cmd.send_angle_claw_arm(127)
# time.sleep(1)
# by_cmd.send_position_axis_x(4, 140)
# time.sleep(4)
# by_cmd.send_angle_claw_arm(220)
# by_cmd.send_angle_claw(90)
# time.sleep(1)
# by_cmd.send_distance_axis_z(10, -70)
# time.sleep(3)
# by_cmd.send_angle_claw(27)
# by_cmd.send_distance_axis_z(10, 10)
# time.sleep(2)
# by_cmd.send_distance_axis_x(4, -100)
# time.sleep(1)
# by_cmd.send_distance_axis_z(10, -40)
# time.sleep(3)
# by_cmd.send_angle_claw(35)
# time.sleep(1)
# by_cmd.send_position_axis_z(10, 150)
# time.sleep(3)
# by_cmd.send_position_axis_x(2, 140)
# # 抓取第二个块后 收爪
# time.sleep(3)
# by_cmd.send_position_axis_x(4, 0)
def nexec(self): def nexec(self):
# TODO 完成不执行任务的空动作 # TODO 完成不执行任务的空动作
pass pass
@@ -343,22 +384,34 @@ class put_block():
logger.info("找到医院") logger.info("找到医院")
car_stop() car_stop()
calibrate_new(tlabel.HOSPITAL, offset = 7, run = False) calibrate_new(tlabel.HOSPITAL, offset = 7, run = False)
time.sleep(1)
by_cmd.send_position_axis_x(1, 0)
time.sleep(0.5)
by_cmd.send_position_axis_z(20, 0) by_cmd.send_position_axis_z(20, 0)
time.sleep(3) time.sleep(3)
by_cmd.send_position_axis_x(1, 0)
time.sleep(1)
by_cmd.send_angle_claw(63) by_cmd.send_angle_claw(63)
# time.sleep(2) time.sleep(1)
# by_cmd.send_position_axis_z(20, 130) by_cmd.send_position_axis_x(1, 80)
# while True: by_cmd.send_position_axis_z(20, 130)
# pass time.sleep(2)
# by_cmd.send_position_axis_z(10, 150) by_cmd.send_angle_claw_arm(36)
# time.sleep(3) time.sleep(1)
# # TODO 切换爪子方向 by_cmd.send_position_axis_z(20, 20)
# by_cmd.send_position_axis_x(2, 140) time.sleep(0.5)
# time.sleep(2) by_cmd.send_position_axis_x(1, 40)
# by_cmd.send_position_axis_z(10, 170) time.sleep(2)
by_cmd.send_angle_claw(30)
time.sleep(0.5)
by_cmd.send_position_axis_z(20, 130)
time.sleep(3)
by_cmd.send_angle_claw_arm(220)
by_cmd.send_distance_x(-10, 120)
by_cmd.send_position_axis_z(20, 0)
time.sleep(1)
by_cmd.send_position_axis_x(1, 0)
time.sleep(2)
by_cmd.send_angle_claw(63)
time.sleep(3)
# 下一动作预备位置 # 下一动作预备位置
by_cmd.send_position_axis_z(20, 130) by_cmd.send_position_axis_z(20, 130)
time.sleep(4) time.sleep(4)
@@ -396,7 +449,7 @@ class get_bball():
def find(self): def find(self):
# 目标检测蓝球 # 目标检测蓝球
ret = filter.find(tlabel.BBALL) ret = filter.find(tlabel.BBALL) or filter.find(tlabel.YBALL)
if ret: if ret:
return True return True
return False return False
@@ -447,6 +500,7 @@ class up_tower():
logger.info("通信抢修初始化") logger.info("通信抢修初始化")
while (by_cmd.send_angle_camera(90) == -1): while (by_cmd.send_angle_camera(90) == -1):
by_cmd.send_angle_camera(90) by_cmd.send_angle_camera(90)
filter.switch_camera(1)
def find(self): def find(self):
# 目标检测通信塔 # 目标检测通信塔
ret = filter.find(tlabel.TOWER) ret = filter.find(tlabel.TOWER)
@@ -476,14 +530,19 @@ class up_tower():
# 高空排险 # 高空排险
class get_rball(): class get_rball():
def init(self): def init(self):
socket.send_string("1")
socket.recv()
logger.info("高空排险初始化") logger.info("高空排险初始化")
while (by_cmd.send_angle_camera(0) == -1): while (by_cmd.send_angle_camera(0) == -1):
by_cmd.send_angle_camera(0) by_cmd.send_angle_camera(0)
self.record = CountRecord(3)
def find(self): def find(self):
# 目标检测红球 # 目标检测红球
ret = filter.find(tlabel.RBALL) ret = filter.find(tlabel.RBALL)
if ret > 0: if ret > 0:
utils.task_speed = 5 # TODO 连续两帧才开始减速
if self.record(tlabel.RBALL):
utils.task_speed = 5
return True return True
else: else:
return False return False
@@ -494,8 +553,8 @@ class get_rball():
time.sleep(0.5) time.sleep(0.5)
# 靠近塔 # 靠近塔
by_cmd.send_angle_scoop(20) by_cmd.send_angle_scoop(20)
by_cmd.send_distance_y(-10, 65) by_cmd.send_distance_y(-15, 50)
time.sleep(1) time.sleep(2)
calibrate_new(tlabel.RBALL,offset = 50, run = True) calibrate_new(tlabel.RBALL,offset = 50, run = True)
time.sleep(1) time.sleep(1)
logger.info("抓红球") logger.info("抓红球")
@@ -504,8 +563,8 @@ class get_rball():
by_cmd.send_position_axis_z(20, 170) by_cmd.send_position_axis_z(20, 170)
time.sleep(5) time.sleep(5)
by_cmd.send_angle_scoop(7) by_cmd.send_angle_scoop(7)
by_cmd.send_distance_y(10, 65) by_cmd.send_distance_y(15, 70)
time.sleep(0.5) time.sleep(1)
# while True: # while True:
# pass # pass
pass pass
@@ -609,12 +668,13 @@ class put_hanoi1():
# 根据方向初始化执行器位置 # 根据方向初始化执行器位置
if utils.direction is tlabel.RMARK: if utils.direction is tlabel.RMARK:
# FIXME 右侧的爪子会被 storage 挡住
by_cmd.send_position_axis_x(1, 0) by_cmd.send_position_axis_x(1, 0)
by_cmd.send_angle_claw_arm(36) by_cmd.send_angle_claw_arm(36)
by_cmd.send_angle_storage(0) by_cmd.send_angle_storage(0)
else: else:
by_cmd.send_position_axis_x(1, 150) by_cmd.send_position_axis_x(1, 150)
by_cmd.send_angle_claw_arm(220) by_cmd.send_angle_claw_arm(217)
by_cmd.send_angle_storage(55) by_cmd.send_angle_storage(55)
time.sleep(1.5) time.sleep(1.5)
@@ -622,13 +682,17 @@ class put_hanoi1():
if utils.direction_right > utils.direction_left: if utils.direction_right > utils.direction_left:
utils.direction = tlabel.RMARK utils.direction = tlabel.RMARK
by_cmd.send_angle_omega(-25,430) # by_cmd.send_angle_omega(-25,430)
# by_cmd.send_angle_omega(-45,238)
by_cmd.send_angle_omega(-55,194)
time.sleep(2) time.sleep(2)
while (by_cmd.send_angle_camera(90) == -1): while (by_cmd.send_angle_camera(90) == -1):
by_cmd.send_angle_camera(90) by_cmd.send_angle_camera(90)
else: else:
utils.direction = tlabel.LMARK utils.direction = tlabel.LMARK
by_cmd.send_angle_omega(25,430) # by_cmd.send_angle_omega(25,430)
# by_cmd.send_angle_omega(45,238)
by_cmd.send_angle_omega(55,194)
time.sleep(2) time.sleep(2)
while (by_cmd.send_angle_camera(180) == -1): while (by_cmd.send_angle_camera(180) == -1):
by_cmd.send_angle_camera(180) by_cmd.send_angle_camera(180)
@@ -641,10 +705,7 @@ class put_hanoi1():
class put_hanoi2(): class put_hanoi2():
def __init__(self): def __init__(self):
if utils.direction_right > utils.direction_left:
self.offset = 25
else:
self.offset = 15
self.pos_lp = cfg['put_hanoi2']['pos_lp'] self.pos_lp = cfg['put_hanoi2']['pos_lp']
self.pos_mp = cfg['put_hanoi2']['pos_mp'] self.pos_mp = cfg['put_hanoi2']['pos_mp']
self.pos_sp = 6 - self.pos_lp - self.pos_mp self.pos_sp = 6 - self.pos_lp - self.pos_mp
@@ -660,6 +721,10 @@ class put_hanoi2():
logger.info(f"setting hanoi pos_lp[{self.pos_lp}] pos_mp[{self.pos_mp}] pos_sp[{self.pos_sp}]") logger.info(f"setting hanoi pos_lp[{self.pos_lp}] pos_mp[{self.pos_mp}] pos_sp[{self.pos_sp}]")
def init(self): def init(self):
logger.info("物资盘点 2 初始化") logger.info("物资盘点 2 初始化")
if utils.direction == tlabel.RMARK:
self.offset = 25
else:
self.offset = 10
def find(self): def find(self):
ret, box = filter.get(self.target_label) ret, box = filter.get(self.target_label)
if ret: if ret:
@@ -670,33 +735,35 @@ class put_hanoi2():
return False return False
def exec(self): def exec(self):
logger.info(f"direction:{utils.direction.name}") logger.info(f"direction:{utils.direction.name}")
logger.info(f"offset:{self.offset}")
utils.task_speed = 0 utils.task_speed = 0
car_stop() car_stop()
time.sleep(0.5) time.sleep(0.5)
# by_cmd.send_distance_x(-8, cfg['put_hanoi2']['pos_gap'] - 30) # by_cmd.send_distance_x(-8, cfg['put_hanoi2']['pos_gap'] - 30)
time.sleep(1) time.sleep(1)
explore_calibrate_new(tlabel.LPILLER, offset = self.offset, run_direc = 1, run_speed = 6) explore_calibrate_new(tlabel.LPILLER, offset = self.offset, run_direc = 1, run_speed = 5)
logger.info("抓大平台") logger.info("抓大平台")
if utils.direction is tlabel.RMARK: if utils.direction is tlabel.RMARK:
by_cmd.send_position_axis_z(20, 40) # by_cmd.send_position_axis_z(20, 40)
by_cmd.send_position_axis_x(1, 160) # by_cmd.send_position_axis_x(1, 160)
by_cmd.send_angle_claw(63) # by_cmd.send_angle_claw(63)
time.sleep(1) # time.sleep(1)
by_cmd.send_angle_claw(85) # by_cmd.send_angle_claw(85)
time.sleep(4) # time.sleep(4)
by_cmd.send_angle_claw(50) # by_cmd.send_angle_claw(50)
time.sleep(4) # time.sleep(4)
by_cmd.send_position_axis_x(2, 80) # by_cmd.send_position_axis_x(2, 80)
by_cmd.send_distance_axis_z(20, 10) # # FIXME 多往回收一些 会挡住识别
# by_cmd.send_distance_axis_z(20, 10)
pass
else: else:
by_cmd.send_position_axis_z(20, 30) by_cmd.send_position_axis_z(20, 30)
by_cmd.send_position_axis_x(1, 40) by_cmd.send_position_axis_x(1, 50)
by_cmd.send_angle_claw(63) by_cmd.send_angle_claw(63)
time.sleep(1) time.sleep(1)
by_cmd.send_angle_claw(90) by_cmd.send_angle_claw(90)
time.sleep(4) time.sleep(2)
by_cmd.send_angle_claw(50) by_cmd.send_angle_claw(50)
time.sleep(2) time.sleep(2)
by_cmd.send_distance_axis_z(20, 20) by_cmd.send_distance_axis_z(20, 20)
@@ -704,48 +771,122 @@ class put_hanoi2():
by_cmd.send_position_axis_x(2, 160) by_cmd.send_position_axis_x(2, 160)
time.sleep(4) time.sleep(4)
pass pass
explore_calibrate_new(tlabel.TPLATFORM, offset = self.offset, run_direc = -1, run_speed = 6) explore_calibrate_new(tlabel.TPLATFORM, offset = self.offset, run_direc = -1, run_speed = 5)
logger.info("放大平台") logger.info("放大平台")
if utils.direction is tlabel.RMARK: if utils.direction is tlabel.RMARK:
by_cmd.send_distance_axis_z(20, -10) # by_cmd.send_distance_axis_z(20, -10)
# by_cmd.send_position_axis_x(2, 160)
# time.sleep(4)
# by_cmd.send_angle_claw(90)
# by_cmd.send_position_axis_x(1, 0)
pass
else:
by_cmd.send_position_axis_x(2, 60)
time.sleep(4)
by_cmd.send_distance_axis_z(20, -20)
time.sleep(1)
by_cmd.send_angle_claw(90)
time.sleep(1)
by_cmd.send_position_axis_x(1, 160)
explore_calibrate_new(tlabel.MPILLER, offset = self.offset, run_direc = 1, run_speed = 5)
logger.info("抓中平台")
if utils.direction is tlabel.RMARK:
# by_cmd.send_position_axis_z(20, 40)
# by_cmd.send_position_axis_x(1, 160)
# by_cmd.send_angle_claw(63)
# time.sleep(1)
# by_cmd.send_angle_claw(85)
# time.sleep(4)
# by_cmd.send_angle_claw(37)
# time.sleep(4)
# by_cmd.send_position_axis_x(2, 40)
# # FIXME 多往回收一些 会挡住识别
# by_cmd.send_distance_axis_z(20, 10)
pass
else:
by_cmd.send_position_axis_z(20, 30)
by_cmd.send_position_axis_x(1, 40)
by_cmd.send_angle_claw(63)
time.sleep(1)
by_cmd.send_angle_claw(85)
time.sleep(2)
by_cmd.send_angle_claw(40)
time.sleep(2)
by_cmd.send_distance_axis_z(20, 20)
time.sleep(2)
by_cmd.send_position_axis_x(2, 160) by_cmd.send_position_axis_x(2, 160)
time.sleep(4) time.sleep(4)
by_cmd.send_angle_claw(90) pass
by_cmd.send_position_axis_x(1, 0) explore_calibrate_new(tlabel.LPILLER, offset = self.offset, run_direc = -1, run_speed = 5)
logger.info("放中平台")
if utils.direction is tlabel.RMARK:
# by_cmd.send_distance_axis_z(20, -10)
# by_cmd.send_position_axis_x(2, 160)
# time.sleep(4)
# by_cmd.send_angle_claw(90)
# by_cmd.send_position_axis_x(1, 0)
pass
else: else:
by_cmd.send_distance_axis_z(20, 60)
time.sleep(4)
by_cmd.send_position_axis_x(2, 40) by_cmd.send_position_axis_x(2, 40)
time.sleep(4) time.sleep(4)
by_cmd.send_distance_axis_z(20, -20) by_cmd.send_distance_axis_z(20, -20)
time.sleep(2) time.sleep(1)
by_cmd.send_angle_claw(90) by_cmd.send_angle_claw(90)
time.sleep(2) time.sleep(1)
by_cmd.send_position_axis_x(1, 160) by_cmd.send_position_axis_x(1, 160)
explore_calibrate_new(tlabel.MPILLER, offset = self.offset, run_direc = 1, run_speed = 6) explore_calibrate_new(tlabel.SPILLER, offset = self.offset, run_direc = 1, run_speed = 5)
logger.info("抓中平台")
if utils.direction is tlabel.RMARK:
pass
else:
pass
explore_calibrate_new(tlabel.TPLATFORM, offset = self.offset, run_direc = -1, run_speed = 6)
logger.info("放中平台")
if utils.direction is tlabel.RMARK:
pass
else:
pass
explore_calibrate_new(tlabel.SPILLER, offset = self.offset, run_direc = 1, run_speed = 6)
logger.info("抓小平台") logger.info("抓小平台")
if utils.direction is tlabel.RMARK: if utils.direction is tlabel.RMARK:
# by_cmd.send_position_axis_z(20, 40)
# by_cmd.send_position_axis_x(1, 160)
# by_cmd.send_angle_claw(63)
# time.sleep(1)
# by_cmd.send_angle_claw(85)
# time.sleep(4)
# by_cmd.send_angle_claw(37)
# time.sleep(4)
# by_cmd.send_position_axis_x(2, 40)
# # FIXME 多往回收一些 会挡住识别
# by_cmd.send_distance_axis_z(20, 10)
pass pass
else: else:
by_cmd.send_position_axis_z(20, 30)
by_cmd.send_position_axis_x(1, 40)
by_cmd.send_angle_claw(63)
time.sleep(1)
by_cmd.send_angle_claw(85)
time.sleep(2)
by_cmd.send_angle_claw(30)
time.sleep(2)
by_cmd.send_distance_axis_z(20, 20)
time.sleep(2)
by_cmd.send_position_axis_x(2, 160)
time.sleep(4)
pass pass
explore_calibrate_new(tlabel.TPLATFORM, offset = self.offset, run_direc = -1, run_speed = 6) explore_calibrate_new(tlabel.MPILLER, offset = self.offset, run_direc = -1, run_speed = 5)
logger.info("放小平台") logger.info("放小平台")
if utils.direction is tlabel.RMARK: if utils.direction is tlabel.RMARK:
# by_cmd.send_distance_axis_z(20, -10)
# by_cmd.send_position_axis_x(2, 160)
# time.sleep(4)
# by_cmd.send_angle_claw(90)
# by_cmd.send_position_axis_x(1, 0)
pass pass
else: else:
pass by_cmd.send_distance_axis_z(20, 155)
time.sleep(4)
by_cmd.send_position_axis_x(2, 40)
time.sleep(4)
by_cmd.send_distance_axis_z(20, -20)
time.sleep(1)
by_cmd.send_angle_claw(90)
time.sleep(1)
by_cmd.send_position_axis_x(1, 160)
time.sleep(2)
# while True: # while True:
# pass # pass
@@ -754,6 +895,8 @@ class put_hanoi2():
class put_hanoi3(): class put_hanoi3():
def init(self): def init(self):
by_cmd.send_position_axis_z(20, 130)
time.sleep(3)
logger.info("完成任务,爪回左侧") logger.info("完成任务,爪回左侧")
by_cmd.send_angle_claw_arm(128) by_cmd.send_angle_claw_arm(128)
time.sleep(0.5) time.sleep(0.5)
@@ -799,7 +942,7 @@ class move_area2():
ret, box = filter.get(tlabel.SHELTER) ret, box = filter.get(tlabel.SHELTER)
if ret: if ret:
error = (box[0][2] + box[0][0] - 320) / 2 + self.offset error = (box[0][2] + box[0][0] - 320) / 2 + self.offset
if abs(error) < 10: if abs(error) < 20:
return 5000 return 5000
return False return False
def exec(self): def exec(self):

View File

@@ -276,7 +276,31 @@ class LLM:
self.messages.append(self.resp.to_message()) self.messages.append(self.resp.to_message())
return self.resp.get_result() return self.resp.get_result()
class CountRecord:
def __init__(self, stop_count=2) -> None:
self.last_record = None
self.count = 0
self.stop_cout = stop_count
def get_count(self, val):
try:
if val == self.last_record:
self.count += 1
else:
self.count=0
self.last_record = val
return self.count
except Exception as e:
print(e)
def __call__(self, val):
self.get_count(val)
if self.count >= self.stop_cout:
if type(val) == bool:
return val
return True
else:
return False