So verwenden Sie OpenMV für die Bereichsbestimmung
Video-Tutorial 10 – Anordnen und Messen der Größe von Objekten: https://singtown.com/learn/50001/
Video-Tutorial 33 – ToF Optical Ranging: https://singtown.com/learn/50539/
Erste Methode:\ Mit apriltag kann Apriltag eine 3D-Positionierung durchführen. Informationen zur spezifischen Implementierung finden Sie in unserem Tutorial:\ AprilTag-Tag-Tracking http://book.openmv.cc/image/apriltag.html
Zweite Methode:\ OpenMV verwendet eine monokulare Kamera. Wenn Sie eine Entfernungsmessung durchführen möchten, müssen Sie ein Referenzobjekt auswählen und das Größenverhältnis des Referenzobjekts verwenden, um die Entfernung zu berechnen.
In diesem Abschnitt wird die zweite Methode erläutert, wie der Abstand zwischen der Kamera und dem Tischtennisball basierend auf der Größe des Tischtennisballs in der Kamera berechnet wird.
Wie wir alle wissen, ist die Größe des Tischtennisballs in der Kamera umso kleiner, je weiter er von der Kamera entfernt ist.\ Was genau ist diese Beziehung?\ (Hinweis: Die mathematischen Geometrieprobleme hier betreffen nur den trigonometrischen Funktionsteil der High-School-Mathematik. Wenn Sie es nicht lesen möchten, können Sie sich einfach die Schlussfolgerung ansehen.)
Um das Problem zu vereinfachen, schauen wir uns das Bild an:\
Aus der geometrischen Beziehung in der Kamera links lässt sich Folgendes erkennen:
Es gibt also (Formel 1)
Aus der geometrischen Beziehung in der realen Umgebung rechts ist bekannt:
Wenn wir (Formel 1) einbringen, können wir (Schlussfolgerungsformel) erhalten:
Das Obige ist die Beziehung, die wir letztendlich wissen wollen!\ Was bedeutet das?\ Lm auf der linken Seite des Gleichheitszeichens ist die Länge und Bpix sind die Pixel, die der Ball in der Kamera einnimmt (Pixel im Durchmesser). Auf der rechten Seite des Gleichheitszeichens ist Rm der wahre Radius des Balls, Apix ist ein festes Pixel und a ist der halbe Betrachtungswinkel. So! So!\ Diese Formel sagt uns Folgendes:
实际长度和摄像头里的像素成反比
Vereinfachung ist
距离 = 一个常数/直径的像素
Okay, wir kennen die Beziehung bereits und sie ist so elegant und einfach!\ Die spezifischen Arbeitsschritte bestehen darin, zunächst den Wert dieser Konstante zu messen. Lassen Sie den Ball zunächst 10 cm von der Kamera entfernt sein, drucken Sie den Pixelwert des Durchmessers in der Kamera aus und multiplizieren Sie ihn dann mit Ermitteln Sie den Wert von k!
Dann ist der Abstand = diese Konstante/Pixel in der Kamera, so einfach.
Ich habe den OpenMV-Code hier gepostet:
# 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.
Das Ergebnis sieht so aus: Die Entfernung wird über die serielle Schnittstelle ausgedruckt.