جدول المحتويات:

روبوت الرسم اللمسي: 5 خطوات (بالصور)
روبوت الرسم اللمسي: 5 خطوات (بالصور)

فيديو: روبوت الرسم اللمسي: 5 خطوات (بالصور)

فيديو: روبوت الرسم اللمسي: 5 خطوات (بالصور)
فيديو: 14. [KOICA-MOROC] Dessin de robot/ رسم الروبوت 2024, يوليو
Anonim

كجزء من تخرجي الماجستير في القسم. التصميم الصناعي في جامعة أيندهوفن ، لقد قمت بإنشاء جهاز رسم لمسي يمكن استخدامه للتنقل في سيارة شبه مستقلة من خلال حركة المرور. تسمى الواجهة خربشة وتتيح للمستخدم تجربة تركيبات لمسية في مساحة ثنائية الأبعاد من خلال قوة وموقع متغيرين. على الرغم من أن المفهوم ليس ما يدور حوله هذا الدليل ، يمكنك قراءة المزيد عن Scribble هنا:

يستخدم Scribble تكوين ارتباط من 5 أشرطة يسمح له بتحريك درجتين جانبيتين من الحرية (DoF). هذا الإعداد شائع إلى حد ما بين النماذج الأولية لإنشاء روبوتات الرسم ، وإليك بعض الأمثلة:

www.projehocam.com/arduino-saati-yazan-kol-…

blogs.sap.com/2015/09/17/plot-clock-weathe…

www.heise.de/make/meldung/Sanduhr-2-0-als-Bausatz-im-heise-shop-erhaeltlich-3744205.html

ميكانيكيا هذه الروبوتات سهلة الصنع. إنهم يحتاجون فقط إلى مفاصل أساسية ولديهم مشغلان يمكنهما إنشاء بعض الحركات السائلة. هذه البنية مثالية للمصممين المهتمين بصنع هيكل متحرك ، لكنني لست مهندسًا ميكانيكيًا ، وجدت أن الكينماتيكا يصعب ترجمتها إلى رمز. ومن ثم سأقدم كود Arduino الأساسي الذي يحدد الحركية الأمامية والمعكوسة حتى تتمكن من استخدامها بسهولة في تصميماتك المستقبلية! ؛-)

الرجاء تنزيل الكود أدناه!

* تحرير: لمشروع مماثل ، ألق نظرة على https://haply.co *

الخطوة الأولى: بناء الهيكل

بناء الهيكل
بناء الهيكل

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

بالنسبة للنموذج الأولي الخاص بي ، أقوم بتشغيل الكود الخاص بي على Arduino DUE يتم التحكم فيه عبر التسلسل بواسطة برنامج على جهاز Mac الخاص بي تم إنشاؤه في Open Frameworks. يستخدم البرنامج اتصال UDP للتواصل مع جهاز محاكاة قيادة يعتمد على Unity 3D.

يستخدم نموذج Scribble الأولي محامل 5 مم ومصنوع من 5 مم أكريليك مقطوع بالليزر. المشغلات هي محركات Haptic الخاصة بـ Frank van Valeknhoef والتي تسمح بالتشغيل وقراءة الموضع وإخراج قوة متغيرة. هذا جعلهم مثاليين لخصائص Scribble المرغوبة. يمكن العثور على المزيد حول مشغلاته هنا:

الخطوة 2: تعرف على قيم أجهزتك

تعرف على قيم أجهزتك
تعرف على قيم أجهزتك

تعتمد الحركية الأمامية على محطة الطقس على مدار الساعة بواسطة SAP:

كما هو موضح في تكوينها ، يتم تمديد الذراع ليحمل علامة للرسم. تمت إزالة هذا لأنه لم يخدم أي غرض للنموذج الأولي للخربشة. تحقق من الكود الخاص بهم إذا كنت ترغب في إضافة هذا المكون مرة أخرى. يتم الاحتفاظ بالأسماء الموجودة في الصورة كما هي في التكوين الخاص بي.

اعتمادًا على أجهزتك ، تحتاج الخوارزمية إلى معرفة خصائص أجهزتك:

int leftActuator ، rightActuator ؛ // زاوية الكتابة إلى المشغل في درجة ، وتغيير إلى يطفو إذا كنت ترغب في مزيد من الدقة

int posX ، posY ؛ // إحداثيات موقع المؤشر

اضبط دقة قيم الإدخال

int posStepsX = 2000 ؛

int posStepsY = 1000 ؛

أبعاد الإعداد الخاص بك ، القيم بالملم (انظر صورة SAP)

#define L1 73 // طول ذراع المحرك ، انظر صورة SAP (اليسار واليمين متماثلان)

#define L2 95 // ذراع تمديد الطول ، انظر صورة SAP (اليسار واليمين متماثلان)

#define rangeX 250 // أقصى مدى في اتجاه X للنقطة المراد تحريكها (من اليسار إلى اليمين ، 0 - maxVal)

#define rangeY 165 // أقصى مدى في الاتجاه Y للنقطة المراد تحريكها (من 0 إلى أقصى مدى مع البقاء في المنتصف)

#define originL 90 // مسافة الإزاحة من الحد الأدنى لقيمة X إلى موضع مركز المشغل

# تعريف الأصل R 145 // مسافة الإزاحة من الحد الأدنى لقيمة X إلى موضع مركز المحرك ، والمسافة بين المحركين في هذه الحالة

الخطوة 3: إعادة توجيه علم الحركة

الحركة إلى الأمام
الحركة إلى الأمام

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

يقوم الفراغ بتحديث قيم الزاوية المرغوبة للمشغل الأيمن والأيسر المحددة مسبقًا. استنادًا إلى قيم X و Y التي تم توصيلها ، سيتم حساب الزوايا القائمة للحصول على المؤشر إلى هذا الموضع.

void set_XY (double Tx، double Ty) // أدخل قيمة X و Y الخاصة بك {// بعض vals التي نحتاجها ولكن لا نريد حفظها لمضاعفة dx ، dy ، c ، a1 ، a2 ، Hx ، Hy ؛ // تعيين دقة inpit إلى نطاق التكوين الخاص بك في العالم الحقيقي int realX = map (Tx ، 0 ، posStepsX ، 0 ، rangeX) ؛ // swap if التعيين إذا مقلوب int realY = map (Ty، posStepsX، 0، 0، rangeY) ؛ // مبادلة إذا رسم الخرائط إذا مقلوب // زاوية احسب للمشغل الأيسر // ديكارت dx / dy dx = realX - originL ؛ // include offset dy = realY ؛ // الطول القطبي (ج) والزاوية (أ 1) ج = الجذر التربيعي (dx * dx + dy * dy) ؛ a1 = atan2 (dy، dx) ؛ a2 = return_angle (L1، L2، c) ؛ leftActuator = أرضية (((M_PI - (a2 + a1)) * 4068) / 71) ؛ // الزاوية النهائية وتحويل من rad إلى deg // زاوية حساب للمشغل الأيمن dx = realX - originR ؛ // include offset dy = realY ؛ ج = الجذر التربيعي (dx * dx + dy * dy) ؛ a1 = atan2 (dy، dx) ؛ a2 = return_angle (L1، L2، c) ؛ rightActuator = أرضية (((a1 - a2) * 4068) / 71) ؛ // الزاوية النهائية والتحويل من rad إلى deg}

فراغ إضافي لحساب الزاوية:

double return_angle (double a، double b، double c) {// قاعدة جيب التمام للزاوية بين c و acos العودة ((a * a + c * c - b * b) / (2 * a * c)) ؛ }

الخطوة 4: الحركة المعكوسة

الكينماتيكا العكسية
الكينماتيكا العكسية

تعمل الكينماتيكا العكسية في الاتجاه المعاكس. تقوم بتوصيل دوران المشغلات الخاصة بك بالدرجات وسيقوم الفراغ بتحديث الموضع المحدد سابقًا.

يرجى ملاحظة أنك ستحتاج إلى مشغلات أو جهاز استشعار منفصل يمكنه قراءة زاوية الذراع. في حالتي ، استخدمت مشغلات يمكنها قراءة وكتابة موضعها في نفس الوقت. لا تتردد في تجربة ذلك وفكر في إضافة نوع من المعايرة حتى تكون متأكدًا من قراءة الزاوية بشكل صحيح.

موصى به: