جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
اجعل روبوت Arduino الخاص بك يتحرك مباشرة لمسافة محددة أو قم باللف إلى زاوية محددة باستخدام مكتبة PreciseMovement Arduino.
يحتاج الروبوت إلى عجلة دوارة أو ما يعادلها لتقليل الاحتكاك أثناء الالتواء.
www.pololu.com/product/954
يمكنك إخبار الروبوت أن يتقدم لمسافة محددة أو يلتف إلى زاوية محددة. يحدد البرنامج موقعه باستخدام الحساب الميت. نظرًا لأن تقديرات الموضع تعتمد فقط على سرعة العجلة ، فإن الانزلاق سيؤدي إلى حدوث خطأ كبير. يجب أن يكون مصمم الروبوت حريصًا على تقليل مخاطر الانزلاق.
تم اختبار هذا للعمل مع الروبوت SnappyXO.
الخطوة 1: تم تغيير موقع البرنامج التعليمي
تم نقل البرنامج التعليمي إلى الصفحة أدناه. لم يعد يتم الحفاظ على هذا البرنامج التعليمي.
sites.google.com/stonybrook.edu/premo
الخطوة الثانية: قم ببناء روبوت القيادة التفاضلية SnappyXO
مكتبة PreciseMovement التي سنستخدمها متوافقة فقط مع روبوتات القيادة التفاضلية. يمكنك اختيار استخدام روبوتات أخرى ذات دفع ثنائي.
الخطوة 3: قم بتوصيل الإلكترونيات
بالنسبة لجهاز التشفير البصري SnappyXO القياسي:
D0 (خرج المشفر) -> Arduino Digital Pin
VCC -> Arduino 5V
GND -> GND
قوة المحرك واردوينو:
يجب أن يكون مصدر طاقة المحرك مناسبًا للمحركات التي تستخدمها. بالنسبة لمجموعة SnappyXO ، تُستخدم بطاريات 4AA لقوة المحرك وبطارية 9 فولت لطاقة Arduino. تأكد من أن لديهم جميعًا GND مشترك.
الخطوة 4: قم بتثبيت مكتبة PreciseMovement Arduino
تحميل:
github.com/jaean123/PreciseMovement-library/releases
كيفية تثبيت مكتبة Arduino:
wiki.seeedstudio.com/How_to_install_Arduino_Library/
الخطوة 5: الكود
كود اردوينو:
create.arduino.cc/editor/whileloop/7a35299d-4e73-409d-9f39-2c517b3000d5/preview
هذه المعلمات تتطلب التعديل. يمكن تعديل المعلمات الأخرى الموصوفة في الكود للحصول على أداء أفضل.
- افحص واضبط دبابيس المحرك أسفل دبابيس ARDUINO.
-
اضبط الطول والراديوس.
- LENGTH هي المسافة من العجلة اليسرى إلى العجلة اليمنى.
- RADIUS هو نصف قطر العجلة.
-
قم بتعيين PULSES_PER_REV ، وهو عدد النبضات التي يخرجها المشفر لثورة عجلة واحدة.
- لاحظ أن هذا يختلف عن عدد النبضات التي يخرجها المشفر لثورة عمود محرك واحد ما لم تكن المشفرات متصلة بالقراءة مباشرة من عمود العجلة.
- PULSES_PER_REV = (نبضات لكل ثورة في عمود المحرك) × (نسبة التروس)
-
عيّن STOP_LENGTH إذا رأيت أن الروبوت يتجاوز السرعة بعد الحركة إلى الأمام.
سيتوقف الروبوت بمجرد أن يكون الموضع المقدر على بعد STOP_LENGTH من الهدف. وبالتالي ، فإن STOP_LENGTH ، هي المسافة التقريبية المطلوبة حتى يتوقف الروبوت
-
معلمات PID
KP_FW: هذا هو المكون النسبي للحركة الأمامية. قم بزيادة هذا حتى يتحرك الروبوت في خط مستقيم. إذا لم تتمكن من تشغيله مباشرة من خلال ضبط هذا ، فمن المحتمل أن يكون الجهاز على خطأ. (على سبيل المثال ، محاذاة العجلات الخاطئة ، إلخ)
KP_TW: هذا هو المكون النسبي لحركة التواء PID. ابدأ ببساطة من قيمة منخفضة وقم بزيادة هذا حتى تصبح سرعة الالتواء ، أو السرعة الزاوية للروبوت أثناء التواء ، سريعة بدرجة كافية ، ولكنها لا تسبب التجاوز. لإجراء الملاحظات ، يمكنك جعل الروبوت البديل من 0 إلى 90 والعكس عن طريق إدخال ما يلي في وظيفة الحلقة
ضع هذا في حلقة لضبط KP_FW:
المحرك إلى الأمام (99999) ؛
ضع هذا في حلقة للتبديل من 0 إلى 90 لضبط KP_TW:
mover.twist (90) ؛ // تويست 90 سي دبليو
تأخير (2000) ؛
mover.twist (-90) // تويست 90 CCW
تأخير (2000) ؛
لاحظ أنه من أجل تحريف السرعة الزاوية فعليًا عند TARGET_TWIST_OMEGA ، يجب أيضًا ضبط KI_TW نظرًا لأن وحدة التحكم النسبية لن تستقر أبدًا على الهدف المحدد. ومع ذلك ، ليس من الضروري الالتواء بهذه السرعة الزاوية بالضبط. يجب أن تكون السرعة الزاوية بطيئة بدرجة كافية.
الخطوة 6: كيف يعمل
إذا كنت مهتمًا بكيفية عملها ، فاقرأ.
يتم الحفاظ على الحركة إلى الأمام مستقيمة باستخدام خوارزمية السعي الخالص على مسار خط مستقيم.
يحاول جهاز التحكم الملتوي PID الحفاظ على السرعة الزاوية عند TARGET_TWIST_OMEGA. لاحظ أن هذه السرعة الزاوية هي السرعة الزاوية للروبوت بأكمله وليس العجلات. يتم استخدام وحدة تحكم PID واحدة والإخراج هو سرعة كتابة PWM لكل من المحركات اليمنى واليسرى. الحساب الميت يتم لحساب الزاوية. بمجرد أن تصل الزاوية إلى حد الخطأ ، يتوقف الروبوت.