网站建设规划书应当包含哪些内容,济宁住房和城乡建设厅网站首页,上海工作单位名称大全,大连甘井子区教育局官网2023年电赛E题报告模板#xff08;K210版#xff09;--可直接使用 本文链接#xff1a;2023年电赛E题报告模板#xff08;K210版#xff09;--可直接使用_皓悦编程记的博客-CSDN博客 解决激光笔在黑色区域无法识别
本文链接#xff1a;
2023 电赛 E 题 激光笔识别有误-…2023年电赛E题报告模板K210版--可直接使用 本文链接2023年电赛E题报告模板K210版--可直接使用_皓悦编程记的博客-CSDN博客 解决激光笔在黑色区域无法识别
本文链接
2023 电赛 E 题 激光笔识别有误--使用K210/Openmv/树莓派/Jetson nano实现激光笔在黑色区域的目标检测_牧子川的博客-CSDN博客 问题第二题测量的pwm误差跟舵机跑起来不一样是什么原因啊
解决方法动态补偿 问题激光在黑胶带上就识别不出来
解决方法查看该链接有方法
2023 电赛 E 题 激光笔识别有误--使用K210/Openmv/树莓派/Jetson nano实现激光笔在黑色区域的目标检测_牧子川的博客-CSDN博客 就这种现象 现在三种解决方案可以尝试
第一种就是把曝光调到极致这样其他地方都是黑的方便识别
第二种就是用浅色广告布不要用黑胶带
第三种就是直接用深度学习自己训练
第三种我觉得就是这个题的考点 问题我的显示没有点定义distance_cm、H_FOV这两个值要怎么解决
解决根据代码自查
import sensor, image, math, pyb # 初始化相机 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time2000) # 设置阈值用于颜色分割 black_threshold (0, 45, -30, 40, -30, 30) # 根据实际情况调整阈值 # 舵机参数 servo_pan_pin 1 # 舵机1的引脚编号 servo_tilt_pin 2 # 舵机2的引脚编号 servo_pan pyb.Servo(servo_pan_pin) # 初始化舵机1 servo_tilt pyb.Servo(servo_tilt_pin) # 初始化舵机2 servo_speed 50 # 舵机转动速度0-100越大越快 servo_pan_range (0, 180) # 舵机1转动范围角度 servo_tilt_range (0, 180) # 舵机2转动范围角度 # 控制舵机沿着矩形框移动一圈并回到中心点 for angle in range(servo_pan_range[0], servo_pan_range[1], servo_speed): servo_pan.angle(angle) # 控制舵机1水平旋转 servo_tilt.angle(angle) # 控制舵机2垂直旋转 pyb.delay(100) # 延时一段时间控制舵机转动速度 # 将舵机回到中心点 servo_pan.angle((servo_pan_range[0] servo_pan_range[1]) // 2) servo_tilt.angle((servo_tilt_range[0] servo_tilt_range[1]) // 2) # 寻找矩形函数返回第二大的矩形区域 def find_second_largest_rectangle(blobs): max_area 0 max_blob None second_max_area 0 second_max_blob None for blob in blobs: area blob.area() if area max_area: second_max_area max_area second_max_blob max_blob max_area area max_blob blob elif area second_max_area: second_max_area area second_max_blob blob return second_max_blob while True: img sensor.snapshot().lens_corr(1.8) # 获取图像 blobs img.find_blobs([black_threshold], pixels_threshold200, area_threshold200) if blobs: # 寻找第二大的矩形区域 second_max_blob find_second_largest_rectangle(blobs) if second_max_blob: img.draw_rectangle(second_max_blob.rect(), color(255, 0, 0), thickness4) # 绘制第二大的矩形框颜色为红色 # 获取矩形框的中心点坐标 x, y second_max_blob.cx(), second_max_blob.cy() # 计算矩形框的长度和宽度单位厘米 width_cm 2 * distance_cm * math.tan(math.radians(H_FOV / 2)) * (second_max_blob.w() / img.width()) 问题openmv能 不用pid直接从中心坐标跑到矩形的一个顶点吗
解决不能 问题arduino接收到原点坐标如何控制激光笔移动到原点啊思路是什么啊?
解决把舵机移动范围划分出来每一格代表多少 然后移动 问题用arduino实现与openmv的通信
解决
OpenMV上的代码Python python import sensor, image, time, pyb # 初始化串口 uart pyb.UART(3, 9600) while(True): # 拍摄图像 img sensor.snapshot() # 在图像上绘制一个矩形 img.draw_rectangle(50, 50, 100, 100) # 将图像转换为灰度图像 img_gray img.to_grayscale() # 计算矩形区域的平均亮度 avg_brightness img_gray.get_statistics().mean() # 将平均亮度值发送到Arduino uart.write(str(avg_brightness) apos;\napos;) # 延迟一段时间 time.sleep(100) 在Arduino上的代码C/C cpp void setup() { // 初始化串口 Serial.begin(9600); } void loop() { if (Serial.available()) { // 读取串口数据 String data Serial.readStringUntil(apos;\napos;); // 将字符串转换为浮点数 float brightness data.toFloat(); // 打印接收到的亮度值 Serial.print(Received brightness: ); Serial.println(brightness); // 延迟一段时间 delay(100); } } OpenMV通过串口将图像的平均亮度值发送到Arduino然后Arduino接收并打印接收到的亮度 问题open mvF7PLUS能不能使用pwm
解决不能 问题为啥我链接上openmv 就变成变成一个角度之后就不动了
解决首先要能单独控制舵机 旋转任意角度
jetson(1404551917) 2023/8/3 17:21:16 import time import machine # 配置舵机引脚和PWM pwm_pin machine.Pin(P7, machine.Pin.OUT) pwm machine.PWM(pwm_pin, freq50) # 使用50Hz的频率 # 设置舵机的转动范围可以根据舵机型号进行调整 min_duty 30 # 最小占空比对应最小角度 max_duty 130 # 最大占空比对应最大角度 # 控制舵机转动到指定角度 def set_servo_angle(angle): # 将角度转换为对应的占空比 duty min_duty (max_duty - min_duty) * angle / 180.0 pwm.duty(int(duty)) # 示例让舵机在0°和180°之间来回转动 while True: for angle in range(0, 181, 10): set_servo_angle(angle) time.sleep(0.5) for angle in range(180, -1, -10): set_servo_angle(angle) time.sleep(0.5) 使用PWM信号控制舵机的转动角度 问题第四题的思路
解决你要使用k210得到A4靶的旋转角度 摄像头检测A4靶纸的位置和角度信息。 将检测到的位置和角度信息与舵机的控制代码结合使之执行相应的旋转动作 示例代码 import machine import time # 定义舵机控制引脚 servo_pin machine.Pin(12, machine.Pin.OUT) servo_pwm machine.PWM(servo_pin) # 定义旋转角度的范围 min_angle 0 max_angle 180 # 定义舵机旋转函数 def rotate_servo(angle): duty_cycle int((angle / 180) * 1023) # 转换为占空比 servo_pwm.duty(duty_cycle) # 获取A4靶纸的旋转角度 def get_target_rotation(): # 使用相应的传感器或相机模块获取位置和角度信息 # 在这里假设已经获取到了旋转角度 rotation_angle 90 # 假设旋转角度为90度 return rotation_angle # 将A4靶纸以任意旋转角度贴在屏幕上并启动运动目标控制系统 def run_target_control(): target_rotation get_target_rotation() if min_angle target_rotation max_angle: rotate_servo(target_rotation) time.sleep(1) # 等待舵机旋转到指定角度 # 在这里添加您的其他运动目标控制代码 else: print(无效的旋转角度) # 主循环 while True: run_target_control() 问题第四问识别到坐标后没有什么好的思路
解决获取倾斜矩形框的位置和角度使用OpenMV的图像处理功能通过颜色识别或者边缘检测算法检测出倾斜的矩形框并获取其位置和角度信息。 计算矩形框的中心点坐标根据矩形框的位置信息计算出矩形框的中心点坐标。可以通过矩形框的左上角和右下角坐标来计算中心点坐标。 计算激光笔需要移动的路径根据矩形框的中心点坐标和角度计算出激光笔需要移动的路径。具体的计算方式可以根据你的需求和实际情况来确定以下是一种可能的计算方式 假设激光笔的起始位置为(0, 0)。 根据矩形框的中心点坐标和角度计算出激光笔需要移动的相对坐标。可以使用三角函数来计算相对坐标例如使用正弦函数和余弦函数来计算横向和纵向的相对坐标。 将相对坐标转换为绝对坐标即将相对坐标加上起始位置的坐标得到激光笔需要移动的绝对坐标。 返回移动路径将计算得到的移动路径返回以便后续控制舵机移动。