חיפוש
  • יניב אור

קינמטיקה - ישירה והפוכה

עודכן ב: 9 ספט 2019



* בשרטוט למעלה מופיעה זרוע רובוטית המורכבת מ-4 חוליות באורכים שונים. כל חוליה מחוברת לחוליה הבאה באמצעות מפרק סיבובי. לצורך העניין, וזה לא מסומן בשרטוט, המפרק העליון בצד שמאל הוא המפרק הראשון והוא הבסיס. המפרק בקצה השני הוא קצה הזרוע. בחלק הזה יש בד"כ כלי עבודה כלשהו.


בקינמטיקה ישירה, אנו קובעים את אורך החוליות ואת זווית המפרק של כל חוליה ומקבלים כתוצאה את מיקום קצה הזרוע (ושאר המפרקים, כמובן) - קואורדינטות של xy במערכת קרטזית.


בקינמטיקה הפוכה אנחנו מזינים קואורדינטה ובהתאם המערכת מחשבת את זוויות המפרקים, אורך הזרועות וכן הלאה. חשוב לציין שבקינמטיקה הפוכה יש יותר מאפשרות אחת למיקום החוליות - על מנת להגיע עם קצה הזרוע לנקודה הרצויה.


ברוב המקרים, יש צורך במתן קואורדינטות ובהתאם הרובוט מחשב את הזויות של המפרקים, אורכי הזרועות וכו' - קינמטיקה הפוכה.


יש כמה דרכים לפתור בעיות מהסוג הזה - גם של קינמטיקה ישירה וגם של הפוכה. אני רוצה להציג אותן - מהצורה התמימה יותר של שימוש בלולאות וטריגונומטריה לצורות המתוחכמות יותר של שימוש באלגברה לינארית, מטריצות (DH) וכן הלאה.

***


כתבתי את הקוד הזה שרץ על מערך של אובייקטים. כל אובייקט מייצג חוליה המאופיינת על-ידי אורך וזווית. מערך החוליות יוצר זרוע המחולקת על-ידי מפרקים. כתוב ב-vanilla Javascript, על canvas:


זאת התוצאה:


החישוב נעשה בטריגונומטריה פשוטה. הקואורדינטות של הנקודה הן אורך הצלע ליד זווית החוליה (x) ואורך הצלע ממול לזווית החוליה (y).


שימו לב לפונקציה runAction, שבה אפשר להגדיר פונקציות שונות שפועלות על המפרקים והחוליות. הפונקציה תרוץ בכל איטרציה של loop שנשלט ע"י ה-setInterval (כל 100 מילישניות).


דוגמא 1 - הזווית של החוליה הראשונה בלבד גדלה בכל סיבוב , ב-8 מעלות:




דוגמא 2 - זווית רנדומלית בין מינוס 10 ל-10 לכל אחת מהחוליות:




דוגמא 3 - כמו הדוגמא הקודמת ובנוסף ערך רנדומלי בין 1 ל-5 שמתווסף בכל סיבוב לאורך של כל אחת מהחוליות - האורך ההתחלתי של כל אחת מהן הוא 0:



דוגמא 4 - זהה לדוגמא 2 רק שבמקום שימוש בפונקציית random "רגילה", אני עושה שימוש ב-simplex noise כדי לקבל תנועה טבעית יותר - רנדומלית אך רציפה במידה מסויימת. מתוך הספריה:

https://github.com/josephg/noisejs


* אגב, ניסיתי להשתמש ב-perlin noise, שמצריך הרבה יותר יכולות חישוב מ-simplex וזה היה יותר מדי בשביל הדפדפן. פשוט נתקע.





עדכונים נוספים בקרוב...


© 2023 by DO IT YOURSELF. Proudly created with Wix.com