R2D2 szenzor modul fejlesztés

A 2015-ös évben volt alkalmam részt venni egy különleges fejlesztési projektben. Mint ismeretes, 2015. decemberében került bemutatásra az Ébredő erő című legújabb Star Wars film. Ennek apropóján egy fejlesztőcsapat elhatározta, hogy a hivatalos bemutatóig elkészítik R2D2 1:1 arányú, mesterséges intelligenciával felruházott mását. Egy ilyen robot összes alkotóelemének megtervezése és legyártása rengeteg feladatot és kihívást tartogat és mindezt rövid idő alatt kellett véghez vinni. A robotot igyekeztek úgy részekre osztani, hogy a lehető legtöbb ember tudjon rajta párhuzamosan dolgozni. Az elektronikai modulok megvalósításakor kerültem én a képbe.

Több lehetőség közül a robot szenzorait végződtető modul megtervezését és elkészítését választottam. A robot mozgatása nem távirányítással történik, hanem azt egy programozott számítógép végzi, melynek bizonyos helyzetekben döntéseket kell hoznia. Ehhez elengedhetetlen tudni azt, hogy az egyes részegységek milyen helyzetben állnak, illetve a robot körül mi történik.

Az általam tervezett részegység egy alsó szintű szenzorgyűjtő panel, melyhez kétállapotú, illetve analóg jelet szolgáltató érzékelők, valamint távolságmérő szonárok csatlakoznak. A feladat az volt, hogy meghatározott mennyiségű és típusú érzékelő állapotát a lehető legnagyobb sebességgel kellett begyűjteni, illetve átalakítani a kívánt formátumra, majd egy adatcsomagba kellett rendezni, melyet egy előre már definiált protokoll felhasználásával kérés esetén továbbítani kellett a felsőbb intelligencia számára.

A feladatra a PIC18F45K22 kontrollert választottam. Ezt lehetett olyan kellően magas órajel frekvenciával meghajtani, hogy az időkritikus feladatokat gond nélkül el tudja végezni, valamint megfelelő lábszámmal is rendelkezik ahhoz, hogy a sok bemenetet csatlakoztatni lehessen. A digitális bemeneteknél alkalmaztam egyedül 2 darabb 8 bites multiplexert, hiszen azok beolvasása a legegyszerűbb és leggyorsabb. Az analóg csatornák mérésére a belső multiplexert használtam fel, valamint további 10 darab digitális bemenetre volt szükség a szonárok jeleinek fogadásához. A szonárok nagyjából 3 métertől közeledve 1 cm pontossággal mérik az előttük lévő tárgy távolságát, a távolságadatot pedig impulzus szélesség modulált jelben kódolják. 10 darab PWM formában beérkező távolságértéket kellett tehát értelmezni és dekódolni a lehető legrövidebb idő alatt, hogy a soros buszon történő sűrű lekérdezéseket is friss mérési adatokkal lehessen ellátni. A lekérdezéseket végül szoftveresen párhuzamosított mérésekkel sikerült ennek megfelelően megvalósítani.

A hardveren a fejlesztés során történt még pár apró módosítás, de a prototípusnak csak a fejlesztés és átadás során volt tesztelés céljából jelentősége, mert amint átadtam a terveket, a csapat egy másik tagja már el is kezdte a végleges panelt megtervezni.

A végleges panelből hozzám is jutott egy példány, ugyanis a fejlesztés során keletkezett egy módosítási igény.

A szenzor panelen volt a leginkább célszerű végződtetni további két inkrementális és egy abszolút enkóder mérési eredményét is. A jelentősebb áttervezésből adódó plusz idő már nem fért volna bele a szűkös határidőbe, így két analóg bemenet I2C busszá lett alakítva, mely segítségével a modul le tudta kérdezni az enkóderek adatait. Extra feladatként tehát meg kellett oldanom a programban még egy I2C busz kezelést, illetve az onnan kapott információkkal még meg kellett toldani a felsőbb vezérlés számára küldött csomag adatrészének tartalmát.

Amint minden feltétel adott volt, ezt a feladatot pár nap alatt sikerült megoldani.

A fejlesztés során a felsőbb vezérlő emulálására egy Arduino Mega panelen alakítottam ki megfelelő tesztkörnyezetet.

Sensor board