כיצד לבנות רובוט - הימנעות מכשולים

רעב? תן ביס ! אפליקציית משלוחי האוכל של ישראל (פרסומת גבינה) (פברואר 2019).

Anonim

כיצד לבנות רובוט - הימנעות מכשולים


חלק חמישי של סדרה של מאמרים על בניית רובוט שיכול לעקוב אחר שורות או קירות למנוע מכשולים!

מאמרים קשורים

איך לבנות רובוט:

חלק 1: עיצוב סכמטי

חלק 2: עיצוב PCB

חלק 3: בדיקת חומרה

חלק 4: שורה עוקב

חלק 6: רובוט לאחר הקיר

סקירה כללית

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

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

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

הימנעות מכשולים

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

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

תִכנוּת

הרישום הבא מבצע את ההיגיון:

  1. הפעל את מנהל ההתקן של רובוט והמתן 5 שניות. זה נותן לך זמן לשים את הרובוט שבו אתה רוצה את זה לפני שהוא מתחיל לזוז.
  2. להתקדם.
  3. אם החיישן האמצעי מופעל, הפוך למשך שנייה אחת.
  4. בחר באקראי שמאלה או ימינה.
  5. הפעל עד 1 שנייה כל עוד החיישן האמצעי אינו מופעל.
  6. אם החיישן האמצעי מופעל, עבור לשלב 3.
  7. אם החיישן אינו מופעל, עבור לשלב 2.

 #include "robot.h" void setup() { Serial.begin(38400); Serial.println("Boot"); rbt_init(); delay(5000); rbt_move(FWD, 100); } uint16_t lleft, lmid, lright; boolean wleft, wmid, wright; uint16_t avoid_count=0; void loop() { rbt_sns(&lleft, &lmid, &lright, &wleft, &wmid, &wright); /*reverse if something is in the way and try to change direction*/ if(wmid) { rbt_move(REV, 100); delay(1000); /*choose a direction at random to avoid an obstacle*/ if(random(10)>5) { rbt_move(LEFT, 100); avoid_count=1000; while(avoid_count){ delay(1); rbt_sns(&lleft, &lmid, &lright, &wleft, &wmid, &wright); if(wmid) break; } } else { rbt_move(RIGHT, 100); avoid_count=1000; while(avoid_count){ avoid_count--; rbt_sns(&lleft, &lmid, &lright, &wleft, &wmid, &wright); if(wmid) break; } } rbt_move(FWD, 100); } } 

הימנעות מכשולים!

סיכום

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

המאמר הבא בסדרה: כיצד לבנות רובוט לאחר הקיר

הורד קוד