הייתי רוצה לבנות: עכביש רובוטי

עובדים על פרוייקט? ספרו לכולם על תהליך העבודה. תנו לנו ללמוד מכם!
שלח תגובה
סמל אישי של משתמש
Alex
מנהל האתר
הודעות: 763
הצטרף: ה' ינואר 28, 2010 8:27 pm

הייתי רוצה לבנות: עכביש רובוטי

שליחה על ידי Alex »

שלום לכם!

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

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

אז השרשור הזה יוקדש לרובוט עכביש. כזה עם 6 רגליים (לפחות), כאשר כל רגל עצמאית בתנועה.
בראש כרגע אני רואה שלכל רגל יש 2 חלקים נעים (שני שלבים), וכל רגל תוכל להסתובב על הציר שעל גוף הרובוט.
כלומר 3 מנועים לכל רגל. אחד במפרק בין שני השלבים של הרגל, שני בבסיס של הרובוט כדי להרים ולהוריד את הרגל כולה והשלישי כדי לסובב את הרגל בציר האנכי כדי לייצר "תנועת חתירה".
ציור כנראה היה עוזר כאן, אבל אני לא כל כך טוב בציורים וגם אין לי זמן לצייר אותם.

למה עכביש? למה לא? :)
אני רוצה משהו שונה מהדברים הרגילים על גלגלים. זה גם די מאתגר לבנות משהו כזה.

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

עכביש כזה יוכל לעבור את המדרגה והשטיח, בתאוריה נראה לי שהוא יוכל גם לעלות ולרדת במדרגות.

פרוייקט כזה די מסובך גם מכאנית וגם במערכת הבקרה כדי להזיז את כל הרגליים יחד.
www.4project.co.il
כל הרכיבים לפרוייקט שלכם
סמל אישי של משתמש
Alex
מנהל האתר
הודעות: 763
הצטרף: ה' ינואר 28, 2010 8:27 pm

Re: הייתי רוצה לבנות: עכביש רובוטי

שליחה על ידי Alex »

טוב, זו הייתה הקדמה, עכשיו קצת פרטים טכניים...

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

אבל יש כמה בעיות שאני רואה... למשל העובדה שהם לא מאפשרים תנועה ב-180 מעלות (לפחות) ואני הייתי רוצה שהרובוט יוכל "לעמוד זקוף" על כל הרגליים שלו כשצריך לטפס לגובה ומצד שני שיוכל לקפל את הרגל כמה שיותר כדי שיתפוס פחות מקום כשהוא במנוחה.

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

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

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

אם אני מוותר על מנועי הסרוו, אני נשאר עם ממנועי צעד ומנועי DC רגילים.
מנועי צעד יוכלו לסובב את הציר בזווית הרצויה, אבל הם לא באים בחשבון כי הם גדולים, כבדים וזוללים זרם כל הזמן, גם כשהם לא זזים.

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

מכאן מגיעים לבעיה אחרת - כמות המידע שיגיע מכל האנקודרים. מנוע כזה למשל עם אנקודר מובנה:
https://www.pololu.com/product/2288
מייצר 8256 פולסים מהאנקודר לסיבוב אחד את ציר היציאה שלו! צריך 3 מנועים לרגל, 6 רגליים... זה המון פולסים לספור!
טוב, אולי לא כל המנועים יהיו DC עם אנקודר, אולי רק 2 לכל רגל... זה עדיין המון פולסים!

מיקרובקר אחד כנראה לא יוכל להתמודד עם כמות כזו של מידע וגם אם כן, לא בטוח שיוכל להפעיל את כל המנועים פחות או יותר במקביל וגם במהירות סבירה.
מה עושים? כנראה צריך מיקרובקר קטן לכל רגל.
הייתה לי גם מחשבה לכיוון אחר... בגלל שכל מה שהבקר הקטן הזה צריך לעשות זה לספור את כמות הפולסים וטיפול בפולסים כאלה נעשה בדרך כלל ע"י שימוש בפסיקות שבעצמן לוקחות זמן, אולי כדאי להשתמש במונה "חומרתי" (בבקר הספירה נעשית ע"י הרצת תוכנה, כך שאפשר להסתכל על הפתרון של הבקר כ"תוכנתי"). הרעיון הוא שהבקר יתכנת את המונה ה"חומרתי" כמה לספור, הוא יספור את כל הפולסים מהאנקודר ויתן פסיקה למיקרובקר הראשי כשספר את כמות הפולסים הרצויה. כך הבקר הראשי יהיה פנוי לעשות דברים שונים, כמו להזיז את כל הרגליים יחד למשל.
www.4project.co.il
כל הרכיבים לפרוייקט שלכם
סמל אישי של משתמש
Alex
מנהל האתר
הודעות: 763
הצטרף: ה' ינואר 28, 2010 8:27 pm

Re: הייתי רוצה לבנות: עכביש רובוטי

שליחה על ידי Alex »

אני די בטוח שאפשר לבנות את הלוגיקה ה"חומרתית" הזו מרכיבי TTL סטנדרטיים, אבל זה יצא כנראה יצא די גדול ומסורבל. ראיתי שיש מונים (counters) של 8 ביט ברכיב אחד. 8 ביט זה רק 256 פולסים מה שכמובן לא מספיק. צריך יהיה לחבר כמה רכיבים יחד כדי לקבל את מה שרוצים וזה רק בשביל מנוע אחד.

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

אם אתם שואלים מה זה רכיב שערים מתוכנתים, אז תחשבו על לוח עם הרבה שערי AND, OR, XOR, NOT, FlipFlops וכו' מסודרים בכמה עמודות כאשר החוטים של הכנוסות והיציאות שלהם פרוסים לכל אורך הלוח (משמאל לימין) כך שהם מקביליים אחד לשני ולא מתחברים ביניהם.
עכשיו תחשבו שאתם מניחים חוט מלמעלה למטה כך שהוא חוצה את כל הכניסות והיציאות של הרכיבים הלוגיים וקובעים באילו נקודות החוט יתחבר אליהם.
כך בעצם אפשר לייצר מטריצת חיבורים בין כל הרכיבים הלוגיים ברכיב, לייצר מונים או תאי זכרון בעזרת ה-FlipFlops ועוד הרבה דברים אחרים.
כדי לתכנת את הרכיב לא יושבים ומציירים את המטריצה, אלה כותבים תוכנית פשוטה בשפת assembler בה מגדירים לדוגמא יציאה א' תהיה שווה לכניסה א' AND כניסה ב' OR כניסה ד' והקומפיילר כבר יעשה את כל החישובים איפה לחבר את החוטים של המטריצה.

יש מקרים בהם רכיב כזה יעשה את העבודה הרבה יותר טוב ומהר יותר ממיקרובקר. דוגמה הזו בפרוייקט לדעתי הוא אחד המקרים האלה.
www.4project.co.il
כל הרכיבים לפרוייקט שלכם
סמל אישי של משתמש
Alex
מנהל האתר
הודעות: 763
הצטרף: ה' ינואר 28, 2010 8:27 pm

Re: הייתי רוצה לבנות: עכביש רובוטי

שליחה על ידי Alex »

חשבתי על עוד סוגיה שהרובוט צריך לטפל...

איך הוא ידע מתי צריך להפסיק להוריד את הרגל ושהיא כבר עומדת על הרצפה?
אם הייתי רוצה שהעכביש ילך רק על רצפה ישרה, אז אין שום בעיה... הרמתי רגל ל-5 ס"מ, אז צריך להוריד את הרגל 5 ס"מ.

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

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

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

נראה לי שכתבתי את רוב הרעיונות שהיו לי... אשמח לראות תגובות או מישהו שיבנה משהו דומה :)

מבחינתי זהו פרוייקט בעדיפות נמוכה, אולי אממש את הרעיון כשאהיה ממש משועמם ולא אדע מה לעשות עם עצמי :)
אבל יש בו הרבה עניין ואתגרים לא קלים, גם מבחינה מכאנית וגם בתוכנה כדי לנהל את כל המכלולים של הרובוט, ויש עוד הרבה שלא הזכרתי, כמו התמצאות למשל.
www.4project.co.il
כל הרכיבים לפרוייקט שלכם
שלח תגובה