🎏 task-1 v0.2

This commit is contained in:
havoc420ubuntu 2025-05-22 05:27:13 +00:00
parent c47213e8a3
commit 924a8e07c6
6 changed files with 48 additions and 192 deletions

View File

@ -7,7 +7,10 @@ import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from utils.detect_track import detect_horizontal_track_edge, detect_dual_track_lines, detect_left_side_track
from utils.detect_track import (
detect_horizontal_track_edge, detect_horizontal_track_edge_v2,
detect_dual_track_lines, detect_left_side_track
)
from base_move.turn_degree import turn_degree
from base_move.go_straight import go_straight
from utils.log_helper import LogHelper, get_logger, section, info, debug, warning, error, success, timing
@ -15,7 +18,7 @@ from utils.log_helper import LogHelper, get_logger, section, info, debug, warnin
# 创建此模块特定的日志记录器
logger = get_logger("横线移动")
def align_to_horizontal_line(ctrl, msg, observe=False, max_attempts=3):
def align_to_horizontal_line(ctrl, msg, observe=False, max_attempts=3, detect_func_version=1):
"""
控制机器人旋转到横向线水平的位置
@ -41,9 +44,15 @@ def align_to_horizontal_line(ctrl, msg, observe=False, max_attempts=3):
while attempts < max_attempts and not aligned:
section(f"尝试校准横线 {attempts+1}/{max_attempts}", "校准")
# 检测横向线边缘
edge_point, edge_info = detect_horizontal_track_edge(ctrl.image_processor.get_current_image(), observe=observe, delay=1000 if observe else 0, save_log=True)
# 检测横向线边缘; 不同版本
if detect_func_version == 1:
edge_point, edge_info = detect_horizontal_track_edge(ctrl.image_processor.get_current_image(), observe=observe, delay=1000 if observe else 0, save_log=True)
elif detect_func_version == 2:
edge_point, edge_info = detect_horizontal_track_edge_v2(ctrl.image_processor.get_current_image(), observe=observe, delay=1000 if observe else 0, save_log=True)
else:
error("未指定检测版本,请检查参数", "失败")
return False
print('😺', edge_info)
if edge_point is None or edge_info is None:
@ -291,7 +300,7 @@ def go_straight_by_hori_line(ctrl, msg, distance=0.5, speed=0.5, observe=False):
"""
# 首先校准到水平
section("校准到横向线水平", "校准")
aligned = align_to_horizontal_line(ctrl, msg, observe=observe)
aligned = align_to_horizontal_line(ctrl, msg, detect_func_version=2, observe=observe)
if not aligned:
error("无法校准到横向线水平,停止移动", "停止")
@ -301,7 +310,7 @@ def go_straight_by_hori_line(ctrl, msg, distance=0.5, speed=0.5, observe=False):
go_straight(ctrl, msg, distance=distance, speed=speed, observe=observe)
def move_to_hori_line(ctrl, msg, target_distance=0.5, observe=False):
def move_to_hori_line(ctrl, msg, target_distance=0.5, absolute_deg=200, observe=False):
"""
控制机器人校准并移动到横向线前的指定距离
@ -316,7 +325,10 @@ def move_to_hori_line(ctrl, msg, target_distance=0.5, observe=False):
"""
# 首先校准到水平
section("校准到横向线水平", "校准")
aligned = align_to_horizontal_line(ctrl, msg, observe=observe)
if absolute_deg < 200:
aligned = turn_degree(ctrl, msg, absolute_deg, absolute=True)
else:
aligned = align_to_horizontal_line(ctrl, msg, observe=observe)
if not aligned:
error("无法校准到横向线水平,停止移动", "停止")
@ -425,11 +437,14 @@ def move_to_hori_line(ctrl, msg, target_distance=0.5, observe=False):
def arc_turn_around_hori_line(ctrl, msg, angle_deg=90, target_distance=0.2,
pass_align=False,
radius=None,
radius=None,
min_radius=0.1,
max_radius=5,
scan_qrcode=False,
qr_check_interval=0.3,
observe=False,
bad_big_angle_corret=False):
bad_big_angle_corret=False,
no_end_reset=False,):
"""
对准前方横线然后以计算出来的距离为半径做一个向左或向右的圆弧旋转
参数:
@ -443,6 +458,7 @@ def arc_turn_around_hori_line(ctrl, msg, angle_deg=90, target_distance=0.2,
qr_check_interval: QR码检查间隔时间()默认为0.3
bad_big_angle_corret: 是否对大角度错误进行修正默认为False # TODO clear
no_end_reset: 是否在旋转完成后不进行位置重置默认为False
返回:
bool或元组: 如果scan_qrcode为False返回bool表示是否成功完成操作
如果scan_qrcode为True返回(bool, str)元组表示(是否成功完成操作, QR码扫描结果)
@ -538,8 +554,7 @@ def arc_turn_around_hori_line(ctrl, msg, angle_deg=90, target_distance=0.2,
w = math.copysign(base_w, angle_deg) # 保持角速度与角度同号
# 确保r有一个最小值避免速度过低
min_radius = 0.2 # 最小半径,单位:米
effective_r = max(r, min_radius)
effective_r = min(max_radius, max(r, min_radius))
# 线速度必须与角速度和半径的关系一致v = w * r
# 这样才能保证走圆弧
@ -548,7 +563,7 @@ def arc_turn_around_hori_line(ctrl, msg, angle_deg=90, target_distance=0.2,
info(f"开始移动圆弧,半径: {effective_r:.3f}米, 线速度: {v:.3f}m/s, 角速度: {w:.3f}rad/s")
if observe:
if effective_r != r:
warning(f"注意: 实际半径 {r:.3f} 太小,使用最小半径 {effective_r:.3f}米 计算速度", "警告")
warning(f"注意: 实际半径 {r:.3f},使用半径 {effective_r:.3f}米 计算速度", "警告")
t = abs(angle_rad / w) # 运动时间,取绝对值保证为正
@ -855,7 +870,7 @@ def arc_turn_around_hori_line(ctrl, msg, angle_deg=90, target_distance=0.2,
if abs_angle_deg >= 170:
adjustment_threshold = 10.0 # 大角度旋转使用更大的微调阈值,因为初步旋转已经确保大致方向正确
if angle_error > adjustment_threshold: # 如果误差超过阈值
if angle_error > adjustment_threshold and not no_end_reset: # 如果误差超过阈值
if observe:
warning(f"角度误差: {angle_error:.2f}度,进行微调", "角度")

View File

@ -1,67 +0,0 @@
2025-05-19 20:41:09 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_204109_537087.jpg
2025-05-19 20:41:09 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_204109_537087', 'edge_point': (397, 816), 'distance_to_center': -563, 'slope': 0.0, 'distance_to_bottom': 264.0, 'intersection_point': (960, 816), 'is_truncated': False}
2025-05-19 20:44:06 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-19 20:44:07 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-19 20:44:08 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-19 20:44:09 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-19 20:44:10 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-19 20:44:11 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 15 条直线
2025-05-19 20:44:12 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 13 条水平线
2025-05-19 20:44:13 | DEBUG | utils.log_helper - 👁️ 步骤7: 找到边缘点 (397, 816)
2025-05-19 20:44:14 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-19 20:44:15 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_204415_945888.jpg
2025-05-19 20:44:15 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_204415_945888', 'edge_point': (397, 816), 'distance_to_center': -563, 'slope': 0.0, 'distance_to_bottom': 264.0, 'intersection_point': (960, 816), 'is_truncated': False}
2025-05-19 20:44:57 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-19 20:44:58 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-19 20:44:59 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-19 20:45:00 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-19 20:45:01 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-19 20:45:02 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 10 条直线
2025-05-19 20:45:03 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 8 条水平线
2025-05-19 20:45:04 | DEBUG | utils.log_helper - 👁️ 步骤7: 找到边缘点 (831, 971)
2025-05-19 20:45:05 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-19 20:45:06 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_204506_674753.jpg
2025-05-19 20:45:06 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_204506_674753', 'edge_point': (831, 971), 'distance_to_center': -129, 'slope': -0.07004830917874397, 'distance_to_bottom': 118.036231884058, 'intersection_point': (960, 961), 'is_truncated': False}
2025-05-19 20:45:37 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-19 20:45:39 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-19 20:45:40 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-19 20:45:41 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-19 20:45:42 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-19 20:45:43 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 17 条直线
2025-05-19 20:45:44 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 12 条水平线
2025-05-19 20:45:45 | DEBUG | utils.log_helper - 👁️ 步骤7: 找到边缘点 (923, 849)
2025-05-19 20:45:46 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-19 20:45:47 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_204547_188654.jpg
2025-05-19 20:45:47 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_204547_188654', 'edge_point': (923, 849), 'distance_to_center': -37, 'slope': 0.0, 'distance_to_bottom': 231.0, 'intersection_point': (960, 849), 'is_truncated': False}
2025-05-19 20:47:53 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-19 20:47:55 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-19 20:47:56 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-19 20:47:57 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-19 20:47:58 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-19 20:47:59 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 17 条直线
2025-05-19 20:48:00 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 12 条水平线
2025-05-19 20:48:01 | DEBUG | utils.log_helper - 👁️ 步骤7: 找到边缘点 (923, 849)
2025-05-19 20:48:02 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-19 20:48:03 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_204803_276122.jpg
2025-05-19 20:48:03 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_204803_276122', 'edge_point': (923, 849), 'distance_to_center': -37, 'slope': 0.0, 'distance_to_bottom': 231.0, 'intersection_point': (960, 849), 'is_truncated': False}
2025-05-19 20:50:32 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-19 20:50:33 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-19 20:50:34 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-19 20:50:35 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-19 20:50:36 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-19 20:50:37 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 25 条直线
2025-05-19 20:50:38 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 18 条水平线
2025-05-19 20:50:39 | DEBUG | utils.log_helper - 👁️ 步骤7: 找到边缘点 (92, 1077)
2025-05-19 20:50:40 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-19 20:50:41 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_205041_583040.jpg
2025-05-19 20:50:41 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_205041_583040', 'edge_point': (92, 1077), 'distance_to_center': -868, 'slope': -0.07008086253369272, 'distance_to_bottom': 63.83018867924534, 'intersection_point': (960, 1016), 'is_truncated': False}
2025-05-19 21:24:41 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-19 21:24:42 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-19 21:24:43 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-19 21:24:44 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-19 21:24:45 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-19 21:24:46 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 18 条直线
2025-05-19 21:24:47 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 3 条水平线
2025-05-19 21:24:48 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-19 21:24:49 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250519_212449_369767.jpg
2025-05-19 21:24:49 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250519_212449_369767', 'edge_point': (540, 907), 'distance_to_center': -420, 'slope': -0.12202852614896989, 'distance_to_bottom': 224.25198098256737, 'intersection_point': (960, 855), 'score': 0.5611365011519962, 'valid': True, 'reason': ''}

View File

@ -1,10 +0,0 @@
2025-05-20 09:24:31 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-20 09:24:32 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-20 09:24:33 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-20 09:24:34 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-20 09:24:35 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-20 09:24:36 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 18 条直线
2025-05-20 09:24:37 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 3 条水平线
2025-05-20 09:24:38 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-20 09:24:39 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250520_092439_823936.jpg
2025-05-20 09:24:39 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250520_092439_823936', 'edge_point': (540, 907), 'distance_to_center': -420, 'slope': -0.12202852614896989, 'distance_to_bottom': 224.25198098256737, 'intersection_point': (960, 855), 'score': 0.5611365011519962, 'valid': True, 'reason': ''}

View File

@ -1,90 +0,0 @@
2025-05-22 12:20:16 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:20:18 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:20:19 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:20:20 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:20:21 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:20:22 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 8 条直线
2025-05-22 12:20:23 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 5 条水平线 (下方: 5, 上方: 0)
2025-05-22 12:20:24 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:20:24 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:20:25 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_122025_111891.jpg
2025-05-22 12:20:25 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_122025_111891', 'edge_point': (1919, 862), 'distance_to_center': 959, 'slope': 0.03486394557823129, 'distance_to_bottom': 251.43452380952385, 'intersection_point': (960, 828), 'score': 0.6679311933106575, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}
2025-05-22 12:20:38 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:20:39 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:20:40 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:20:41 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:20:42 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:20:43 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 8 条直线
2025-05-22 12:20:44 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 5 条水平线 (下方: 5, 上方: 0)
2025-05-22 12:20:45 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:20:45 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:20:47 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_122046_987809.jpg
2025-05-22 12:20:47 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_122046_987809', 'edge_point': (1919, 862), 'distance_to_center': 959, 'slope': 0.03486394557823129, 'distance_to_bottom': 251.43452380952385, 'intersection_point': (960, 828), 'score': 0.6679311933106575, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}
2025-05-22 12:21:15 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:21:16 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:21:17 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:21:18 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:21:19 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:21:20 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 8 条直线
2025-05-22 12:21:21 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 5 条水平线 (下方: 5, 上方: 0)
2025-05-22 12:21:22 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:21:22 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:21:23 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_122123_802326.jpg
2025-05-22 12:21:23 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_122123_802326', 'edge_point': (1919, 862), 'distance_to_center': 959, 'slope': 0.03486394557823129, 'distance_to_bottom': 251.43452380952385, 'intersection_point': (960, 828), 'score': 0.6679311933106575, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}
2025-05-22 12:22:26 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:22:28 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:22:29 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:22:30 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:22:31 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:22:32 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 8 条直线
2025-05-22 12:22:33 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 5 条水平线 (下方: 5, 上方: 0)
2025-05-22 12:22:34 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:22:34 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:22:35 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_122235_241410.jpg
2025-05-22 12:22:35 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_122235_241410', 'edge_point': (1919, 862), 'distance_to_center': 959, 'slope': 0.03486394557823129, 'distance_to_bottom': 251.43452380952385, 'intersection_point': (960, 828), 'score': 0.6679311933106575, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}
2025-05-22 12:24:10 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:24:11 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:24:12 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:24:13 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:24:14 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:24:15 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 28 条直线
2025-05-22 12:24:16 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 6 条水平线 (下方: 6, 上方: 0)
2025-05-22 12:24:17 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:24:17 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:24:18 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_122418_738782.jpg
2025-05-22 12:24:18 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_122418_738782', 'edge_point': (91, 1078), 'distance_to_center': -869, 'slope': -0.07092198581560284, 'distance_to_bottom': 63.631205673758814, 'intersection_point': (960, 1016), 'score': 0.8014868667518458, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}
2025-05-22 12:24:54 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:24:55 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:24:56 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:24:57 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:24:58 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:24:59 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 11 条直线
2025-05-22 12:25:00 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 1 条水平线 (下方: 1, 上方: 0)
2025-05-22 12:25:01 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:25:01 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:25:02 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_122502_339369.jpg
2025-05-22 12:25:02 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_122502_339369', 'edge_point': (1439, 899), 'distance_to_center': 479, 'slope': -0.07083333333333333, 'distance_to_bottom': 147.07083333333333, 'intersection_point': (960, 932), 'score': 0.5594172208352652, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}
2025-05-22 12:33:02 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_123302_872381.jpg
2025-05-22 12:33:02 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_123302_872381', 'edge_point': (320, 1009), 'distance_to_center': -640, 'slope': -0.07331047777324741, 'distance_to_bottom': 117.91870577487839, 'intersection_point': (960, 962)}
2025-05-22 12:33:26 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_123326_235741.jpg
2025-05-22 12:33:26 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_123326_235741', 'edge_point': (320, 1009), 'distance_to_center': -640, 'slope': -0.07331047777324741, 'distance_to_bottom': 117.91870577487839, 'intersection_point': (960, 962)}
2025-05-22 12:34:09 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:34:10 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:34:10 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:34:11 | DEBUG | utils.log_helper - 🐞 正在处理底部边缘点
2025-05-22 12:34:12 | DEBUG | utils.log_helper - 🐞 显示拟合线段
2025-05-22 12:34:13 | DEBUG | utils.log_helper - 👁️ 步骤5: 找到边缘点 (320, 1009)
2025-05-22 12:34:14 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:34:14 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_123414_979258.jpg
2025-05-22 12:34:14 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_123414_979258', 'edge_point': (320, 1009), 'distance_to_center': -640, 'slope': -0.07331047777324741, 'distance_to_bottom': 117.91870577487839, 'intersection_point': (960, 962)}
2025-05-22 12:34:34 | DEBUG | utils.log_helper - 🐞 步骤1: 原始图像已加载
2025-05-22 12:34:35 | DEBUG | utils.log_helper - 🐞 步骤2: 创建黄色掩码
2025-05-22 12:34:36 | DEBUG | utils.log_helper - 🐞 步骤3: 提取黄色部分
2025-05-22 12:34:36 | DEBUG | utils.log_helper - 🐞 检测底部和顶部边缘点
2025-05-22 12:34:37 | DEBUG | utils.log_helper - 🐞 步骤4: 边缘检测
2025-05-22 12:34:38 | DEBUG | utils.log_helper - 🐞 步骤5: 检测到 11 条直线
2025-05-22 12:34:39 | DEBUG | utils.log_helper - 🐞 步骤6: 找到 1 条水平线 (下方: 1, 上方: 0)
2025-05-22 12:34:40 | DEBUG | utils.log_helper - 🐞 选择下方水平线
2025-05-22 12:34:40 | DEBUG | utils.log_helper - 🐞 显示边缘斜率和中线交点
2025-05-22 12:34:41 | INFO | utils.log_helper - 保存横向边缘检测结果图像到: logs/image/horizontal_edge_20250522_123441_043307.jpg
2025-05-22 12:34:41 | INFO | utils.log_helper - 横向边缘检测结果: {'timestamp': '20250522_123441_043307', 'edge_point': (1439, 899), 'distance_to_center': 479, 'slope': -0.07083333333333333, 'distance_to_bottom': 147.07083333333333, 'intersection_point': (960, 932), 'score': 0.5594172208352652, 'valid': True, 'reason': '', 'is_lower_line': array([ True, True, True, True])}

View File

@ -50,7 +50,7 @@ def run_task_1(ctrl, msg):
section('任务1-2移动到横线', "移动")
# 执行常规的移动操作,不需要 QR 码扫描
move_to_hori_line(ctrl, msg, target_distance=1, observe=observe)
move_to_hori_line(ctrl, msg, target_distance=1.1, observe=observe)
section('任务1-3转弯', "旋转")
direction = False # if res['qr_result'] == 'A-2' else True
@ -58,12 +58,14 @@ def run_task_1(ctrl, msg):
ctrl=ctrl,
msg=msg,
angle_deg=-170, # 负值表示右转
target_distance=0.8,
target_distance=0.6,
min_radius=0.3,
max_radius=0.4,
#
pass_align=True,
observe=observe,
# TODO clear
bad_big_angle_corret=True
bad_big_angle_corret=True,
)
if turn_success:
@ -73,7 +75,7 @@ def run_task_1(ctrl, msg):
return
section('任务1-4直线移动', "移动")
move_distance = 0.5
move_distance = 0.3
move_speed = 0.5
if not direction:
# TODO to check
@ -93,7 +95,7 @@ def run_task_1(ctrl, msg):
ctrl.base_msg.stand_up()
section('任务1-6返回', "移动")
go_straight(ctrl, msg, distance=-(move_distance + res['radius'] + 0.2), speed=0.3, observe=observe)
go_straight(ctrl, msg, distance=-(move_distance + res['radius'] + 0.3), observe=observe)
# turn and back
turn_degree(ctrl, msg, degree=-90)
@ -102,15 +104,16 @@ def run_task_1(ctrl, msg):
turn_success, res = arc_turn_around_hori_line(
ctrl=ctrl,
msg=msg,
radius=res['radius'] * 2,
angle_deg=85,
radius=res['radius'] * 2 + 0.3,
angle_deg=90,
#
pass_align=True,
observe=observe
observe=observe,
no_end_reset=True,
)
section('任务1-8直线移动', "移动")
move_to_hori_line(ctrl, msg, target_distance=0.4, observe=observe)
move_to_hori_line(ctrl, msg, target_distance=0.35, absolute_deg=90, observe=observe)
section('任务1-990度旋转', "旋转")
turn_degree(ctrl, msg, degree=0, absolute=True) # TODO
@ -119,4 +122,3 @@ def run_task_1(ctrl, msg):
# TODO
success("任务1完成", "完成")

View File

@ -19,7 +19,7 @@ def detect_horizontal_track_edge(image, observe=False, delay=1000, save_log=True
edge_point: 赛道前方边缘点的坐标 (x, y)
edge_info: 边缘信息字典
"""
# observe = False # TSET
observe = False # TEST
# 如果输入是字符串(文件路径),则加载图像
if isinstance(image, str):
img = cv2.imread(image)
@ -311,6 +311,12 @@ def detect_horizontal_track_edge(image, observe=False, delay=1000, save_log=True
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S_%f")
log_dir = "logs/image"
os.makedirs(log_dir, exist_ok=True)
# origin image
origin_image_path = os.path.join(log_dir, f"origin_horizontal_edge_{timestamp}.jpg")
cv2.imwrite(origin_image_path, img)
info(f"保存原始图像到: {origin_image_path}", "日志")
img_path = os.path.join(log_dir, f"horizontal_edge_{timestamp}.jpg")
cv2.imwrite(img_path, result_img)
info(f"保存横向边缘检测结果图像到: {img_path}", "日志")