Robotul are scopul de a se deplasa intr-un spatiu cu obstacole de orice tip si de a le ocoli cand este posibil. Vreau sa devina in totalitate autonom incat sa se descurce cu orice situatie sau obstacol.
Modul in care va face asta este simplu. Voi folosi senzori infrarosu de masurare a distantei pentru a lua decizii despre miscarea motoarelor.
Robotul se misca in mod normal in fata, cu viteza constanta. Cand este luata decizia de schimbare a directiei se mareste viteza unuia dintre motoare pe durata cat senzorii detecteaza obstacole. In cazul in care ambii senzori vad un obstacol, o posibilitate de a il evita este sa se intoarca si sa incerce o alta directie. In implementarea mea, dupa miscarea inapoi se face o rotire pe loc. De aici si singura conditie pentru a evita orice obstacol este sa aiba spatiu macar pentru a se roti pe loc.
Diagrama bloc este urmatoarea:
Unitati componente:
Piesele folosite:
Modulul de control a fost realizat pe o placa de test. Schema este urmatoarea:
Senzorii au fost plasati spre interiorul robotului pentru a evita distantele de sub 10 cm ce nu pot fi masurate corect.
De asemenea, am incrucisat directiile celor 2 senzori (cel din stanga vede in dreapta si invers)
pentru a largi campul vizual si pentru a nu “rata” obstacole din mijloc.
Tractiunea este realizata de 2 motoare prin cutia de viteze Tamiya, configurata la cel mai mare raport de reductie (203:1)
Mediu de dezvolate: Eclipse cu plugin-ul AVR
Pentru comanda motoarelor am folosit ambele canale ale Timer1 in mod FastPWM. Logica de functionare este urmatoarea:
Senzorii Sharp scot la iesire o tensiune ce reprezinta distanta masurata ce respecta dependeta din datasheet. Programul nu calculeaza distanta, in schimb am gasit niste praguri de tensiune corespunzatoare unor distante pentru care robotul functioneaza corect.
Robotul functioneaza dupa cum mi-am propus. Aproape ca nu exista situatie in care sa ramana blocat, exceptand cazurile in care nu are loc nici macar sa intoarca pe loc.
Cel mai bine ocoleste obstacole de culoare alba pentru ca acestea reflecta cel mai bine lumina de la senzori. L-am testat prin casa si peretii albi sunt detectati de la cea mai mare distanta, aproape de limita senzorilor.
Am testat evitarea obstacolelor si intr-un scenariu mai complicat: o zona ingradita, dar cu un singur loc de acces, o iesire, ceva mai mare decat robotul. Dupa cateva “ture”, reuseste sa gaseasca iesirea pentru a-si continua drumul.
Spre final am adaugat o noua functionalitate: un semnal audio intermitent, determinat de distanta masurata de senzori, asemanator unui sistem de senzori de parcare pentru masina.
Dimensiunile sunt destul de mari, dar asta se datoreaza acumulatorului care este supradimensionat pentru consumul necesar. Am hotorat sa folosesc ce aveam decat sa cumpar unul.
Proiectul mi se pare interesant in primul rand pentru ca robotul a devenit in totalitate autonom. Algoritmul de conducere este destul de simplu, dar reuseste sa scoata robotul din orice loc ar ajunge.
Nu mi s-a parut dificil de realizat, dar asta si din cauza ca am facut-o cu pasiune si aveam de mult dorinta de a construi un astfel de robot. Acum practic am o platforma, nu un robot, pe care o pot extinde si specializa aproape in orice scop.
Surse: pm_robot_obstacole3.zip