Visual Servoing
التوجيه البصري طريقة للتحكم بالتغذية الراجعة تستخدم صور الكاميرا لتوجيه حركة الروبوت عبر تصحيحات بصرية مستمرة نحو هدف.
التحكم المؤازر البصري أسلوب للتحكم بالتغذية الراجعة، يستخدم صور الكاميرا لضبط حركة الروبوت باستمرار نحو موضع أو مشهد مطلوب. يرصد الروبوت السمات البصرية، ويقيس اختلافها عن التكوين المستهدف، ويصحح حركته مع وصول صور جديدة. وهذا يربط بين الرؤية الحاسوبية، التي تفسر الصور، والروبوتات، التي تحوّل تلك القياسات إلى أفعال مادية. ويُستخدم التحكم المؤازر بالرؤية مرادفًا لهذا المصطلح. وقد أدخل J. Hill وW. T. Park المصطلح عام 1979 في التحكم الآني بروبوت مزود بكاميرا متحركة.
آلية عمل التحكم المؤازر البصري#
يقارن نظام التحكم المؤازر البصري بين المشاهدات الحالية وصورة مطلوبة أو وضعية نسبية مستهدفة. ويوفر استخراج السمات قياسات مثل النقاط المفتاحية، أو مواضع الخطوط، أو حدود الكائنات. ويحوّل المتحكم الخطأ الناتج إلى أوامر حركة. وتغيّر الحركة مشاهدات الكاميرا، فتغلق حلقة التغذية الراجعة وتتيح إجراء تصحيحات متكررة مع اقتراب الروبوت من هدفه.
تصف مصفوفة التفاعل، التي تُسمى أيضًا يعقوبي الصورة، كيفية تغيّر القياسات البصرية بفعل حركة الكاميرا. وتحول المعكوسة الزائفة للمصفوفة خطأ السمات إلى سرعة تصحيحية؛ فيما يحدد كسب المتحكم قوة هذا التصحيح. ويحدد تركيب الكاميرا ترتيبين شائعين: يضع ترتيب الكاميرا على الذراع الكاميرا على الأداة المتحركة، بينما يستخدم ترتيب الكاميرا الخارجية كاميرا خارجية تراقب مساحة العمل.
يوفر Ultralytics YOLO قياسات الإدراك اللازمة لهذه الحلقة: ينتج YOLO26 مربعات إحاطة عبر كشف الكائنات، وتنقل آلية تكامله مع ROS الاكتشافات المستمدة من الكاميرا ومعلومات العمق بين مكونات برمجيات الروبوت. ويستخدم متحكم لاحق هذه القياسات لحساب الحركة.
التحكم المؤازر البصري المعتمد على الصورة والمعتمد على الموضع#
تختلف الأساليب الرئيسية في طريقة تمثيل خطأ التحكم:
- التحكم المؤازر البصري المعتمد على الصورة (IBVS): يقلل الفروق بين سمات الصورة الحالية والمطلوبة، مثل إحداثيات النقاط. وتستخدم متحكمات سمات النقاط هندسة الكاميرا وتقديرات العمق لربط حركة الصورة بالحركة المادية.
- التحكم المؤازر البصري المعتمد على الموضع (PBVS): يستخدم تقدير الوضعية لاستعادة الموضع والاتجاه ثلاثيي الأبعاد، ثم يقلل الفرق بينهما وبين الوضعية المطلوبة. وتؤثر معايرة الكاميرا وإعادة البناء الهندسي في دقته.
- التحكم المؤازر البصري الهجين: يجمع بين القياسات في فضاء الصورة والقياسات ثلاثية الأبعاد. ويجمع نهج التحكم المؤازر البصري 2.5D المعروف بين سمات الصورة ومعلومات الوضعية الجزئية.
يحافظ تتبع الكائنات على تطابق السمات أو الكائنات عبر الإطارات؛ ويستخدم التحكم المؤازر البصري تلك المشاهدات للتحكم في الحركة. ويقدّر التحديد البصري المتزامن للموقع ورسم الخرائط حركة الكاميرا وينشئ خريطة. وتدعم إمكانات الإدراك هذه أجزاءً مختلفة من نظام الملاحة والتحكم في الروبوت.
التطبيقات والقيود العملية#
- الإمساك الروبوتي: أثناء الإمساك من مسافة قريبة، قد تتجاوز كاميرا RGB-D الحد الأدنى لمسافة استشعار العمق، فتفقد قياسات المدى الصالحة. ويستخدم الإمساك البصري ذو الحلقة المغلقة أسلوب IBVS لمواصلة تصحيح الاقتراب النهائي باستخدام قياسات السمات من RGB، بما في ذلك عند تحرك الكائن.
- تحديد موضع الروبوت المتنقل: يتحكم عرض ViSP التوضيحي لروبوت Pioneer في روبوت Pioneer P3-DX مزود بكاميرا بالنسبة إلى هدف بصري. وتحدد مشاهدات الهدف حركة الروبوت التصحيحية عبر متحكم يعتمد على الموضع.
يؤثر التوقيت ووضوح الرؤية مباشرةً في التحكم. إذ يؤدي تأخر معالجة الصور إلى تأخر التتبع، وقد يزعزع استقرار الحلقة. لذلك، يكتسب زمن استجابة الاستدلال أهمية إلى جانب دقة الكشف في الاستدلال الآني. ويقطع الاحتجاب تطابق السمات، بينما تجعل هندسة السمات سيئة التكييف تقديرات السرعة حساسة لضوضاء الصورة. ويجمع دمج المستشعرات القياسات البصرية مع معلومات مثل مشفّرات المفاصل للحفاظ على تقديرات مفيدة للحالة أثناء الحركة.
محاكاة مبسطة لـ IBVS#
تطبق محاكاة Python هذه قانون التحكم القياسي باستخدام المعكوس الزائف، على كاميرا تتحرك جانبيًا أثناء رصد نقطة ثابتة واحدة. ثبّت NumPy باستخدام pip install numpy.
import numpy as np
point = np.array([0.0, 0.0, 2.0])
camera = np.array([-0.4, 0.2, 0.0])
desired = np.zeros(2)
gain, dt, focal_pixels = 1.0, 0.05, 800.0
initial_error = np.linalg.norm((point - camera)[:2] / point[2])
for _ in range(200):
relative = point - camera
observed = relative[:2] / relative[2]
error = observed - desired
# Interaction matrix for sideways camera translation.
interaction = -np.eye(2) / relative[2]
velocity = -gain * np.linalg.pinv(interaction) @ error
camera[:2] += velocity * dt
final_error = np.linalg.norm((point - camera)[:2] / point[2])
print(f"Pixel error: {initial_error * focal_pixels:.2f} -> {final_error * focal_pixels:.2f}")ينخفض خطأ الصورة من 178.89 بكسل تقريبًا إلى 0.01 بكسل مع تمركز النقطة عبر التصحيحات المتكررة. وبالنسبة إلى سمات النقاط، تتناسب حدود التفاعل الانتقالي عكسيًا مع العمق: فمضاعفة عمق النقطة تقلل إلى النصف إزاحة الصورة الناتجة عن حركة الكاميرا الجانبية نفسها.










