mi-task/task_1/task_1.py

81 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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完成", "完成")