Sari la conținut
ELFORUM - Forumul electronistilor

robot: cartografiere camera


Vizitator

Postări Recomandate

vreau sa fac un robot, care pentru propria deplasare, sa poata cartografia o incapere (de ex. un living). 

am vreo sansa cu un arduino mega de exemplu, sau e prea depasit de situatie ?

Link spre comentariu
  • Răspunsuri 14
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • one

    2

  • sesebe

    2

  • nico_2010

    2

  • Bandi Szasz

    2

Top autori în acest subiect

Locul topicului este la sectiunea "Idei si sfaturi", unde va fi mutat!

In momentul in care subiectul va contine si ceva concret, initiatorul poate cere mutarea in sectiunea "Arduino".

Pentru initiatorul topicului: Daca eu vreau sa fac un detector de pitici de gradina controlat de un procesor I386 unde postez subiectul, la sectiunea IT?

Este retorica intrebarea!

Editat de nico_2010
Link spre comentariu

Mai demult am cumparat un aspirator de la Samsung care avea o camera video orientata in sus. Astfel se orienta rapid si se pare ca invata "harta" casei in care aspira.

Dar nu sunt foarte sigur de asta. Majoritatea robotilor pentru curatenie au un algoritm de parcurgere.

Probabil ca se poate face si cu Arduino ceva asemanator, mai ales daca se adauga ceva senzori, printre care cel mai important ar fi un senzor optic pentru localizarea bazei de incarcare, si in functie de aceasta si de distanta parcursa pana la obstacole se poate face o harta de tip "radar", numai ca ar fi mai complicat de cartografiat in spatele obstacolelor, daca acestea ar putea fi ocolite. Cea mai mare limitare a arduino ar fi memoria, dar cred ca se poate adauga una externa.

 

Link spre comentariu

Roomba foarte mult timp nu folosea un sistem foarte inteligent de navigare, in fata avea o bara de protectie cu care se buseste usor de obstacole si isi schimba directia dar nu stie foarte precis pe unde a fost si astfel parcurge acelasi loc de mai multe ori.

 

Samsung foloseste o camera video care monitorizeaza plafonul si isi creaza o harta cu puncte de repere astfel stie unde a fost si unde nu, de asemenea stie sa navigeze mult mai precis de la un punct la altu fara sa se abata foarte mult de la cel mai drept drum posibil. Roomba la intoarcerea la statia de incarcare se plimba destul de mult daca este intr-o alta camera si nu vede semnalul IR pana gaseste usa sa intre in cealalta camera. Samsung-ul pe baza hartei facute din poze stie exact cum sa dea de usa si pe parcurs se mai opreste putin si isi ajusteaza directia inspre usa astfel in momentul in care ajunge in dreptul usi e aproape exact in centrul usii. De asemenea se lauda ca ar retine unele repere in memorie si in timp isi poate optimiza deplasarea stind in avans ca in anumite locatii in repetate randuri a dat de un obstacol.

 

Xiaomi foloseste un senzor optic cu Laser (LIDAR) cu care scaneaza incaperea 360.

 

Intoarcerea la baza de reincarcare se face pe baza de senzori IR, baza emite continu un semnal scurt de localizare, cand robotul vrea sa revina si gaseste acel semnal slab de localizare transmite un semnal pentru statia de baza care in momentul acela iese din modul low power si incepe sa ghideze robotul cu 2 LED-uri IR montate la 45 de grade unu-l fata de celalalt.

 

Cel mai usor de implementat daca vrei ceva care sa navigeze destul de precis intre doua puncte  probabil va fi ceva similar cu Xiaomi si un modul LIDAR ( se gasesc ca piese de schimb), poate face fata si un arduino mega la procesare. 

 

Link spre comentariu
Acum 31 minute, Bandi Szasz a spus:

Cel mai usor de implementat daca vrei ceva care sa navigeze destul de precis intre doua puncte  probabil va fi ceva similar cu Xiaomi si un modul LIDAR ( se gasesc ca piese de schimb), poate face fata si un arduino mega la procesare. 

 

Putin probabil. Nu prea poti compara un uC care are 2Mb memorie flash si RAM de 1256kb si functioneaza la 180MHz cu Arduino Mega (ATmega2560), care are 256kb flash, 8kb RAM si frecventa de lucru 16MHz.

L.E. STM32F429: " Performance: At 180 MHz, the STM32F429/439 deliver 225 DMIPS/608 CoreMark performance executing from Flash memory, with 0-wait states thanks to ST’s ART Accelerator. The DSP instructions and the floating point unit enlarge the range of addressable applications. "

Editat de nico_2010
Link spre comentariu

Asta este ca si cum ai vrea sa faci cu un Logan (pt ca se gaseste usor si-i este cunoscut modul de functionare) curse de dragstere.

Arduino nu este altceva decit o jucarie, mai mult sau mai putin sofisticata in functie de varianta. nu este un modul proiectat sa faca calcule complexe la viteza mare.

Este bun pt automatizari chiar complexe dar nu va depasi cu mult nivelul unui modul conceput mai mult pt invatare.

Link spre comentariu

pe mine m-ar interesa ca robotul sa stie unde se afla in spatiu dupa ce "observa" un obstacol sa memoreze pozitia.

ce senzori sa pun  ? nu stiu ma gandeam la un imu ca sa am si compas si giroscop, ultrasunete si motoare cu encoder..si poate ceva contacte pe carcasa.

 

am postat la arduino pentru ca ma gandeam ca poate cineva a facut niscai incercari pe aceasi tema.

 

apropo de arduino sau microcontrolere de genul. si eu aveam si am o reticenta in privinta asta, motiv pentru care am postat.

dar la o adica se pot pune mai multe. problema ca nu am inca o idee clara cum sa fac sa memoreze robotul pozitia obiectelor detectate.

 

chestia asta e mai mult curiozitate, nu stiu daca o sa ma lansez intr-un proiect neaparat cu el.

Link spre comentariu
  • 2 săptămâni mai târziu...

Busola in casa ar putea sa iti dea indicatii eronate.

Giroscop are sens daca il corectezi cu busola din cand in cand deci tot la busola ajungi.

Ultrasunete si motoare cu encoder da, dar asta inseamna destule calcule si precizia mare va cere putere de calcul. Ma indoiesc ca dupa catva timp vei putea avea o indicatie precisa a pozitiei. Ce se intampla daca o roata aluneca putin? S-a dus tot algoritmul tau de calcul co encodere si giroscop.

Ultrasunete? Hm, daca ai un fotoliu dau o canapea cu tapiteria pana jos s-ar putea ca ultrasunetele sa fie absorbite.

Daca ai o singura camera, o solutie ar fi utilizarea unei camere de tipul OV7670 pe robotul tau si plasarea pe plafon a unor led.uri colorate diferit si calcularea pozitiei in functie

 de imaginea receptionata.

Link spre comentariu

Am testat cu ultrasunete ( senzorii aceia comuni .. hc-sr04 si variatii pe tema). Un senzor de genul e relativ precis daca rulezi in spate un soft ce pondereaza 10-15 masuratori si deci iti scoate o medie a ce masoara senzorul. Problema apare ca in realitate vei folosi mai multi si apar tot felul de interferente intre ei. In cazul meu, aveam 4 senzori din care 3 in plan frontal (pe unghiuri diferite) si unul in spate. Solutia pe care am gasit-o este folosesc fiecare senzor intr-o succesiune in asa maniera cat simultan niciodata sa n-am 2 senzori activi. Gen: senzor 1 - cateva milisec apoi OFF, senzor 2 - alte cateva milisec apoi OFF etc. Chestia asta am facut-o pe chestii gen raspberry pi, android etc. Duce fara probleme. Inconvenientele apar altundeva: 

Senzorii n-or sa vada obiecte inguste gen picioarele unei mese, cabluri etc. Raza in care scoti precizii rezonabile e relativ limitata. Ocazional apar varii interferente ce vor produce masuratori eronate (ecouri, probleme de timing, etc). 

Obtii in final o jucarie desteapta dar nu uita.. o jucarie. 

Atentie ca senzorii sr04 sunt printre cei mai contrafacuti senzori de pe piata. Performantele depind vast de ce exemplare reusesti sa nimeresti. 

 

Daca vorbim de recunoastere vizuala la nivel de mai mult decat recunoasterea unei/unor culori de baza si chestii de genul, vei tinde sa depasesti masiv ce poate face un arduino. 

Editat de matzah
Link spre comentariu
  • 1 lună mai târziu...

eu ma gandeam sa folosesc sonare si infrarosu. dar hai sa incercam un alt scenariu. validae a intuit corect. vreau sa incerc sa refac un aspirator de genul roomba, doar ca asta e un Bissell, are in dotare senzori IR dar as putea sa-i atasez ceva sonare mobotix si un IMU. in plus are 3 contacte (digitale) pe partea frontala.

 

ma gandeam...cum s-ar comporta si ce probleme ar aparea, daca sa zicem i-as face o mapa de executat, in timp ce-ar fi ajutat si de senzori la intalnirea unui obstacol neprevazut, sa devieze si revina pe traseul initial. de genul...inainte 230cm, viraj stanga la 90 grade, inainte 80cm...etc. nu stiu daca motoarele au encodere, probabil au. evident o sa fie dificil sa calculezi distanta parcursa cand faci viraje sau ocoliri. 

 

 

 

ce idei constructive sau impotriva acesti idei ar fi de spus ?

Editat de Vizitator
Link spre comentariu

O mapa de executat ma indoiesc ca vei reusii, exemplu clar Smasung Powerbot seria R9xxx la care au incercat o functie de cartografiere prin care sa invete incaperile ( fiecare camera in parte ) si dupa de pe telefon doar sa ii dai comanda gen curata camera Nr 2, la care el ar trebuii sa stie sa navigheze pana in camera respectiva. Au investit o gramada de bani pe soft si hardware ce implica diferite senzori printre care si o camera video care fotografieaza plafonul iar rezultatul lasa de dorit, in 60% din timp se intoarce la statia de incarcare cu mesajul ca nu a putut gasi incaperea respectiva. 

 

Doar cu encoderele de la motor o sa se abata foarte mult de la drum, mai ales daca ai si covor. Eu am un Powerbot J9040 si cand urca pe covor patineaza destul de tare pana reuseste sa se suie, iar daca prinde marginea covorului la un viraj aluneca cu totul pe parchet pana reuseste sa ia virajul si apoi incearca sa se suie pe covor drep cu ambele roti. Nu stiu exact ce sensori are dar oricat ar patina chiar si in viraje nu se pierde, se invart rotile in gol si tot stie ca inca nu a luat complet virajul, probabil are busola/giro ajutat cu camera video. 

 

Eu ti-as sugera sa incerci mai intai sa faci o replica la primele modele de Roomba care se foloseau de cele 3 contacte frontale pe care inteleg ca le ai si tu iar in momentul in care se lovea ceva facea un viraj 90 se deplasa putin apoi inca un viraj 90 si dupa drept inainte pana se mai lovea de ceva. Nu o sa obtii ceva foarte calculat in sensul in care posibil sa treaca peste anumite locuri de nenumarate de ori si peste alte locuri sa nu treaca deloc dar este un punct de plecare. Si dupa poti incerca sa implementezi ceva cu encoderele si sa ti cont cam cat si in ce directie s-a deplasat, in felul acesta o sa ai o idee vaga cam pe unde se afla si pe unde nu a fost si sa incerci sa-l navighezi in directia respectiva

Editat de Bandi Szasz
Link spre comentariu

pentru proiect ar ajunge un ATmega 2560 dar mult mai util ar fi un microcontroler care are instuctiuni orientate pe biti pentru operatii cu memoria si calcule (cum sunt microcontrolere NEC bazate pe arhitectura Z80 sau altceva bazat pe arhitectura x86). Daca microcontrolerul folosit are instuctiuni orientate pe biti, viteza creste foarte mult pentru-ca calculele se pot simplifica mult.  Pentru a masura distanta trebuie senzori IR cu o precizie cat mai mare. Un senzor care ar putea masura toata lungimea camerei, ar fi foarte bun. Este bine sa aiba 8 senzori indreptati in toate directiile (din 45 in 45 grade), pentru-ca tot timpul robotelul sa se orienteze intotdeauna dupa un obstacol sau obstacole pe care le stie (peretii camerei sunt baza).  Harta in memoria interna si-o poate face simplu, asemanator programelor de pe spectrum pentru desenat cablaje, doar ca traseele de cablaje reprezinta traseele robotelului. Camera o imparti in bucatele de cate 1cm patrat. Fiecarui centimetru patrat i se aloca un bit. 1=obstacol, 0=liber. Pentru o camera de 5 x 4 metri e nevoie de 500 x 400 = 200000 biti adica 25000 octeti. Daca vrei precizie mai mare, memoria necesara pentru o camera creste foarte mult si daca trece de 64K calculele devin greoaie pentru procesoare pe 8 /16 biti si trebuie sa treci la procesoare pe 32 biti. Pentru calcule mai putine si mai simple, e preferat ca sa isi schimbe directia doar cu 90, 180 sau 45 grade. Intotdeauna trebuie sa isi corecteze pozitia dupa harta pe care o are in memorie, dar daca intalneste cava nou (obstacol nou sau lipsa obstacol) sa poata actualiza harta incaperii. In felul asta nu are nevoie de busola sau senzori care sa masoare pe roti distanta pe care o parcurge. Pentru memorie mai multa se poate folosi o memorie flash (SD card) in care sa memoreze camera sau toate camerele dintr-o casa iar procesorul sa citeasca doar portiunea de harta de care are nevoie.

Daca folosesti C pentru a scrie programul, ma indoiesc ca o sa reusesti sa faci maparea hartii pe octeti (fara sa lasi octeti liberi) sau sa faci calculul pozitiei unui bit pe harta in functie de coordonatele X si Y. De viteza cu care procesorul face aceste calcule, depinde foarte mult si viteza cu care se poate orienta robotelul. Ca idee: pozitia unui bit pe harta in functie de coordonatele X si Y se poate calcula asemanator calcului pozitiei unui pixel pe ecranele LCD B/W.

Editat de cimitavita
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări