كيفية استخدام OpenMV لقياس المسافة

الدرس المرئي 10 - قياس المسافة وقياس حجم الجسم: https://singtown.com/learn/50001/
الدرس المرئي 33 - قياس المسافة الضوئي باستخدام ToF: https://singtown.com/learn/50539/
  • الطريقة الأولى:\ استخدام apriltag، حيث يمكن لـ Apriltag إجراء تحديد المواقع ثلاثي الأبعاد. للتنفيذ التفصيلي، يُرجى الرجوع إلى شرحنا في:\ http://book.openmv.cc/image/apriltag.html

  • الطريقة الثانية:\ يستخدم OpenMV كاميرا أحادية العدسة. إذا أردت تحقيق قياس المسافة، فعليك اختيار جسم مرجعي واستخدام نسبة حجمه لحساب المسافة.

يتناول هذا القسم الطريقة الثانية، أي كيفية حساب المسافة بين الكاميرا وكرة تنس الطاولة اعتمادًا على حجم الكرة داخل الكاميرا.

كما نعلم جميعًا، كلما ابتعدت كرة تنس الطاولة عن الكاميرا، صغر حجمها في الكاميرا، فما هو السؤال إذن؟\ ما هي هذه العلاقة بالضبط؟\ (ملاحظة: مسألة الهندسة الرياضية هنا تتعلق فقط بجزء الدوال المثلثية من رياضيات المرحلة الثانوية. إذا كنت لا ترغب في قراءتها، يمكنك الانتقال مباشرة إلى الاستنتاج)

لتبسيط المشكلة، دعونا ننظر إلى الصورة التالية:\

من العلاقة الهندسية داخل الكاميرا الموضحة على اليسار، يمكننا أن نستنتج:

إذن لدينا (المعادلة 1)

ومن العلاقة الهندسية في البيئة الحقيقية الموضحة على اليمين، يمكننا أن نستنتج:

بالتعويض بـ (المعادلة 1) نحصل على (المعادلة النهائية):

هذه هي العلاقة التي نريد معرفتها في النهاية!\ فماذا يعني هذا؟\ Lm الموجود على الجانب الأيسر من علامة يساوي هو الطول، وBpix هو عدد وحدات البكسل التي تشغلها الكرة في الكاميرا (بكسلات القطر). أما على الجانب الأيمن من علامة يساوي، فإن Rm هو نصف قطر الكرة الفعلي، وApix هو عدد بكسل ثابت، وa هو نصف زاوية الرؤية.\ إذن! إذن! إذن! إذن! إذن! إذن! إذن!\ هذه المعادلة تخبرنا أن:

الطول الفعلي يتناسب عكسيًا مع عدد وحدات البكسل في الكاميرا

بتبسيط ذلك نحصل على:

المسافة = ثابت / عدد بكسلات القطر

حسنًا، لقد عرفنا العلاقة الآن، وهي في غاية الأناقة والبساطة!\ تتمثل خطوات التنفيذ العملي في قياس قيمة هذا الثابت أولًا. لا داعي للشرح أكثر: ضع الكرة أولًا على بعد 10 سم من الكاميرا، اطبع قيمة عدد بكسلات القطر كما تظهر في الكاميرا، ثم اضربها للحصول على قيمة الثابت k!

بعد ذلك تكون المسافة = هذا الثابت / عدد البكسلات في الكاميرا، بهذه البساطة.

فيما يلي كود OpenMV:

# 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 csi, image, time
csi0 = csi.CSI()

# 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.

csi0.reset() # Initialize the camera sensor.
csi0.pixformat(csi.RGB565) # use RGB565.
csi0.framesize(csi.QQVGA) # use QQVGA for speed.
csi0.snapshot(frames=10) # Let new settings take affect.
csi0.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 = csi0.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.

هذه هي النتيجة، حيث تتم طباعة المسافة عبر المنفذ التسلسلي.

results matching ""

    No results matching ""