المكاسب:
- القدرة على إعداد وحل مشاكل الحركية الأمامية والعكسية وتخطيط المسار بمساعدة الذكاء الاصطناعي
- القدرة على إنتاج مدار آمن من خلال إعطاء حدود مشتركة للروبوت وقيود السرعة والتسارع كسياق للموجه
- القدرة على التحقق عدديًا وجسديًا من المخرجات الحركية والمسارية التي ينتجها الذكاء الاصطناعي
جلب المقبض الموجود في نهاية ذراع الروبوت إلى نقطة معينة في الفضاء، في اتجاه معين؛ قد يبدو الأمر بسيطًا، ولكن هناك معادلات حركية، وحدود مشتركة، وتفردات، وتخطيط للمسار. هنا يستخدم مهندس الميكاترونكس علم المثلثات والجبر الخطي ونظرية التحكم معًا. يعد الذكاء الاصطناعي أداة مساعدة قوية في هذه العملية: فهو يمكنه إنشاء معادلات حركية أمامية، واقتراح طرق حل للحركيات العكسية، وتحديد المسار وفقًا لقيود السرعة/التسارع. ومع ذلك، فإن الروبوتات هي واحدة من مجالات الميكاترونكس ذات المخاطر الجسدية الأعلى؛ إذا تم إرسال تسلسل زاوية تم إنشاؤه بواسطة الذكاء الاصطناعي إلى الروبوت دون التحقق، فقد تضرب الذراع نفسها أو البيئة أو المشغل. سنرى في هذه الوحدة كيفية إعداد والتحقق من علم الحركة وتخطيط المسار باستخدام الذكاء الاصطناعي.
الكينماتيكا الأمامية والعكسية
الكينماتيكا الأمامية (FK): إيجاد موضع واتجاه المؤثر النهائي إذا كانت زوايا المفصل معروفة. هناك حل واحد فقط، وهو مباشر.
الكينماتيكا العكسية (IK): إذا كان الموضع المطلوب للدالة النهائية معروفًا، يتم العثور على زوايا المفصل التي ستوفر ذلك. عادة ما يكون لها أكثر من حل (مثل رفع المرفق لأعلى أو لأسفل)، وأحيانًا لا يكون لها حلول (نقطة لا يمكن الوصول إليها)، وأحيانًا لها حلول لا نهائية (التفرد).
مفهوم
إدخال
الإخراج
عدد الحلول
الحركية إلى الأمام
زوايا مشتركة
الموقف / التوجه المتطرف
واحد
الكينماتيكا العكسية
الموقف / التوجه المتطرف
زوايا مشتركة
متعددة / لا شيء / لا نهاية لها
بالنسبة للذراع المستوية ذات المفصلين، يمكن إعداد الحركية العكسية في الذكاء الاصطناعي والتحقق منها يدويًا على النحو التالي:
import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """IK لذراع مستو ذو مفصلين. إرجاع الزوايا بالراديان (حل الكوع لأسفل).""" r2 = x**2 + y**2 # التحقق من إمكانية الوصول: هل هي النقطة الموجودة في مساحة العمل؟ إذا كان np.sqrt(r2) > (L1 + L2) أو np.sqrt(r2) < abs(L1 - L2): رفع ValueError("النقطة خارج مساحة العمل التي يمكن الوصول إليها") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # numericalsecurity t2 = np.arccos(cos_t2) # الكوع لأسفل t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degrees(t1), np.degrees(t2)# التحقق من الصحة: L1=L2=1، الهدف (1,1) -> متوقع t2=90 Degreeprint(inverse_kinematik_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)
الخطوط الحرجة هنا هي التي يتخطيها الذكاء الاصطناعي غالبًا: التحقق من إمكانية الوصول (هي النقطة الموجودة في مساحة العمل) و`np.clip` (يمنع إدخال arccos من تجاوز ±1 بسبب خطأ التقريب). بدون هاتين الحمايتين، ستنتج التعليمات البرمجية NaN أو ستتعطل عند نقطة غير صالحة.
نصيحة: عند طلب دقة IK، أخبر الذكاء الاصطناعي بوضوح "بإضافة التحكم في إمكانية الوصول وتقييد إدخال arccos بالمقطع". يمنع هذان الخطان الأخطاء الصامتة التي تسبب معظم الصداع في هذا المجال.
الحدود المشتركة والتفرد والحلول المتعددة
كل مفصل للروبوت الحقيقي له نطاق زاوية (على سبيل المثال، -170 درجة إلى +170 درجة)، حد للسرعة، وحد للتسارع. حتى لو أعطت IK زاوية صالحة رياضيًا، فلا يمكن استخدامها إذا كانت تلك الزاوية خارج النطاق المادي للمفصل. بالإضافة إلى ذلك، يقع الروبوت في التفرد في بعض التكوينات: يتم محاذاة محورين، ويتم فقدان درجة واحدة من الحرية، وتحاول سرعات المفاصل الانتقال إلى اللانهاية لحركة طرفية صغيرة.
ولهذا السبب فإن حل الموارد البشرية وحده لا يكفي؛ يجب أن يجتاز كل حل مرشح القبول:
def Solution_gecerli_mi(acilar_deg, Limits_deg): """الألم: [t1,t2,...], الحدود: [(min,max),...]""" للألم، (amin, amax) في الرمز البريدي(acilar_deg, Limits_deg): إذا لم يكن كذلك (amine <= Pain <= amax): return False, f"تم تجاوز حد المفصل: {pain:.1f} deg ({amine},{amax}) باستثناء" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], Limits)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0], Limits)) # (False, 'Joint Limit) تجاوزت...')
يمكن للذكاء الاصطناعي أن يعطي الحل "الرياضي" لـ IK؛ لكن الحدود المشتركة وتجنب التفرد خاصة بنظامك ويجب إعطاؤها كسياق للموجه.
التخطيط المداري
إن نقل الروبوت من النقطة أ إلى النقطة ب لا يعني رسم خط مستقيم بين زاويتين. يؤدي التغيير المفاجئ في السرعة إلى حدوث صدمة ميكانيكية واهتزاز. بدلاً من ذلك، يتم استخدام ملفات تعريف ناعمة: ملف تعريف السرعة شبه المنحرف (تسارع ثابت - سرعة ثابتة - تباطؤ ثابت) أو منحنى S (أكثر سلاسة، حيث يكون التسارع محدودًا أيضًا). عند جعل الذكاء الاصطناعي ينشئ مسارًا، يجب عليك تحديد الهدف والمدة والقيود.
import numpy as npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """ملف تعريف السرعة شبه المنحرف لمفصل واحد. يتم إرجاع مصفوفة الموضع.""" distance = abs(q1 - q0) Direction = np.sign(q1 - q0) t_speed = v_max / a_max distance_speed = 0.5 * a_max * t_speed**2 if 2 * distance_speed > المسافة: # ملف التعريف الثلاثي (v_max غير قابل للوصول) t_speed = np.sqrt(distance / a_max) t_constant = 0.0 v_peak = a_max * t_speed else: t_constant = (distance - 2 * distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... حساب الموضع لكل t (على أساس مراحل التسارع/الثبات/التباطؤ) return t, T, v_peak, Duration, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"المدة الإجمالية: {duration:.3f} s، سرعة الذروة: {vz:.1f} درجة/ثانية")
التحقق المنطقي هنا هو كما يلي: إذا كانت المسافة قصيرة، فلن يصل المحرك أبدًا إلى v_max وسيتحول المظهر الجانبي من شبه منحرف إلى مثلث. إذا أخطأ الذكاء الاصطناعي هذا الشرط، فسيتم حساب المدة الخاطئة للحركات القصيرة. يمكنك التحقق من ذلك عن طريق اختبار الكود بقيمة معروفة (على سبيل المثال، مسافة قصيرة جدًا).
موجه ضعيف / موجه قوي
ضعيف: "اكتب مسارًا يأخذ ذراع الروبوت من A إلى B." (بدون قيود: حد السرعة؟ التسارع؟ تباعد المفاصل؟ خرج أعمى.) قوي: "أنشئ مسارًا من نقطة إلى نقطة في مساحة المفصل لروبوت ذي 6 محاور. حد السرعة لكل مفصل هو 90 درجة/ثانية، حد التسارع هو 180 درجة/ثانية^2، نطاق الزاوية موضح في الجدول. استخدم شبه منحرف ملف تعريف السرعة، إذا كانت المسافة قصيرة، يقع في ملف تعريف ثلاثي. كما يتم كتابة وظيفة التحقق التي تتحقق من عدم تجاوز الحدود المشتركة: {{table}}"
التحقق: من المحاكاة إلى الروبوت
يتم التحقق من المسار الناتج عن الذكاء الاصطناعي بهذا الترتيب قبل الذهاب إلى الروبوت:
- رقميًا: هل زاوية المفصل والسرعة والتسارع لكل خطوة ضمن الحدود؟
- الاصطدام: على طول المسار، هل يصطدم الذراع بنفسه أو بالبيئة (تصور/حاكى إن أمكن)؟
- التفرد: هل يمر المدار عبر منطقة التفرد (هل يقترب المحدد اليعقوبي من الصفر)؟
- اختبار الأجهزة البطيء: قم بتشغيل الروبوت بسرعة منخفضة (على سبيل المثال 10%) وراقبه بصريًا.
- زيادة تدريجية في السرعة: بمجرد التحقق من كل شيء، تزيد السرعة خطوة بخطوة إلى القيمة الاسمية.
تنبيه: عند تشغيل روبوت بمسار جديد لأول مرة، يجب أن تكون سرعة تجاوز السرعة منخفضة دائمًا ويجب أن تكون نقطة التوقف الإلكترونية متاحة. حتى لو كان إخراج الذكاء الاصطناعي "صحيحًا رياضيًا"، فلن يتم الكشف عن الإزاحة أو المحور العكسي أو عطل الكابل في الإعداد الفعلي إلا من خلال اختبار بطيء.
حالة صغيرة
يطلب مهندس الأتمتة Ece من الذكاء الاصطناعي رمز المسار في المساحة المشتركة لتطبيق الانتقاء والمكان. ينتج الذكاء الاصطناعي ملفًا شبه منحرف، ولكن عندما تختبر Ece حركة لمسافة قصيرة، ترى أن الوقت سلبي: لم يتعامل الكود مع حالة الملف الشخصي الثلاثي حيث لا يمكن الوصول إلى v_max. تقوم اللجنة الاقتصادية لأوروبا بتصحيح ذلك عن طريق إخبار الموجه "إذا كانت المسافة قصيرة، فقم بالوقوع في الملف الشخصي الثلاثي". ثم يقوم بتشغيل زوايا المفصل التي قدمها الذكاء الاصطناعي من خلال وظيفة التحقق الخاصة به مقابل جدول الحدود الخاص به ويجد أن المفصل 5 يريد +125 درجة عند نقطة واحدة، في حين كان الحد +120 درجة. يقوم بإعادة تخطيط المسار ومراقبته، وهذه المرة يقوم بتشغيل الروبوت بسرعة 10%. في الجولة الأولى، رأى أن المقبض يقترب كثيرًا من الطاولة وقام بتصحيح إزاحة Z. أعاد الذكاء الاصطناعي مخطط العمل في دقائق؛ ولكن ثلاث عمليات التحقق المنفصلة (الملف الثلاثي، والحد المشترك، والاختبار البطيء) كشفت عن ثلاث مشكلات حقيقية منفصلة.
الأخطاء الشائعة
- استخدام حل IK بدون حدود مشتركة والتحكم في إمكانية الوصول.
- لا يتم قص إدخالات arccos/arcsin ولكن يتم إنتاج NaN في حالة حدوث خطأ في التقريب.
- طلب المدار دون الحد من السرعة/التسارع وإحداث صدمة ميكانيكية.
- تجاهل مناطق التفرد والسماح لسرعات المفاصل بالارتفاع.
- تخطي انتقال الملف الشخصي شبه المنحرف إلى مسافة قصيرة وحساب الوقت الخطأ.
- إجراء أول اختبار مداري بأقصى سرعة وبدون توقف إلكتروني.
باختصار
- الكينماتيكا الأمامية لديها حل واحد؛ يمكن أن تنتج الكينماتيكا العكسية حلولاً متعددة أو غير موجودة أو لا نهائية.
- يتم بالضرورة تصفية حلول IK من حيث الحدود المشتركة وإمكانية الوصول والتفرد.
- تخطيط المسار؛ يستخدم ملفات تعريف ناعمة ومتوافقة مع الحدود مثل شبه منحرف أو منحنى S.
- على مسافة قصيرة يتغير المظهر الجانبي من شبه منحرف إلى مثلث؛ يجب معالجة هذا في التعليمات البرمجية.
- يعمل الذكاء الاصطناعي على تسريع العمليات الحسابية؛ يجب أن تدخل الحدود وسياق التثبيت الفعلي في الموجه.
- يتم دائمًا تشغيل المسار الجديد لأول مرة بمعدل سرعة منخفض ونقطة توقف إلكترونية يمكن الوصول إليها.
مهمة التطبيق
حدد نموذج ذراع ثنائي أو ثلاثي المفاصل (مع أطوال وصلات حقيقية أو وهمية وحدود مشتركة). اطلب من الذكاء الاصطناعي إنشاء وظيفة حركية عكسية ومخطط مسار في هذا السياق. بعد ذلك: (1) تحقق يدويًا من مخرجات IK بهدف معروف (هل تعيد الزوايا وتعود إلى نفس النقطة مثل FK)، (2) اختبر أن الكود يلتقطها عن طريق إعطاء نقطة واحدة على الأقل لا يمكن الوصول إليها وحد مشترك واحد يتجاوز الهدف، (3) تأكد من أن الوقت المداري معقول على مسافة قصيرة. قم بتدوين عدد مشكلات التحقق التي وجدتها في الإصدار الأول من الكود والطبقة التي اكتشفت كل منها.