垂直极限.Vertical Limit

本文探讨了登山过程中的各种哲学思考与团队合作的重要性。强调了正确的决定、关键时刻的支持、以及面对挑战时的心态等核心主题。

有人登山不是为了金钱和荣誉。

 

即使当初是正确的,后来也可能会悔恨。

 

优秀的领队,要坚决执行正确的决定。

 

拥有最精良的装备,和没有一样。

 

有人在关键时候帮助你,他就是兄弟。

 

雪崩之后的平静,就像什么都没发生过一样。

 

圣母峰未必是世界最高峰。

import sensor import image import time import math import pyb # 初始化摄像头 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) # 320x240分辨率 sensor.set_auto_gain(False) # 关闭自动增益 sensor.set_auto_whitebal(False) # 关闭自动白平衡 sensor.skip_frames(time=1000) # 等待设置生效 # 初始化串口通信(连接云台控制器) uart = pyb.UART(3, 115200, timeout_char=1000) # 波特率115200,根据实际连接调整 # 矩形检测参数 RECT_THRESHOLD = 3000 # 矩形检测阈值(值越大检测越严格) MIN_RECT_AREA = 5000 # 最小矩形面积(像素) ASPECT_RATIO = math.sqrt(2) # A4纸长宽比≈1.414 ASPECT_TOLERANCE = 0.2 # 长宽比容差 # 云台控制参数 MAX_OFFSET_X = 160 # 水平方向最大偏移量(图像中心到边缘) MAX_OFFSET_Y = 120 # 垂直方向最大偏移量 SMOOTHING_FACTOR = 0.2 # 平滑滤波系数 # 历史位置记录(用于平滑滤波) prev_offset_x = 0 prev_offset_y = 0 def calculate_center(rect): """计算矩形中心点坐标""" # 使用矩形的x,y,w,h属性计算中心 center_x = rect.x() + rect.w() // 2 center_y = rect.y() + rect.h() // 2 return center_x, center_y def send_to_gimbal(offset_x, offset_y): """通过串口发送偏移量给云台控制器""" # 使用二进制协议提高传输效率 data = bytearray([0xFF, (offset_x >> 8) & 0xFF, offset_x & 0xFF, (offset_y >> 8) & 0xFF, offset_y & 0xFF]) uart.write(data) # 调试信息(可选) print("Offset: ({}, {})".format(offset_x, offset_y)) def is_a4_paper(rect): """判断矩形是否为A4纸(根据长宽比)""" w, h = rect.w(), rect.h() if w < h: # 确保w为长边 w, h = h, w aspect = w / h return abs(aspect - ASPECT_RATIO) < ASPECT_TOLERANCE def get_rect_area(rect): """计算矩形面积(w*h)""" return rect.w() * rect.h() while True: img = sensor.snapshot() # 增强图像对比度(提高不同光照条件下的稳定性) img.histeq(adaptive=True, clip_limit=3.0) # 检测矩形 rects = img.find_rects(threshold=RECT_THRESHOLD) if rects: # 筛选符合条件的矩形(A4纸) valid_rects = [] for rect in rects: area = get_rect_area(rect) if area > MIN_RECT_AREA and is_a4_paper(rect): valid_rects.append(rect) if valid_rects: # 选择面积最大的矩形 largest_rect = max(valid_rects, key=get_rect_area) # 计算中心点坐标 center_x, center_y = calculate_center(largest_rect) # 绘制矩形和中心点 img.draw_rectangle(largest_rect.rect(), color=(255, 0, 0)) # 红色边框 img.draw_cross(center_x, center_y, color=(0, 255, 0), size=10) # 绿色中心点 # 计算与画面中心的偏移量 img_center_x = img.width() // 2 img_center_y = img.height() // 2 offset_x = center_x - img_center_x offset_y = center_y - img_center_y # 应用平滑滤波 filtered_x = int(SMOOTHING_FACTOR * offset_x + (1 - SMOOTHING_FACTOR) * prev_offset_x) filtered_y = int(SMOOTHING_FACTOR * offset_y + (1 - SMOOTHING_FACTOR) * prev_offset_y) prev_offset_x = filtered_x prev_offset_y = filtered_y # 发送控制指令给云台 send_to_gimbal(filtered_x, filtered_y) else: # 未检测到有效矩形,发送停止信号 send_to_gimbal(0, 0) else: # 未检测到任何矩形,发送停止信号 send_to_gimbal(0, 0) time.sleep_ms(50) # 控制循环频率约20Hz 请在未检测到矩形时,让云台进行寻找,帮我生成新的代码
08-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值