Zizou v1.0

Introducere

Scop: participarea la Robochallenge, la proba de fotbal.

Responsabilitățile studenților din echipa de la concurs:

1. Bărbulescu Mihai 331CA - modulele electronice (schematic, PCB design, debugging)
2. Cătuneanu Mircea 333AB - mecanica + asamblare
3. Stratulat Adrian 331CA - cod OpenCV pe RaspberryPI (procesarea imaginilor)
4. Traistă-Popescu Vlad 331CA - cod Atmega (recepția serială, preluarea informațiilor de la senzori, deciziile trimise către motoare etc.)

Descriere generală

Regulile pentru implementarea robotului:

  • Dimensiuni: 25 cm x 25 cm, fără limită de înălţime, maxim 4 kg. Nu trebuie să aibe ventilatoare care să sufle mingile puternic și să fie imposibil pentru oricine să poată culege mingile de pe teren.
  • Teren: dreptunghi 2.5 m – 1.25 m, făcut din lemn si acoperit cu banda autocolanta de culoare alba pe o jumatate de teren si de culoare neagra pe celalata jumatate. În fiecare capăt al terenului se gaseste o poarta cu latime de 30 cm si inaltime de 12 cm prevazuta cu un led alb puternic in centru, la inaltimea de 16 cm. Pe suprafata neagra, poarta si careul au culoarea alba si invers pe suprafata alba. Careul este un semicerc cu raza de 22 cm.
  • Desfășurarea unui meci: 2 roboți, plasați în câte o jumătate, se luptă pentru 12 mingi de ping-pong portocalii și trebuie să bage mai multe mingi în poarta adversă decât înscrie adversarul. Un meci durează 2 minute și 30 de secunde. La început, ambii roboți trebuie să aștepte 5 secunde înainte de a porni la joc.

Mai multe detalii despre regulament pe pagina oficiala

Schema bloc

Detalii schemă bloc:

  • Senzorul de teren trimite constant informații despre terenul în care mă aflu. La început salvează într-o variabilă terenul propriu
  • Senzorii de obstacol sunt folosiți pentru evitarea pereților și a adversarului.
  • Comparatoarele de tensiune sunt folosite pentru calibrarea senzorilor (interfațarea cu Atmega pentru a oferi nivele logice 0 sau +5V).
  • Camera web culege informații despre poziția mingilor și trimite pe serială lui Atmega informații despre aceasta. OpenCV este folosit pentru detectarea formelor și a culorii.
  • Bufferul 3-state bidirecțional 74HCT245 e folosit pentru a proteja Raspberry PI (care lucrează la 3V3 și nu e tolerant la 5V, tensiunea pe care o poate da Atmega pe ieșire). A fost ”hardcodat” pentru a fi unidirecțional (~OE = L, DIR = H). Întrebarea evidentă care va răsări este: dar cum poți arde Raspberry PI cu ieșirile date de Atmega, nu are și el niște protecții? Răspuns simplu: scrie clar ca GPIO nu e ”5V tolerant”. Poate fi stricat RPI foarte ușor din cod, setând un DDR (data direction register) ca ieșire și la acea ieșire să fie conectată fără diodă Zener sau buffer o linie de date către RPI s-a zis cu plăcuța care costă peste 150 RON. Mai există și varianta în care cu stabilizator low-dropout putem alimenta AVR-ul la 3V3.
  • NCV7729 este responsabil de controlul direcției și a vitezei. A fost ales acest driver deoarece poate suporta curenți până la 8 A (motoarele de la Pololu alese au un curent de 5 A când sunt blocate).
  • L298P - este responsabil de controlul motorului de prindere a mingilor și de coolere (folosite la șut, deoarece inerția nu ne ajuta suficient, fiind un robot de 2.5 kg, care nu avea nimic care să îi imprime o viteză suficient de mare pentru a șuta mingile). Întrucât nu exista pericol de curenți mari la aceste motoare, am ales acest integrat mai ieftin și care are 2 punți H, deci puteam comanda 2 motoare(în realiate 3 dar nu ne oprește nimeni să legăm cele 2 coolere pe o ieșire a unei punți H). Dar o ieșire era legată la cele 2 coolere și nu au fost probleme, suflau bine mingile.
  • Ambele drivere au fost dotate cu protecție și cu led-uri care indică sensul în care se învârt motoarele. Și pentru că am tot spus de punți H, fara a explica ce sunt, vă recomand 3 linkuri (inclusiv explicațiile pentru diode de protecție): H Bridge Wikipedia, Punte H cu tranzistoare bipolare, Cum comanzi un motor cu PWM

Pentru prima versiune fiecare modul din schema bloc chiar a fost realizat pe câte o plăcuță cu fotorezist (vezi aici un tutorial cu realizarea de cablaje cu fotorezist), iar legăturile au fost realizate cu cablu panglică.

Hardware Design

Lista de piese

Scheme electrice ale modulelor

Fig 1: Driverul NCV7729 cu protectie. “Firele amestecate” de la JP1 sunt așa doar pentru că a fost mai ușor de făcut PCB-ul, însă nu a fost o idee bună.

Fig 2: Driverul L298 cu protecție la supracurent dar și la supratensiuni. Mai multe detalii pot fi găsite aici. Cablajul a fost modificat față de cel inițial pentru a ne putea încadra în dimensiuni

Fig 3: Montaj pentru compararea unei tensiuni (Vin) cu o referință aleasă (Vref) pentru a obține un nivel logic, în funcție de rezultatul input versus referință. De obicei nivelele logice sunt: HIGH, dacă Vin > Vref și LOW altfel. Vref se reglează din potențiometru.

1_2_45_.jpg Fig 4: Pinout 74HCT245, buffer bidirecțional. Pentru a fi unidercțional am ales să legăm OE\ la GND și DIR la Vcc. Intrarea era astfel A la care se leagă Raspberry PI și ieșirea e B, unde legam Atmega.

Software Design

Procesarea imaginilor a fost realizată cu ajutorul webcam-ului pe Raspberry PI, folosind OpenCV. Sarcina principală a acestuia este să trimită celui care ia deciziile finale informații despre poziția mingilor detectate în teren.

Atmega este cel care ia deciziile pe baza a ceea ce vedeau senzorii. Datele de la Raspberry PI cu privire la pozițiile mingilor în teren sunt recepționate pe serială și Atmega poate alege să ignore aceste informații dacă există un pericol (spre exemplu: a detectat obstacol sau poate faulta adversarul, care poate însemna depunctare, dacă se duce după mingea de care tocmai i s-a spus).

De asemenea, trebuie configurat un timer care sa contorizeze câte secunde au trecut de la pornire, din următoarele considerente:

  • Regulamentul spune clar că trebuie să avem un delay la început de 5 secunde
  • O repriză durează două minute și 30 de secunde. Implementarea noastră presupune ca în prima jumătate a reprizei să căutăm mingi (așadar datele primite de la Raspberry PI sunt luate în seamă, cât timp senzorii SHARP nu detectează vreun obstacol, și capturăm mingile), iar în cealaltă jumătate a reprizei ignorăm orice informație de la Raspberry PI și mergem către poarta adversă să dăm totuși niște goluri, pentru că intrăm în criză de timp. Abia dacă mai rămâne timp continuăm explorarea pentru că, de ce nu? Dar când timer-ul configurat anunță trecerea a 100 de secunde se dă alarma generală.
  • Orice folosire a funcției _delay_ms() pe logica de mai sus trebuie făcută cu grijă, deoarece ea afectează variabila globală care contorizează numărul de secunde.
  • Detecția porții am plănuit inițial să o facem cu ajutorul camerei, deoarece la poartă se afla un LED alb puternic. Din păcate ceva nu a mers așa că a fost nevoie de următoarea soluție: cu ajutorul senzorului de teren știam în orice moment unde ne aflăm, iar regulamentul spune că există un careu care are culoarea opusă culorii terenului advers și nu era foarte gros. În concluzie: dacă senzorul de teren citea, să zicem NEGRU ca teren advers, apoi ALB, pentru o perioadă relativ scurtă și apoi iar NEGRU, iar senzorii SHARP nu spun nimic, e clar că eram la careu, cu fața la poartă.

Rezultate Obţinute



Watch 24 april 2013 RoboChallenge - Robo Fotbal in Tech & Gaming  |  View More Free Videos Online at Veoh.com

Înregistrări complete ale concursului Robochallenge 2013, ajuns la a șasea ediție, puteți găsi aici.

Concluzii

Ne-om fi calificat noi la etapa națională, dar vara asta trebuie să tragem tare pentru a îl îmbunătăți. Dacă sunteți interesați să contribuiți la îmbunătățirea lui sau pur și simplu să vă învățați să vă construiți un robot pentru concursuri sau un proiect al vostru, dați un semn!

Bibliografie/Resurse

Datasheets

Atmega324PA
NCV7729-D
L298P
74HCT245
LM324N
LM7805

Software

Online OpenCV documentation
Conversia RGB to HSV în OpenCV, care a fost foarte utilă în detectarea mai corectă a mingilor
Laboratoarele 2 și 3 de PM
AVR general IO defs - foarte utile (dar trebuie folosite cu atenție!) dacă vrei să scrii un cod pentru un proiect cu un anumit hardware și vrei ulterior să modifici design-ul.

Mulțumiri

Răzvan Tătăroiu (pentru ajutor și pentru suportul moral dinaintea concursului =) )
Cristian Dumitru Trancă (pentru Raspberry PI și ajutor)
Centrului INGEAR ,

pm/prj2013/sstegaru/zizou.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0