Как да се изгради робот - избягване на препятствия

Robots that fly ... and cooperate | Vijay Kumar (Април 2019).

Anonim

Как да се изгради робот - избягване на препятствия


Част пета от поредица от статии за изграждането на робот, който може да следва линиите или стените и да избягва препятствията!

Свързани статии

Как да изградим робот:

Част 1: Дизайн и схематичност

Част 2: Дизайн на печатни платки

Част 3: Тестване на хардуера

Част 4: Последовател на линията

Част 6: Стенен робот

Преглед

Мислех, че би било добре да се създаде робот, който е лесно да се съчетае с една спойка и също е достъпен. За моя робот направих следните изисквания:

  • Много комплекти са скъпи, така че трябва да са относително евтини.
  • Той трябва лесно да се сглоби без специално оборудване.
  • Той трябва да бъде лесно програмируем без сложен IDE или програмист.
  • Той трябва да е достатъчно мощен за разширяване.
  • Тя трябва да изтича от прост източник на енергия.
  • Трябва да може да следва линия или стена и да избягва препятствията.

В тази статия ще говоря за това как да програмирате робота, за да избегнете пречките.

Избягване на препятствията

Подходът, който ще предприемем, е, ако в пътя на робота се открият препятствия, роботът ще подкрепи и ще опита нова посока. Това позволява на робота да изследва областите, без да се забива или да се повреди. Сензорът, който се използва в този робот, дава само двоичен изход. С други думи, нещо е или по пътя, или не. Сензорът има и доста широк ъгъл на приемане, така че могат да бъдат открити и обекти, които са леко изкривени отстрани. Това ограничава сложността на алгоритъма, който може да се използва. Ако имахте сензор, който действително може да измерва надеждно разстоянието до обект, можете да изчислите дали имате достатъчно радиус на завой, за да се измъкнете от пътя, без да се връщате назад.

Алгоритъмът, на който реших, ще каже на робота да се захване за 1 секунда, ако се установи препятствие. След това на случаен принцип ще се обърне наляво или надясно, за да се избегне препятствието. При завиване наляво или надясно продължава да проверява за препятствия по пътя. Ако той открие препятствия, той ще спре да завърта и ще повтаря цикъла на заден ход / завой, докато се освободи от препятствието.

Програмиране

Следната скица изпълнява логиката:

  1. Стартирайте драйвера на робота и изчакайте 5 секунди. Това ви дава време да поставите робота, където го искате, преди да започне да се движи.
  2. Продължавай напред.
  3. Ако средният датчик е активиран, обърнете за 1 секунда.
  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); } } 

Избягване на препятствия!

заключение

В тази статия показах как може да използвате датчик, за да избегнете препятствие с робот. Премахването на препятствията е важно в автономните превозни средства, за да се избегне увреждането на околната среда или на самия робот. Едно важно допълнение към този робот са сензорите отзад, за да се избегнат препятствията, когато се обърне. В следващата статия ще направя следната стена, като се възползвате от страничния сензор!

Следващ статия в серията: Как да създадем робот за стена

Изтегляне на кода