Projectcontext

In dit project werkten studenten van HBO-ICT, werktuigbouwkunde en elektrotechniek samen aan een werkende robot. We moesten losse onderdelen samenbrengen tot een systeem waarin mechanica, elektronica en software goed met elkaar werkten.

De robot moest door een poortje kunnen rijden, ruw terrein aankunnen, een object oppakken en wegen, en autonoom gedrag laten zien met computer vision. Daarnaast waren er wedstrijdelementen zoals een race, obstacle-run, line-dance en een eigen toepassing waarin de robot zijn belangrijkste functie moest tonen.

Voor mij lag de nadruk op de softwarekant: het ontwerpen en bouwen van de aansturing voor de robot, het verbinden van de Raspberry Pi met de sensoren en actuatoren, en het maken van automatische functies die de robot zelfstandig gedrag gaven.

Software en hardware

De robot werd aangestuurd met Python op een Raspberry Pi. Vanuit de software werden onderdelen gekoppeld zoals de camera, microfoon, PWM-motoren, AX-12 servo's, een magneet, een LED-strip en een load cell voor gewichtmeting.

De software was opgebouwd uit componenten voor hardware-aansturing en acties voor robotgedrag. Een centrale controller vertaalde commando's vanuit de afstandsbediening naar acties voor motoren, servo's, camera en gripper. Daardoor bleef de aansturing van losse componenten gescheiden van de logica voor rijden, volgen, oppakken en meten.

Raspberry Pi

Centrale controller voor sensoren, motoren, camera, microfoon, LED-strip en communicatie met de afstandsbediening.

OpenCV

Gebruikt voor vision-taken zoals het volgen van een blauw object en het volgen van een lijn op het parcours.

GPIO en PWM

Gebruikt voor het aansturen van motoren, magneet, LED-strip en andere fysieke componenten.

NRF24L01

Gebruikt als draadloze verbinding tussen afstandsbediening en robot voor besturingscommando's.

Besturing en veiligheid

Een belangrijk onderdeel was de loop waarin de robot commando's van de controller uitleest en vertaalt naar motor- en servo-aansturing. De afstandsbediening stuurde draadloos input naar de robot. Die input werd omgezet naar rijmodi, zoals handmatig rijden, de gripper bewegen of autonoom een object volgen.

Bij deze besturing was veiligheid belangrijk. Als de verbinding met de afstandsbediening wegviel, mocht de robot niet blijven doorrijden op het laatste commando. Daarom is in de aansturing rekening gehouden met een noodstop: wanneer geen bruikbare input meer binnenkomt, worden de motoren teruggezet naar stilstand.

Dit maakte het project technisch interessant, omdat software direct invloed had op een fysiek systeem. Een fout in timing, communicatie of motorwaarden was meteen zichtbaar in het gedrag van de robot.

Autonome functies

Voor de autonome onderdelen is computer vision gebruikt. De robot kon een blauw object volgen door in het camerabeeld te zoeken naar kleur en positie. Op basis van de gevonden contour werd bepaald of de robot naar links, rechts of vooruit moest bewegen.

Een tweede toepassing was het volgen van een lijn op het parcours. Daarbij werd de camerafeed verwerkt tot een richting en afstand ten opzichte van het midden van het beeld. Die informatie werd vervolgens gebruikt om de rupsbanden apart aan te sturen.

De combinatie van camera-input en motorsturing maakte duidelijk hoe belangrijk feedback is bij een robot: de software moest steeds opnieuw waarnemen, interpreteren en bijsturen.

Gripper en gewichtmeting

Voor het oppakken van een gewichtje werd een magneet gebruikt in de arm van de robot. De robot moest het object kunnen oppakken, verplaatsen en tegelijkertijd het gewicht kunnen bepalen. Daarvoor was een load cell in de arm verwerkt.

De ruwe waarden van de load cell moesten worden omgerekend naar grammen. Hiervoor is een kalibratie gebruikt waarbij meerdere meetwaarden werden uitgelezen en gemiddeld. Dat maakte de meting stabieler en minder gevoelig voor schommelingen tijdens het oppakken.

LED-strip op muziek

Naast de rij- en grijpfuncties heb ik ook gewerkt aan een controller voor een LED-strip die reageerde op muziek. Via de microfoon werd audio ingelezen en verdeeld in lage, midden- en hoge frequentiebereiken. Per bereik werd bepaald hoeveel LEDs actief moesten zijn.

Daardoor veranderde de LED-strip dynamisch op de beat van de muziek. Dit sloot aan bij de wedstrijdelementen waarin robots beweging en visuele output moesten combineren met muziek.

Samenwerking

Het project werd uitgevoerd in een groot interdisciplinair team. Daarbij moest de software aansluiten op keuzes uit werktuigbouwkunde en elektrotechniek, zoals de vorm van de arm, de gekozen motoren, de sensorplaatsing en de beschikbare aansluitingen.

We werkten met Scrum om taken te verdelen, voortgang te bewaken en onderdelen op tijd te integreren. Vooral de integratiemomenten waren belangrijk, omdat losse oplossingen pas waarde hadden wanneer ze samenwerkten op de echte robot.

Wedstrijd en demo

Onderstaande video laat de robot tijdens het wedstrijdelement zien. Hier komen de verschillende onderdelen samen: mechanica, motorsturing, draadloze bediening en de software die tijdens het project stap voor stap is geintegreerd.

Wat ik geleerd heb

  • Hoe software direct samenwerkt met fysieke componenten zoals motoren, servo's, sensoren en een camera.
  • Waarom een duidelijke controller-loop belangrijk is voor betrouwbaar robotgedrag.
  • Hoe je rekening houdt met veiligheid wanneer draadloze besturing tijdelijk wegvalt.
  • Hoe computer vision kan worden gebruikt om autonoom richting te bepalen.
  • Hoe belangrijk integratie en communicatie zijn in een interdisciplinair project.

Andere projecten