Vandaag, op Koningsdag is het toch geen mooi weer. Dus wat gaan doen !?  Aan de slag met het bouwen van een  (prototype) robot. Dexter Industries is een Amerikaanse firma, die een add-on board heeft ontwikkeld, waarmee je de “brains” van je LEGO NXT robot kunt vervangen door een Raspberry Pi met de BrickPi add-on board. Samen ongeveer 25% goedkoper dan een LEGO NXT Intelligent Brick én met natuurlijk veel meer mogelijkheden.

 

Op de site van Dexter is veel informatie beschikbaar. Zo vind je daar documentatie, digitale bouwinstructies voor de LEGO-onderdelen, stuklijsten en Github code repositories met voorbeeldprogramma’s voor Python en C. De basis is de BrickPi, een add-on board waarmee je je Raspberry Pi omtovert tot een LEGO Intelligent Brick en meer. Tegenwoordig zijn er ook additionele sensoren, zoals GPS- en bewegingssensors beschikbaar, die worden geleverd door Dexter Industries. Maar ook de standaard LEGO-sensoren zijn uitwisselbaar met de BrickPi. Het is ook mogelijk om eigen sensoren te ontwikkelen en aan te sluiten. Dat kan via de BrickPi of vanuit de Raspberry Pi. 

Start

De BrickPi komt geleverd in een starterskit met een transparante behuizing van plexiglas. Hierin zijn een aantal gaten geboord, die overeenkomen met de bekende LEGO-blokjes, zodat je de BrickPi kunt inbouwen in je eigen LEGO-ontwerp.

 

De robot heeft twee motoren voor de wielen en een zwenkwieltje aan de achterkant. Een motor voor het optillen en het laten zakken van de laadbak. De ultrasoon sensor kan afstand meten en de microfoon hoort geluidsintensiteit, wanneer je bijvoorbeeld in je handen klapt. Nadat je de kit in elkaar hebt geschroefd, is het tijd om je SD-card te configureren. Hiervoor kun je het beste een SD-image van de website van Dexter nemen en deze met dd op de SD-card kopiëren.

Power

Als je een mobiele robot wilt maken, moet je zorgen voor voldoende vermogen aan boord. Dit kan door de robot aan te sluiten op 6 AA-batterijen (de Power Battery Pack erbij bestellen voor 2,99 dollar lijkt me geen probleem). Kies dan wel voor oplaadbare baterijen, want je bent er zo doorheen. Ook tijdens het programmeren van de robot is het verstandig om de robot via de micro-USB van je Pi te blijven voeden en alleen als je echt zelfstandig rijdt op de batterijen te draaien. Gelukkig kun je ook de twee opties door elkaar én tegelijkertijd gebruiken.

Verbinding maken

Je kunt natuurlijk bij de eerste keer opstarten van de BrickPi een monitor en toetsenbord aansluiten, maar dat is niet echt praktisch. Beter is het om de eerste keer via de ethernetkabel een connectie te maken met de BrickPi. Helaas staat op de site van Dexter alleen een voorbeeld voor connectie vanaf een Windows of Mac PC en niet vanaf een Linux machine! Maar goed, ethernetkabel erin en de Raspberry Pi krijgt van je router een IP-adres dat je kunt pingen.

RDP

Als je weet welk IP-adres je BrickPi heeft gekregen, kun je met je favoriete remote desktop software verbinding maken met de Pi. Hiervoor gebruik ik vanaf mijn laptop Remmina Remote Desktop client, een RDP-pakket dat ik al jaren naar tevredenheid gebruik. Met Remmina kun je diverse protocollen gebruiken om connectie te maken met andere machines; SSH, VNC en Microsoft’s RDP-protocol worden allen ondersteund. Als je NX gebruikt voor je professionele verbindingen, dan kun je ook daarmee connecties maken via Remmina. Het RDP-protocol is te prefereren boven het VNC-protocol, omdat het slimmer is opgezet en het zich bewust is van de fonts, controls en andere grafische componenten, waardoor het sneller werkt en minder bandbreedte vraagt.

Om verbinding te maken met de BrickPi maak je een nieuwe connectie aan in Remmina en selecteer je het protocol (RDP in ons geval). Je vult het IP-adres in en gebruiker/wachtwoord (pi/raspberry in dit geval) en klikt “connect”. Et voilà! De remote desktop van je BrickPi wordt zichtbaar!

Afbeelding 2 – schermafdruk BrickPi

Op de aangepaste Raspbian-image, dat je van de Dexter website hebt gedownload, staat alle software die je nodig hebt om de BrickPi aan te sturen en te gebruiken. In de folder “BrickPi_Python” staan voorbeeld projecten hoe je de verschillende sensoren en motoren kunt aansturen en testen. Voor Python-kenners: er is een module genaamd BrickPi, waarmee je de Brick rechtstreeks kunt aansturen in Python. Dat is echter nog een stapje te ver voor mijn oudste zoon (9 jaar). Scratch vindt hij wel heel erg leuk.

Scratch

Scratch is een educatief platform, waarmee kinderen (maar niet alle kinderen!) spelenderwijs leren omgaan met computers en de basisconcepten van programmeren.  Van de website van Scratch: Met Scratch programmeer je je eigen interactieve verhalen, spellen en animaties — en kun je jouw eigen creaties delen met anderen in de online gemeenschap. Scratch helpt jonge mensen creatief te leren denken, systematisch te redeneren en samen te leren werken — essentiële vaardigheden voor het leven in de 21ste eeuw.”. Amen.

Scratch is opgebouwd rond de “Sprite”, een animatiefiguur dat je geheel naar eigen inzicht kunt samenstellen en dingen kunt laten doen. Wat nu het mooie is, is dat je Scratch op de BrickPi kunt draaien en dat je de “Sprite” kunt koppelen aan je robot. Daarmee kun je de sprite tot leven brengen en als echte robot aan het werk zien!

Je kunt online direct aan de slag en hoeft niets te installeren. Sleep de programmeerblokjes als LEGO-steentjes op het werkblad en bouw je eigen programma. Dit werkt erg intuïtief en het is vergelijkbaar met hoe je fysieke LEGO-blokjes gebruikt. Als je dat een half uurtje hebt gedaan, ben je klaar voor de volgende stap!

Nu kun je Scratch op de BrickPi opstarten. Ik heb een Raspberry Pi, model B en daarop duurt het wel een aantal seconden, voordat alles netjes is opgestart. Ik ga er vanuit dat het opstarten met de Raspberry Pi, model B+ of de Pi 2 sneller en lekkerder zal werken.

Als simpel voorbeeldproject nemen we het voorbeeld “Car.sb” uit de folder op de desktop “/home/pi/Desktop/BrickPi_Scratch/Examples”. Hiermee kun je je LEGO-robot via de pijltjestoetsen op je toetsenbord besturen.

Nadat je Scratch hebt opgestart en het voorbeeldscript hebt geladen in Scratch, moet het er uitzien, zoals in afbeelding 3.

 

 Afbeelding 3 – voorbeeld in Scratch

 

Daarna zul je Scratch nog moeten koppelen met het BrickPi board. Dit doe je door een shell script te draaien, dat de instructies vanuit Scratch vertaald en doorgeeft naar de BrickPi en andersom.

 

 

Als het goed is, start je hiermee een terminal, waarin de connectiestatus van de Raspberry Pi met het BrickPi add-on board wordt getoond. Sluit dit terminalvenster NIET, zolang je verbinding wilt hebben met het BrickPi board! Zodra je een ander Scratch-programma wilt draaien, moet je dit script wel even opnieuw opstarten, zodat het nieuwe programma in Scratch kan communiceren met het BrickPi board.

 

Natuurlijk is alles open source en de avonturiers onder ons kunnen eens een kijkje nemen in de Python-code, die de connectie tussen Scratch en het BrickPi board verzorgt. Hierin kun je ook je eigen sensoren opvoeren en de namen van de sensoren en de mapping tussen de verschillende poorten en de motornamen (A,B,C) aanpassen.

 

Alternatief voor LEGO Mindstorms

Met de BrickPi in combinatie met Scratch heb je een waardig alternatief voor de hele LEGO Mindstorms ontwikkelstack op Windows in huis. Natuurlijk zijn de mobiele LEGO Mindstorms apps voor Android en iOS heel aantrekkelijk en ook de Mindstorms software op Windows werkt zeer prettig, maar met Scratch heb je de vrijheid en oneindig veel meer mogelijkheden om langzaam de stap naar het echte programmeren te maken!

 

FLL

Als zijstap hier nog een tip voor ouders, die graag samen met de lokale basisschool hun kinderen willen voorbereiden op het leven in de 21e eeuw. Via de basisschool van mijn kinderen ben ik gevraagd als ouder mee te werken aan de First LEGO League (FLL) competitie tussen teams van basisscholen. Als je samen met je kinderen lekker wilt knutselen en met LEGO wilt spelen, kun je kijken of de basisschool van je kinderen mee kan doen aan deze competitie. Om een indruk te krijgen, zijn er genoeg filmpjes op YouTube te vinden van trotse teams met hun robots, die het parcours in no-time afleggen en de meest waanzinnige oplossingen hebben bedacht voor de challenges. Een aanrader!

 

Stap voorbij LEGO: NAVIO en ROS

Mocht je na het lezen van dit artikel de smaak te pakken hebben, maar geen oude LEGO NXT robot hebben liggen, dan is het het overwegen waard om te kijken of je niet gelijk een stapje verder wilt gaan. Daarmee is het stadium voor de minderjarigen wel voorbij, maar de Raspberry Pi is tot veel in staat! Je kunt een drone besturen met een Raspberry Pi en de NAVIO+ autopilot! De NAVIO en NAVIO+ zijn ook add-on boards voor de Raspberry Pi, maar dan iets geavanceerder. Er zitten bijvoorbeeld een GPS-module, gyroscoop en kompas in. Voor de reactiesnelheid is er een speciale versie van Raspbian met een realtime kernel beschikbaar, zodat de Raspberry Pi snel genoeg is om sensordata uit te lezen en te reageren op positieveranderingen van je drone/robot. Er zijn diverse open source autopilot software-implementaties beschikbaar, die op de Raspberry Pi kunnen draaien (zie de links aan het einde van dit artikel). Hiermee maak je van je Raspberry Pi een vliegend ontwikkelplatform!

 

Nog een stapje verder is het Robot Operating System (ROS). Dit is een flexibel raamwerk voor de ontwikkeling van software voor robots, dat uitermate geschikt is om componenten te ontwikkelen die door anderen kunnen worden (her)gebruikt en gedeeld. Wat ROS vooral sterk maakt, is het gedistribueerde karakter van de losse softwarecomponenten, die op verschillende manieren met elkaar informatie uitwisselen en delen.

 

Samengevat

Wil je beginnen met het programmeren van robots? Of wil je een leuk project samen met je kinderen maken? Dan is de BrickPi echt iets voor jou! Via RDP kun je de desktop van je robot zien. Het moet niet al te lastig zijn om de Picam aan te sluiten en vanaf de robot te streamen over je wireless netwerk thuis, zodat je met de BrickPi mee kunt kijken als hij door de woonkamer rijdt. Voor echte beeldverwerking kun je bijvoorbeeld kijken naar OpenCV, maar dat zal op de Raspberry Pi een uitdaging worden qua performance. Met Scratch kun je een hele mooie omgeving maken, waarin je programma’s in Scratch tot leven wekt in de echte wereld via de BrickPi met LEGO-componenten!

 

Links

www.dexterindustries.com/brickpi-tutorials-documentation

scratch.mit.edu

firstlegoleague.nl

www.emlid.com

www.ros.org

opencv.org

www.openpilot.org