import time import sys import os import math # 添加父目录到路径,以便能够导入utils sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from base_move.move_base_hori_line import move_to_hori_line, arc_turn_around_hori_line, align_to_horizontal_line from utils.detect_track import detect_horizontal_track_edge from base_move.move_base_hori_line import calculate_distance_to_line from base_move.go_straight import go_straight from utils.log_helper import LogHelper, get_logger, section, info, debug, warning, error, success, timing # 创建本模块特定的日志记录器 logger = get_logger("任务1") observe = False def run_task_1(ctrl, msg): section('任务1:寻找横线并绕行', "启动") info('开始执行任务1...', "启动") # v2 section('任务1-1:转弯并扫描QR码', "移动") # 在 arc_turn_around_hori_line 中启用 QR 码扫描 turn_success, qr_result = arc_turn_around_hori_line( ctrl=ctrl, msg=msg, angle_deg=85, left=False, observe=observe, scan_qrcode=True, # 启用 QR 码扫描 qr_check_interval=0.3 # 每 0.3 秒检查一次扫描结果 ) if qr_result: success(f"在任务1-1中成功扫描到QR码: {qr_result}", "扫描") else: warning("任务1-1中未能扫描到任何QR码", "警告") section('任务1-2:移动到横线', "移动") # 执行常规的移动操作,不需要 QR 码扫描 move_to_hori_line(ctrl, msg, target_distance=1, observe=observe) section('任务1-3:转弯', "旋转") # direction = True if qr_result == 'A-1' else False # TODO turn_success = arc_turn_around_hori_line( ctrl=ctrl, msg=msg, angle_deg=170, target_distance=0.4, # TODO 优化这里的参数 left=False, # direction, pass_align=True, observe=observe, # TODO clear bad_big_angle_corret=True ) section('任务1-4:直线移动', "移动") move_distance = 0.4 go_straight(ctrl, msg, distance=move_distance, speed=0.5, observe=observe) # move_to_hori_line(ctrl, msg, target_distance=0.6, observe=observe) section('任务1-5:模拟装货', "停止") info('机器人躺下,模拟装货过程', "信息") start_time = time.time() ctrl.base_msg.lie_down(wait_time=3000) # TODO 比赛时改成 5s elapsed = time.time() - start_time timing("装货过程", elapsed) # 站起来 info('机器人站起来,准备继续任务', "信息") ctrl.base_msg.stand_up() section('任务1-6:返回', "移动") go_straight(ctrl, msg, distance=-move_distance + 0.1, speed=0.5, observe=observe) success("任务1完成", "完成")