4. Pi2Go -robotti


Aloita harjoitustehtävä katsomalla alla oleva video.

Käytämme kurssilla pi2go -nimistä yksinkertaista robottia. Robotin laskentayksikkönä toimii Raspberry pi -tietokone. Robotissa on

  • kaksi moottoria (molemmille pyörille oma)
  • 2kpl liiketunnistimia laitteen sivuilta (infrapunatunnistimet)
  • 1kpl liiketunnistin laitteen edestä (ultraäänitunnistin)
  • Kamera ja kamera-alustan ohjausmoottori laitteen etuosassa

 

Harjoitustehtävä

Opettaja on rakentanut Pi2Go robotin valmiiksi. Rakentaminen on helppoa verkosta löytyvien ohjeiden avulla. Sinun tehtäväksesi jää robotin ohjaaminen ja yksinkertaisen “tekoälyn” luominen.

Ensin tutustutaan robottiin ohjailemalla sitä etänä oman tietokoneen näppäimistöltä (tarvitset siis oman tietokoneesi ja Pi2Go robotin). Seuraa ohjetta alla olevasta videosta (voit aloittaa kohdasta 2:25):

Mikäli et saa etäohjausta toimimaan omalta läppäriltäsi, voit toki käyttää myös langatonta näppäimistöä ja hiirtä robotin ohjaamiseen.

Oma tekoäly

Seuraavaksi tehtävänäsi on rakentaa python ohjelma, joka liikuttaa robottia ja saa sen väistelemään esteitä (yksinkertainen pölynimurirobotti). Ohjelma käyttää robotin infrapunasensoria tunnistaakseen sivuilla olevat esteet ja ultraäänisensoria tunnistaakseen edessä olevat esteet.

  • Siirry kansioon  /home/pi/robot/2017/pi2go/
  • Kopioi itsellesi oma versio opettajan luomasta pohjasta avoider.py
    • cp avoider.py omaNimi.py
  • Aloita oman versiosi editointi nano-ohjelmalla komennolla
    • sudo nano omaNimi.py
  • avoider.py -skriptiin on kommentoitu rungon toiminnallisuudet. Tehtävänäsi on muokata ohjelmassa olevaa ikuista silmukkaa (While True). Tarvitset
    • while -toistolauseita ja if -ehtolauseita
    • Vasenta ja oikeaa infrapunasensoria (molemmilla on vain kaksi tilaa true tai false, laitteen etuosassa sensorien tilaa kuvaavat led-valot)
      • pi2go.irLeft()
      • pi2go.irRight()
    • Moottoreita, joille annetaan parametrina nopeus (nopeus on luku väliltä 0-100)
      • pi2go.spinLeft(nopeus)
      • pi2go.spinRight(nopeus)
      • pi2go.forward(nopeus)
      • pi2go.reverse(nopeus)
      • pi2go.stop()
    • Ultraäänisensoria, joka kaikuluotaa etäisyyttä edessä olevaan kohteeseen (palauttaa etäisyyden epämääräisessä yksikössä. Opettajan arvio: 0.5 on suunnilleen 20 cm)
      • pi2go.getDistance()
      • Kun etäisyys edessä olevaan kohteeseen on pieni (esim. alle 0.5), tulee robotin suuntaa muuttaa. Suunnan muuttamiseen voit hyödyntää spinLeft tai spinRight -funktioita ja time.sleep(jokuMääräSekunteja) -komentoa
    • Nopeuksien ja kääntymissuunnan määrittelyssä voit hyödyntää random-luokkaa (teet robotistasi arvaamattoman)
    • Voit lisätä satunnaisen mittaisia taukoja komennolla
      • time.sleep(randomMääräSekunteja)
    • Lisää ohjelmaan myös tulostuksia debuggausta varten
  • Testaa ohjelmaa
    • sudo Python omaNimi.py
    • Lopeta ohjelman suoritus näppäinyhdistelmällä Ctrl-C
  • Esittele ohjelma ja toiminta opettajalle.

Lisätehtävä

Hyödynnä skriptissäsi myös laitteen kameraa (tai tee kokonaan uusi skripti)

  • Kameran toiminnallisuus
  • Kameran ohjaimen toiminnallisuuteen kuuluu ainoastaan servojen käyttöönotto ja sammutus, sekä kääntäminen kahden eri akselin suhteen (0 = sivusuunta ja 1 = pystysuunta)
    • pi2go.startServos()
    • pi2go.stop Servos()
    • pi2go.setServo(Servo, Degrees)
      • Tässä siis servo on joko 0 tai 1 ja Degrees on kulma väliltä [-90, 90]

Muuta hauskaa

Tee ohjelma, joka ohjaa robotin ajamaan seuraavan kuvion mukaisen reitin: