• No results found

E-puck knihovna pro Python

N/A
N/A
Protected

Academic year: 2021

Share "E-puck knihovna pro Python"

Copied!
37
0
0

Loading.... (view fulltext now)

Full text

(1)

E-puck knihovna pro Python

David Marek

Univerzita Karlova v Praze

5. 4. 2011

(2)

Osnova

1 Pˇredstaven´ı e-puck robota

2 Pˇripojen´ı

3 Komunikace

4 Pˇrehled pˇr´ıkaz ˚u

5 Uk ´azky program ˚u

6 Z ´av ˇer

(3)

Pˇredstaven´ı e-puck robota

Pˇredstaven´ı e-puck robota

(4)

Pˇredstaven´ı e-puck robota

E-Puck

• Ecole Polytechnique F ´ed ´erale de

Lausanne

• Miniaturn´ı robot (pr ˚um ˇer 75mm)

• Opensource hardware

• Spousta senzor ˚u

• Bluetooth komunikace

• Dostupn´y (v labu)

(5)

Pˇredstaven´ı e-puck robota

Senzory a akˇcn´ı ˇcleny

• Kamera (640x480)

• IR senzory (proximity / ambient light)

• Akcelerometr (3D)

• Mikrofony

• LED

• Krokov ´e motory

• Speaker

(6)

Pˇredstaven´ı e-puck robota

Kamera

• Rozliˇsen´ı 640x480

• Dva reˇzimy: RGB565 / barvy ˇsedi

• Pˇr´ıliˇs velk ´e fotky pro zpracov ´an´ı v robotovi

• Reˇsen´ı probl ´em ˚u s pam ˇet´ı:ˇ

• Prokl ´ad ´an´ı

• Zm ˇena form ´atu fotografie

• Re ´aln ˇe jde z´ıskat:

• 40x40 barevn ˇe

• 55x55 ˇcernob´ıle

• Line ´arn´ı kamera

(7)

Pˇredstaven´ı e-puck robota

IR senzory

• 8 senzor ˚u po obvodu

• Dva reˇzimy:

• Aktivn´ı – rozezn ´av ´an´ı pˇrek ´aˇzek

• Pasivn´ı – intenzita sv ˇetla

• Pˇrek ´aˇzky do∼4cm

(8)

Pˇredstaven´ı e-puck robota

Akcelerometr

• 3D akcelerometr

• Z robota se d ´a z´ıskat:

• Vektor akcelerace

• Zpracovan ´e informace (rotace, zrychlen´ı, . . . )

• Detekce n ´arazu, naklon ˇen´ı, sm ˇeru pohybu

(9)

Pˇredstaven´ı e-puck robota

Mikrofony

• 3 mikrofony

• Vlevo, vpravo, vzadu

• Lze z´ıskat:

• Hlasitost

• Frekvenci (FFT)

(10)

Pˇredstaven´ı e-puck robota

LED

• 8 LED po obvodu robota

• Zelen ´a dioda v t ˇele robota

• Jasn ´a dioda u kamery

(11)

Pˇredstaven´ı e-puck robota

Krokov ´e motory

• Dva krokov ´e motory

• Tis´ıc krok ˚u = jedna ot ´aˇcka kola

• Jeden krok≈0.13 mm

• Maxim ´aln´ı rychlost jedna

ot ´aˇcka za sekundu

• Neklouzav ´a ´uprava

(12)

Pˇredstaven´ı e-puck robota

Speaker

• Pˇrehr ´av ´a pˇripraven ´e zvuky (WAV)

• 5 zvuk ˚u zakompilovan´ych do firmware

(13)

Pˇripojen´ı

Pˇripojen´ı

(14)

Pˇripojen´ı

Pˇr´ıprava PC

• Potˇreba funkˇcn´ı bluetooth

• Bal´ıkybluez-firmware,bluez-utils

• Utilita na zasl ´an´ı PIN (bluez-pin, . . . )

(15)

Pˇripojen´ı

Nastaven´ı rfcomm

Z´ıskat adresu robota $ hcitool scan Scanning ... 10:00:E8:52:C6:3E e-puck_1055 Nastaven´ı/etc/bluetooth/rfcomm.conf rfcomm2 { bind no; device 10:00:E8:52:C6:3E; channel 1; comment "e-puck_1055"; }

(16)

Pˇripojen´ı

Vytvoˇren´ı spojen´ı

Pˇripojen´ı pomoc´ırfcomm

# rfcomm connect rfcomm2

Connected /dev/rfcomm2 to 10:00:E8:52:C6:3E on channel 1 Press CTRL-C for hangup

Moˇzn ´e chyby

Can’t connect RFCOMM socket: Connection refused

• Nen´ı spuˇst ˇen ´a aplikace, kter ´a by pˇredala PIN Can’t create RFCOMM TTY: Address already in use

• Robot uˇz je pˇripojen

• Jin ´a aplikace s n´ım st ´ale komunikuje

(17)

Pˇripojen´ı

Nahr ´an´ı firmware

• Pouˇz´ıv ´a seepuckupload

• Je potˇreba m´ıt aktivn´ı pˇripojen´ı

• Robot dok ´aˇze pˇrij´ımat nov´y firmware pouze p ´ar sekund po

restartu

Postup pˇri nahr ´av ´an´ı

1 Spuˇst ˇen´ı nahr ´av ´an´ı

$ epuckupload -f BTcom.hex rfcomm2

2 Restartov ´an´ı robota

3 Vyˇck ´an´ı na konec nahr ´av ´an´ı

4 Robot pˇripraven k pr ´aci

(18)

Komunikace

Komunikace

(19)

Komunikace

Komunikace

• Kontroln´ı program b ˇeˇz´ı v PC napsan´y v Pythonu

• Pˇr´ıkazy jsou textov ´e (bin ´arn´ı) ˇret ˇezce pos´ılan ´e pˇres s ´eriov ´e rozhran´ı

• V robotovi je upraven´y firmware BTcom, kter´y pouze zpracov ´av ´a

pˇr´ıkazy

• Je potˇreba aby bylo vytvoˇren ´e pˇripojen´ı

(20)

Komunikace

Pˇr´ıklad ovl ´ad ´an´ı

Pˇr´ıklad zasl ´an´ı pˇr´ıkazu

>>> from epuck import Controller

>>> controller = Controller("/dev/rfcomm2")

>>> controller.set_speed(100, 100)

>>> controller.get_speed() (100, 100)

1 Je vytvoˇren Controller, parametr je cesta k rozhran´ı kde je robot

pˇripojen

2 Nastavena rychlost obou motor ˚u na 100

3 Zjiˇst ˇena rychlost z robota

Jde o synchronn´ı komunikaci, program byl vˇzdy zablokov ´an dokud nedoˇsla odpov ˇed’ od robota.

(21)

Komunikace

Druhy komunikace

Synchronn´ı Asynchronn´ı

• Vˇzdy v´ıme, zda se pˇr´ıkaz

provedl

• Transparentn´ı komunikace

• Hned se dozv´ıme v´ysledek

• Pokud nastala chyba tak m ˚uˇze

z ˚ustat v deadlocku

• Nen´ı tˇreba ˇcekat, neˇz se pˇr´ıkaz vykon ´a

• Spolehliv ´a komunikace

• Zotavov ´an´ı z chyb

• Mus´ıme si zvl ´aˇst’ ˇr´ıct o v´ysledek

(22)

Komunikace

Asynchronn´ı komunikace

Pˇr´ıklad programu

Uk ´azka k ´odu

from epuck import Controller

controller = Controller("/dev/rfcomm2", asynchronous=True) photo_request = controller.get_photo()

while not photo_request.response_received(): foo()

photo = photo_request.get_response()

• M´ısto odpov ˇedi z´ısk ´ame jen handler

• Je moˇzn ´e zkontrolovat zda-li uˇz pˇriˇsla odpov ˇed’

• Neˇz pˇrijde odpov ˇed’, tak je moˇzn ´e d ˇelat cokoli jin ´eho

(23)

Komunikace

Asynchronn´ı komunikace

Callback

• Pro zpracov ´an´ı odpov ˇedi je moˇzn ´e m´ıt speci ´aln´ı funkci

• Kaˇzd´y pˇr´ıkaz m ´a parametr callback, coˇz je funkce

• Callback je zavol ´an hned po pˇrijet´ı odpov ˇedi

• Callback m ˚uˇze b´yt pouˇzit pro modifikaci odpov ˇedi:

vysledek_get_response = callback(odpoved_od_robota)

Uk ´azka callback metody

from epuck import Controller

controller = Controller("/dev/rfcomm2", asynchronous=True) controller.get_photo(callback=lambda img: img.show())

(24)

Pˇrehled pˇr´ıkaz ˚u

Pˇrehled pˇr´ıkaz ˚u

(25)

Pˇrehled pˇr´ıkaz ˚u

Pˇr´ıkazy

• Tˇr´ıdaControllerobsahuje pˇr´ıkazy pro ovl ´ad ´an´ı vˇsech sensor ˚u

a akˇcn´ıch ˇclen ˚u robota

• Kaˇzd ´a akce je pouze zavol ´an´ı jedn ´e metody

• Pˇri synchronn´ı komunikaci vrac´ı metody rovnou v´ysledek

• Pˇri asynchronn´ı komunikaci vrac´ı handler.

• Bliˇzˇs´ı informace v dokumentaci

(26)

Pˇrehled pˇr´ıkaz ˚u

Pˇr´ıkazy

Pˇrehled • Motory • set_speed(left, right) • get_speed() • set_motor_pos(left, right) • get_motor_pos() • IR senzory • get_proximity_sensors() • get_ambient_sensors() • calibrate_sensors() • LED • set_body_led(on) • set_front_led(on) • set_leds(on) • set_led(led_no, on)

(27)

Pˇrehled pˇr´ıkaz ˚u

Pˇr´ıkazy

Pˇrehled

• Kamera

• set_camera(mode, width, height, zoom)

• get_camera() • get_photo() • Pˇrep´ınaˇc na robotovi • get_turning_switch() • Akcelerometr • get_accelerometer() • get_raw_accelerometer() • Zvuk • play_sound(sound_no) • get_volume()

• Restart nebo zastaven´ı

• reset()

• stop()

(28)

Uk ´azky program ˚u

Uk ´azky program ˚u

(29)

Uk ´azky program ˚u

N ´asledov ´an´ı sv ˇetla

• Vyuˇzity IR senzory

• Robot se pohybuje za sv ˇetlem

• Je potˇreba zdroj IR sv ˇetla (sv´ıˇcka, . . . )

Zdrojov´y k ´od 1/3 1 import logging 2 import time 3 import sys 4 import signal 5

6 from epuck.controller import Controller

7

8 logging.basicConfig(level=logging.WARNING)

9

10 c = Controller("/dev/rfcomm2", asynchronous=True)

(30)

Uk ´azky program ˚u

N ´asledov ´an´ı sv ˇetla

Zdrojov´y k ´od 2/3

1 # Signal handler to cleanup after shutdown 2 def handle_signal(signum, frame):

3 r = c.stop()

4 r.join()

5 sys.exit(0)

6

7 # SIGINT is interrupt signal sent by CTRL+C 8 signal.signal(signal.SIGINT, handle_signal)

9

10 while True:

11 # Read ambient light sensors

12 r = c.get_ambient_sensors().get_response()

13

14 front_side = r["L10"] + r["R10"]

15 left_side = r["L45"] + r["L90"]

16 right_side = r["R45"] + r["R90"]

(31)

Uk ´azky program ˚u

N ´asledov ´an´ı sv ˇetla

Zdrojov´y k ´od 3/3

1 # The light source is straight ahead

2 if front_side < left_side and front_side < right_side:

3 c.set_speed(500, 500)

4 elif left_side < right_side:

5 c.set_speed(-500, 500)

6 else:

7 c.set_speed(500, -500)

8

9 time.sleep(0.1)

(32)

Uk ´azky program ˚u

LED

• Pouze efekty s LED

• Pˇrep´ınaˇc na robotovi vyuˇzit pro r ˚uzn ´e reˇzimy

(33)

Uk ´azky program ˚u

Vyh´yb ´an´ı se pˇrek ´aˇzk ´am

• Jednoduch´y program na principu Braitenberg vehicle

• V´ystup na akˇcn´ıch ˇclenech je ovlivn ˇen pouze hodnotou senzor ˚u

(34)

Uk ´azky program ˚u

Detekce obliˇcej ˚u

• Pouˇzita kamera a OpenCV knihovna

• Program kaˇzd´ych p ´ar sekund sejme

obr ´azek a snaˇz´ı se na n ˇem nal ´ezt obliˇcej

(35)

Uk ´azky program ˚u

Evoluce

• Experiment s knihovnou PyEvolve

(36)

Z ´av ˇer

Z ´av ˇer

(37)

Z ´av ˇer

Odkazy

Str ´anky e-puck http://www.e-puck.org Bootloader http://svn.gna.org/viewcvs/e-puck/trunk/tool/bootloader/ computer_side/multi_platform/ Dokumentace http://e-puck.davidmarek.cz Projekt http://github.com/davidmarek/E-Puck-Algorithms-Library

References

Related documents

Frozen pucks – When play needs to be stopped for a goalkeeper freezing the puck, for a player falling on the puck, the puck is frozen along the boards or the puck leaves the

Puck Gathering or Scrum: When 3 or more players are in the vicinity of the puck and begin to battle for the puck the official will blow the whistle, The defensive team will be

This is done by cross-compiling a program for the e-puck on your computer, then creating a connection between your computer and the robot, and finally uploading the

Given the measured DT neutron yield Y nDT from the capsule, and the solid angle  puck subtended by the puck at the capsule’s centre, the total gamma-ray yield of a graphite

От тоді й заходять ся потом та кровю хрестян гноїти неродючі солончики ( млаки ) “ ... Baбило Тараса зайти в Симбірськ та подивитися на

If an event is loaded in the Pilot Controller when Play 1 or Play 2 is selected, and you want to select the Record channel, you need to click the Erase button to unload the

This line is needed in your Python script, but is not needed if you are calling the function through Python command line in Pro..

devam ettirmek, sürdürmek, devam etmek, sürmek karşı, muhalif karşıt kontrol kontrol etmek ikna etmek görüşme değiştirmek, dönüştürmek kalp. koşmak, yarışmak,