Cómo usar OpenMV para rangos

Vídeo tutorial 10 - Determinar el rango y medir el tamaño de objetos: https://singtown.com/learn/50001/
Vídeo tutorial 33 - alcance óptico ToF: https://singtown.com/learn/50539/
  • Primer método:\ Usando apriltag, Apriltag puede realizar posicionamiento 3D. Consulte nuestro tutorial para una implementación específica:\ Seguimiento de etiquetas AprilTag http://book.openmv.cc/image/apriltag.html

  • Segundo método:\ OpenMV usa una cámara monocular. Si desea lograr una medición de distancia, debe seleccionar un objeto de referencia y usar la relación de tamaño del objeto de referencia para calcular la distancia.

Esta sección comparte el segundo método, cómo calcular la distancia entre la cámara y la pelota de ping pong en función del tamaño de la pelota de ping pong en la cámara.

Como todos sabemos, cuanto más lejos esté la pelota de ping pong de la cámara, menor será el tamaño de la pelota de ping pong en la cámara. Entonces, ¿la pregunta es?\ ¿Qué es exactamente esta relación?\ (Nota: las preguntas de geometría matemática aquí solo involucran la parte de función trigonométrica de las matemáticas de la escuela secundaria. Si no quieres leerlo, puedes mirar la conclusión)

Para simplificar el problema, veamos la imagen:\

Se puede saber por la relación geométrica en la cámara de la izquierda:

Entonces hay (fórmula 1)

Se sabe por la relación geométrica en el entorno real de la derecha:

Al incorporar (fórmula 1), podemos obtener (fórmula de conclusión):

¡Lo anterior es la relación que finalmente queremos saber!\ ¿Qué quiere decir esto?\ Lm en el lado izquierdo del signo igual es la longitud y Bpix son los píxeles ocupados por la bola en la cámara (píxeles de diámetro). En el lado derecho del signo igual, Rm es el radio real de la bola, Apix es un píxel fijo y a es la mitad del ángulo de visión.\ ¡entonces! ¡entonces! ¡entonces! ¡entonces! ¡entonces! ¡entonces! ¡entonces!\ Lo que nos dice esta fórmula es:

实际长度和摄像头里的像素成反比

La simplificación es

距离 = 一个常数/直径的像素

Vale, ya conocemos la relación, ¡y es tan elegante y sencilla!\ Los pasos de operación específicos son medir primero el valor de esta constante. No hace falta decir cómo medirlo, primero deje que la bola esté a 10 cm de la cámara, imprima el valor de píxeles del diámetro en la cámara y luego multiplíquelos. obtenga el valor de k!

Entonces distancia = esta constante/píxel en la cámara, muy fácil.

Publiqué el código OpenMV aquí:

# Measure the distance
#
# This example shows off how to measure the distance through the size in imgage
# This example in particular looks for yellow pingpong ball.

import sensor, image, time

# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
yellow_threshold   = ( 56,   83,    5,   57,   63,   80)
# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.

sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.

K=5000#the value should be measured

while(True):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot() # Take a picture and return the image.

    blobs = img.find_blobs([yellow_threshold])
    if len(blobs) == 1:
        # Draw a rect around the blob.
        b = blobs[0]
        img.draw_rectangle(b[0:4]) # rect
        img.draw_cross(b[5], b[6]) # cx, cy
        Lm = (b[2]+b[3])/2
        length = K/Lm
        print(length)

    #print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
    # connected to your computer. The FPS should increase once disconnected.

El resultado es así, la distancia se imprime a través del puerto serie.

results matching ""

    No results matching ""