Skip to content

sundylau/ev3-nabiralec

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ev3-nabiralec

Demonstracijski program za robota Lego Mindstorms EV3, ki se zna premikati po danih točkah na poligonu. Namenjeno tekmovanju Robo liga FRI 2019: Sadovnjak.

Program je napisan v Python3 in deluje na operacijskem sistemu ev3dev.

Priprava okolja

Sledite navodilom ev3dev Getting Started, da pridobite operacijski sistem ev3dev-stretch in ga namestite na SD kartico, ki ste jo dobili s kompletom. Za priklop v brezžično omrežje uporabite adapter za WiFi, ki ste ga prav tako dobili v kompletu.

Na robota se povežete prek protokola SSH, datoteke pa nalagate nanj prek protokola SFTP. Privzeto je uporabniško ime robot in geslo maker.

Namestitev potrebnih paketov

Povežite se na robota in v terminalu izvršite naslednje ukaze za namestitev paketov pycurl in ujson:

sudo apt-get update

sudo apt-get install python3-pycurl

sudo apt-get install python3-ujson

Zagon programa

Na robota prenesite (SFTP) datoteko nabiralec.py. V terminalu na robotu se premaknite v mapo, ki vsebuje zgornjo datoteko. Najprej dajte datoteki pravice za izvajanje:

chmod +x nabiralec.py

Nato lahko program poženete:

./nabiralec.py

Kratek opis delovanja programa

  • Ključni parametri, ki jih morate nujno nastaviti:

    # ID robota. Spremenite, da ustreza številki označbe, ki je določena vaši ekipi.
    ROBOT_ID = 10
    # Konfiguracija povezave na strežnik. LASPP strežnik ima naslov "192.168.0.3".
    SERVER_IP = "192.168.0.3"
  • Predpostavljamo, da se datoteka game.json, ki hrani podatke o tekmi, nahaja v začetni (root) mapi na strežniku.

  • Vzpostavitev povezave s strežnikom in pošiljanje zahteve:

    conn = Connection(url)
    game_state = conn.request()
  • Predpostavljamo, da ste velika motorja priklopili na izhoda A in D, lahko pa to nastavite v spremenljivkah MOTOR_LEFT_PORT in MOTOR_RIGHT_PORT.

  • Del programa je namenjen preverjanju, ali je dotično tipalo priklopljeno na vhod - funkcija init_sensor_touch. Za zgled smo uporabili tipalo za dotik (TouchSensor), vendar v sami kodi nismo uporabili njegove vrednosti. Klic te funkcije lahko mirno zakomentirate, morda pa vam vseeno pride kdaj prav.

  • Program se konča, če ugotovimo, da robot v trenutni tekmi ne tekmuje. Se pravi, da njegovega IDja ni na seznamu currentGameTeams v datoteki gameData.json, ki je del kode sledilca objektov (glej navodila za sledenje objektom). Poskrbite torej, da boste ustrezno nastavili zapise v gameData.json.

  • Robot miruje, če tekma ne teče (game_state['gameOn'] == False) ali če oznaka robota ni zaznana.

  • Program na robotu izvaja premikanje po vnaprej določenih točkah na poligonu. Seznam je definiran kot targets_list. V našem primeru se bo robot vozil po notranjih kotih obeh košar. Več informacij o zapisu stanja tekme.

    targets_list = [
        Point(game_state['field']['baskets'][team_my_tag]['bottomRight']),
        Point(game_state['field']['baskets'][team_my_tag]['topRight']),
        Point(game_state['field']['baskets'][team_op_tag]['topLeft']),
        Point(game_state['field']['baskets'][team_op_tag]['bottomLeft']),
    ]
  • Robot izvaja štiri stanja, katerim seveda lahko dodate poljubna druga, denimo za zaznavanje bližnjega trka.

    • IDLE: stanje mirovanja in tudi začetno stanje. Tu se odločamo, kaj bo robot sedaj počel.
    • LOAD_NEXT_TARGET: kot trenutno ciljno točko naložimo naslednjo točko iz seznama targets_list. Ko pridemo do konca seznama, gremo spet od začetka.
    • TURN: stanje obračanja robota na mestu z regulatorjem PID. Hitrost levega motorja je nasprotna vrednost hitrosti desnega motorja. Stanje je zaključeno, ko je robot obrnjen proti ciljni točki v toleranci DIR_EPS stopinj.
    • DRIVE_STRAIGHT: stanje vožnje "naravnost" (robot vmes tudi zavija, da ohranja ničelno napako v kotu med sabo in ciljem). Hitrost na motorju je sestavljena iz dveh delov: nazivna hitrost (base) in hitrost obračanja (turn). Vsaka od njih je podvržena regulaciji s svojim regulatorjem PID.
  • Za nastavitev hitrosti obeh motorjev uporabljamo regulator PID (sestavljen iz Proporcionalnega, Integralnega in oDvodnega člena), ki je določen z naslednjimi parametri:

    • Kp: ojačitev proporcionalnega dela regulatorja. Visoke vrednosti pomenijo hitrejši odziv sistema, vendar pozor: previsoke vrednosti povzročijo oscilacije in nestabilnost.
    • Ki: ojačitev integralnega člena regulatorja. Izniči napako v ustaljenem stanju. Zmanjša odzivnost.
    • Kd: ojačitev odvoda napake. Zmanjša čas umirjanja in poveča odzivnost.
    • integral_limit: najvišja dovoljena vrednost integrala. Sčasoma namreč lahko integralni člen zelo naraste in ga je modro omejiti.

    Povabljeni ste, da preizkušate različne nastavitve teh parametrov in s tem dosežete boljši (hitrejši/stabilnejši) odziv.

Priporočeni viri

About

Demonstracijski program za robota Lego EV3, ki se zna premikati po danih točkah na poligonu.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%