רובוטמקבילי - 6 ניסוימס`

‫‏ניסוי‏מס'‏‪6‬‏‏‪-‬‏‏רובוט‏מקבילי ‏‬
‫‏‏‬
‫מטרה‪:‬‏‏הכרת רובוט מקבילי‪ ,‬קינמטיקה הפוכה‪ ,‬הפעלה‪.‬‬
‫‏מכשור‪ :‬רובוט מקבילי‪ ,‬שולחן מגנטי ‪ -‬משטח עבודה של הרובוט‪ ,‬בקרים‪ ,‬מחשב ‪ ,PC‬תוכנת ‪.C‬‬
‫‏‬
‫‏הקדמה‏‪:‬‬
‫רובוט מקבילי המוצג בציור פותח ונבנה במעבדה לרובוטיקה כחלק מעבודת מגיסטר בשנת ‪1996‬‬
‫רובוט זה מורכב מ‪ 7 -‬חלקים נעים ‪:‬שלשה מנועים הנעים על משטח מגנטי‪ 3 ,‬מוטות ופלטה‪ .‬ניתן‬
‫לשלוט על מיקום ‪ Y ,X‬של המנועים על המישור המגנטי‪ .‬המוטות מחוברים לפלטה ע"י ‪ 3‬מפרקים‬
‫כדוריים ולמנועים ע"י מפרקים סיבוביים‪.‬‬
‫מרכז המפרקים הכדוריים נמצא במרחק של ‪ 60mm‬ממרכז הפלטה‪.‬‬
‫אורד המוטות ‪200mm :‬‬
‫המפרקים הסיבוביים נמצאים בגובה ‪ 31mm‬מעל המשטח המגנטי‪ .‬נתון סימון מערכות צירים‬
‫ווקטורים על גבי הרובוט ‪:‬‬
‫‏עבודת‏‪-‬‏הכנה‏ ‏‬
‫‏‬
‫‪ .1‬חשב את מספר דרגות החופש של הרובוט‪.‬‬
‫‪ .2‬בהינתן מיקום ‪ q‬ואוריינטציה ‪ r‬של הפלטה ‪ :‬חשב את מיקום המנועים על מישור ה‪.XY -‬‬
‫(קינמטיקה הפוכה)‪.‬‬
‫‪ .3‬כמה פתרונות יש לבעיית הקינמטיקה ההפוכה ?‬
‫‪ .4‬במהלך הניסוי יהיה עליכם את התוכנה המפעילה את הרובוט‪ .‬עיין בקוד (מצורף בנספח)‪.‬‬
‫‪ .5‬יש לכתוב בשפת ‪ C++‬פונקציה (אשר תבניתה מופיעה בעמוד הבא) המשתמשת בערכים‬
‫הגלובליים הבאים‪:‬‬
‫‪ -q‬וקטור ‪ 3xl‬המהווה מיקום מרכז הפלטה במע' העולם‪.‬‬
‫‪ -rm‬מטריצת אוריינטציה ‪ 3x3‬של הפלטה במע' העולם‪.‬‬
‫ומחזירה ‪:‬‬
‫‪ -target‬מטריצה ‪ 6xN‬שכל עמודה בה היא קואורדינטות ‪ Y ,X‬של שלושת המנועים‬
‫'[‪ . ]x1,y1,x2,y2,x3,y3‬הגודל ‪ N‬מייצג את מספר הנקודות בהן יעבור הרובוט‪.‬‬
‫כל שיש עליכם לעשות הוא לפתור את בעיית הקינמטיקה ההפוכה‪ ,‬ולהכניס בכל צעד של‬
‫הלולאה את ה‪ X i , Yi -‬המתאימים לאותו המפרק‪.‬‬
‫הערה‪ :‬ריבוי הנקודות (המיוצג על ידי האינדקס ‪ ) i‬יתקבל מה‪ ,GUI-‬ולכן אין סיבה לדאוג‬
‫לגביו בשלב זה‪.‬‬
‫‪ . 6‬הדפס גרפים של מיקום שלושת המנועים כאשר הרובוט מבצע תנועת בציר ‪Y ,X‬וסיבוב סביב‬
‫ציר ‪ Z‬ו‪( .Y -‬גרף אחד לכל המנועים במישור ‪ .XY‬סה"כ ‪ 4‬גרפים)‪.‬‬
) ‫ ( בפונקציה זו תשתמשו במהלך הניסוי‬:‫הגדרת הפונקציה‬
#include
#include
#include
#include
"stdafx.h"
<math.h>
"globals.h"
"inverse_kin.h"
/**************** Variables for inverse kinematics
*************************************************/
/*#define N 10
#define Z 31
#define L 200
#define R 60
#define pi 3.14159265
volatile
volatile
volatile
volatile
volatile
volatile
float target[6][N+1]; //holds all the motors possitions in motion plan
int i; //holds the number of moves in the motion plan
int state; //1 - direct control, 2 - inverse kinematics
float q[3][N+1]; //holds all the translation vectors in motion plan
float n[3][N+1]; //holds all the rotation vectors in motion plan - not normalized
float rm[3][2]; //holds the rotation matrix
/*****************************************************************************************
************/
void inverse_kin()
{
static float theta[]={-1.04719755,3.14159265,1.04719755};
static float alpha[]={2.09439510,0,4.18879020};
float px, py, pz, beta;
int j;
double Xi,Yi;
//[rad]
//[rad]
/************************************* student's code******************************/
for (j=0;j<=2;j++)
{
Xi =
Yi =
/************************************* end of student's code
*****************************************/
// System information - do not change
target[2*j][i]= Xi;
target[2*j+1][i]=Yi;
}
} /* end of InverseKinematics */
//xi
//yi
‫‏תרגילי‪-‬מעבדה‏‪:‬‏ ‏‬
‫‏‬
‫‪ .1‬הכנת הרובוט להפעלה‬
‫א‪ .‬הדלק מחשב‪ .‬הורד מהרובוט אמצעי הגנה נגד לחות‪.‬‬
‫ב‪ .‬פתח ווסת לחץ אוויר עד לקבלת לחץ של ‪( 3bar‬לפי מדיד לחץ)‬
‫ג‪ .‬וודא (ע"י הזזה ידנית של המנועים) שהמנועים נעים על המשטח המגנטי ללא‏חיכוך!‬
‫ד‪ .‬הצמד את שלשת המנועים (לפי ציור המצורף) והפעל את הבקרים‪ .‬וודא שכל הבקרים נמצאים‬
‫במצב פעיל (נדלקה מנורה ירוקה על כל בקר)‪.‬‬
‫ה‪ .‬הפעלת הרובוט – רק באישור סופי של המתרגל‪.‬‬
‫‪ .2‬הפעל תוכנת ‪ Lab6‬שמצאת על שולחן העבודה‪.‬‬
‫‪ .3‬לחץ על כפתור ‪ .homing and start using direct control‬שיטת השליטה במנועים תהיה ישירה ושדה‬
‫השליטה הישירה יהפוך לזמין‪ .‬במצב זה‪ ,‬עבור כל נקודה שתרצו להניע את הרובוט עליה יש להזין את ערכי‬
‫הקורדינטות הרצויות של כל מנוע וללחוץ על כפתור ה‪ .insert-‬לחיצה על כפתור זה תבצע השמה של‬
‫הקורדינטות שיהיו כתובות בשדה זה כצעד הבא בתור בתכנון המסלול‪ .‬לאחר סיום הכנסת הנקודות יש‬
‫ללחוץ על כפתור ‪ move the robot‬בכדי להניע את הרובוט‪.‬‬
‫‪ .4‬הוסף לשם תנועה של הרובוט ‪ mm 08‬בכיוון ‪100mm ,X‬בכיוון ‪ ,Y‬עליה וירידה של ‪ 20mm‬בציר ‪ Z‬הדגם‬
‫את פעולת הרובוט למדריך המעבדה‪.‬‬
‫‪ .5‬סגור את תוכנת ‪.Lab6‬‬
‫‪ .6‬שמור את תוכן התיקייה ‪ C:\Lab6‬לתיקייה ‪. C:\Students\your_name‬‬
‫‪ .7‬פתח את הקובץ ‪C:\Students\your_name\parallel_arik_dotan.sln‬‬
‫‪ .0‬יופיע על המסך חלון של סביבת העבודה ‪.Microsoft Visual Studio‬‬
:‫ בצורה הבאה‬InverseKinematics.cpp ‫ יש לפתוח את הפונקציה‬.9
2
3
4
1
.solution Explorer ‫ללחוץ על לשונית‬.1
.parallel_arik_dotan ‫להרחיב את‬.2
.Source Files ‫להרחיב את‬.3
.InverseKinematics.cpp ‫ללחוץ לחיצה כפולה על‬.4
‫‪ .18‬לאחר שפתחת את הפונקציה ‪ InverseKinematics.cpp‬הוסף את הקוד הדרוש (מדו"ח הכנה)‪.‬‬
‫‪ .11‬לאחר שהוספת את הקוד יש ללחוץ על כפתור בצרת חץ ירוק (או ‪ )F5‬כדי לקמפל את כל הקוד ובנוסף‬
‫להריץ אותו‪.‬‬
‫‪ .12‬לאחר שהצלחת יפתח לך ה‪ GUI -‬כמו בחלק הראשון של המעבדה רק שהפעם יש אפשרות לבחור להפעיל‬
‫את ‪.homing and start using inverse kinematics‬‬
‫‪ .13‬עתה יש לחזור על סעיף ‪( 4‬השתמש בפונקציה ‪ )InverseKinematics‬והוסף סיבוב של ‪ 20‬מעלות סביב‬
‫ציר ‪ Z‬וציר ‪.Y‬‬
‫הדגם את פעולת הרובוט למדריך המעבדה‪.‬‬
‫דו"ח‏סיכום‏‪:‬‏ ‏‬
‫‏‬
‫‪ .1‬פרט את המקורות לשגיאות של הרובוט‪ ,‬כיצד ניתן להתגבר עליהן?‬
‫‪ .2‬הסתכל באטלס של רובוטים מקבילים של ‪( Jean-Pierre Merlet‬דרך אתר המעבדה)‪.‬‬
‫‪ .3‬הסבר בקצרה מהם ההבדלים בין רובוטים טורים ורובוטים מקבילים‪.‬‬
‫השווה בין התכונות של רובוטים טורים ומקבילים‬
‫‪ .4‬הצע דרך לפתרון הקינמטיקה הישירה של הרובוט‪( .‬אין צורד לפתור)‪.‬‬
‫‪ .5‬צרף לדו"ח את הקוד של פונקציות ‪InverseKinematics :‬‬
‫חומר‏עזר‏רלוונטי‏לניסוי‏‪:‬‏ ‏‬
‫‏‬
‫עבודת מסטר של מר בן‪-‬חורין רונן ‪" -‬מניפולטור מקבילי בעל שש דרגות חופש עם שלוש חוליות‬
‫מונעות מישורית"‪ ,‬הנמצאת בספרית להנדסת מכונות‪.‬‬