2023 电赛E题--可能会出现的问题以及解决方法

这篇具有很好参考价值的文章主要介绍了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(time=2000)

# 设置阈值,用于颜色分割
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_threshold=200, area_threshold=200)

    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), thickness=4) # 绘制第二大的矩形框,颜色为红色

        # 获取矩形框的中心点坐标
            x, y = second_max_2023 电赛E题--可能会出现的问题以及解决方法,2023 电赛,2023 电赛,问题,k210/openmvblob.cx(), second_max_2023 电赛E题--可能会出现的问题以及解决方法,2023 电赛,2023 电赛,问题,k210/openmvblob.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) + '\n')
    
    # 延迟一段时间
    time.sleep(100)
```

在Arduino上的代码(C/C++):

```cpp
void setup() {
  // 初始化串口
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    // 读取串口数据
    String data = Serial.readStringUntil('\n');
    
    // 将字符串转换为浮点数
    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, freq=50)  # 使用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)。 根据矩形框的中心点坐标和角度,计算出激光笔需要移动的相对坐标。可以使用三角函数来计算相对坐标,例如使用正弦函数和余弦函数来计算横向和纵向的相对坐标。 将相对坐标转换为绝对坐标,即将相对坐标加上起始位置的坐标,得到激光笔需要移动的绝对坐标。 返回移动路径:将计算得到的移动路径返回,以便后续控制舵机移动。

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!文章来源地址https://www.toymoban.com/news/detail-624153.html

到了这里,关于2023 电赛E题--可能会出现的问题以及解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在linux服务器部署pgsql,安全版以及可能出现各种问题解决(保姆级教程)

    提示:市面上那些在linux服务器部署pgsql好多都是水货,效果良莠不齐,笔者花了两天时间成功部署了pgsql,记录下方便自己以后部署,也方便其他有需要的码农 服务器环境: postgresql版本 坚决不要通过镜像下载,道路千万条,安全第一条,镜像源不一定安全,自己老老实实去

    2023年04月08日
    浏览(43)
  • Pycharm 出现 进程已结束,退出代码-1073741819 (0xC0000005) 的问题 可能的解决方法

    Pycharm 出现 进程已结束,退出代码-1073741819 (0xC0000005) 的问题 可能的解决方法 这个错误代码表示进程遇到了一个无效的内存地址,可能是由于以下原因: 1. Pycharm的问题,需要更换或卸载一些安装包,如h5py或pyQt 2. Pytorch的问题,需要检查是否使用了GPU环境,并更新驱动和版本

    2024年02月16日
    浏览(43)
  • Ubuntu20.04安装sql server(内含多个可能遇到的问题以及解决方法)

    这学期的课程有数据库,因此今天(2022.3.6)在ubuntu上安装了sql server2019 即使根据官方指引进行安装也会遇到不少问题,因此为在这里总结了我自己遇到的所有问题,以及给出了相应的解决方案,希望能为后来的人解决一些困惑和麻烦 根据指引,在终端输入第一条语句:(导入

    2024年02月05日
    浏览(57)
  • K210(1)解决一些新上手出现的问题

    openmv官方给出了它的包,可以在文档中找到 sipeed官网给出的操作手册 MaixPy 精简版入门教程(AI视觉向) 这个错误出现的原因是没有下载固件到开发板上 打开flash_gui,添加固件,(下载链接)这个固件版本不能太低 烧录地址默认为 0x00000 即可。选择开发板和串口 COM,串口选

    2024年02月10日
    浏览(32)
  • Pycharm2023.2左右版本出现项目无法自动关闭的问题(真解决方法!)

    目录 1.问题描述及图片 2.网上辣子鸡解决方法简介 3.出现问题的原因以及真正可以解决的方法! 方法就是:关闭自动索引,直接采用本地索引,方法如图: 1.问题描述及图片         问题如上,在退出Pycharm时总是出现正在关闭项目的选项,且长时间无法关闭,需要打开任务

    2024年02月08日
    浏览(44)
  • 数据库四种事务隔离级别的区别以及可能出现的问题

    当两个或多个事务读入同一数据并修改,会发生丢失修改问题,前一个事务修改的结果会被后一事务所做的修改覆盖。 当一个事务修改某个数据后,另一事务对该数据进行了读取,由于某种原因 前一事务撤销 了对该数据的修改,即将修改后的数据恢复原值,相当于没有执行

    2024年02月07日
    浏览(72)
  • TCP为什么是三次握手和四次挥手以及可能出现的问题

    如果是4次,多了一次没啥意义还慢了,如果是两次握手逻辑可能存在下列问题: (这两个方面也可以理解为握手过程中可能出现的问题) 不可靠 TCP协议是可靠的 ,那么 建立的连接也需要确保是双向,可靠的 ; 根据连接过程分析,只有一方收到了另一方的ack确认报文,才能证

    2024年02月03日
    浏览(49)
  • 电脑启动后出现白屏问题的可能原因及解决方案

    电脑开机后出现白屏问题是一种常见的故障,可能由多种原因引起。在本文中,我将介绍一些可能的原因,并提供相应的解决方案,以帮助您解决这个问题。 显示器故障:首先,检查显示器是否正常工作。可以尝试连接另一个显示器或电视,看看是否仍然出现白屏问题。如果

    2024年02月04日
    浏览(44)
  • a-textarea(textarea)出现模糊问题的可能解决方案

    项目介绍 :本项目是一个vue3+ant-design-vue4.x开发,是一个客服机器人的组件。其它项目通过iframe+js文件来引入(iframe的内容就是表单,入口按钮是通过js文件进行dom操作创建)。 通过js监听页面宽度,然后通过transform来适配不同分辨率。 iframe+transform,出bug似乎也不奇怪 ~ 这期间

    2024年04月25日
    浏览(33)
  • AD关于原理图编译出现Duplicate Net Names Wire的可能解决方法之一

                         关于Duplicate Net Names Wire网络名重复错误的解决方法有很多,我自己在遇到这个问题的时候,也尝试了许多方法,如更改网络识别符的范围为global,我报错的CPU_OK1的重复命名报错是解决了,可是又会出现更多的其他类型错误;还有的方法是直接忽略

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包