Over het project
We werkten met de RELbot, een kleine robotauto die in verschillende roboticavakken aan de Universiteit Twente wordt gebruikt. Het hardwareplatform, de low-level motorinterface, de real-time omgeving en de development toolchain waren al aanwezig. De nadruk van het vak lag daardoor niet op het vanaf nul bouwen van de robot, maar op het ontwerpen en integreren van de softwarecomponenten die nodig zijn om de robot een zinvolle taak te laten uitvoeren. In dit geval was dat het volgen van een felgroene bal.
Fig. 1. Overzicht van de architectuur en de communicatie tussen de componenten van de RELbot, overgenomen uit [1].
Figuur 1 laat de volledige architectuur van software en hardware van het RELbot-systeem zien. De robot is opgebouwd rond een Raspberry Pi 4B, waarbij drie CPU-cores een reguliere Ubuntu-installatie draaien en één core Xenomai draait, een framework om firm of hard real-time computing in een Linux-omgeving te integreren. Een firm real-time proces op de Xenomai-core communiceert via SPI met een FPGA die met een HAT op de Raspberry Pi is gemonteerd. De FPGA was voorgeprogrammeerd aangeleverd en verzorgt de low-level motorinterface: hij drijft de motoren aan met PWM-signalen en een richtingssignaal en rapporteert de quadrature encoder-tellingen terug aan de regelsoftware.
Ons werk richtte zich op het ontwerp en de implementatie van de hogere softwarelaag in ROS2 Humble. We moesten bepalen hoe we het systeem in componenten zouden opsplitsen, welke informatie elke component moest publiceren of waarop die moest abonneren en waar verantwoordelijkheden als perceptie, setpointgeneratie, regeling en veiligheid thuishoorden. Eén ROS2-node abonneert zich op de topic met camerabeelden en verwerkt het beeld met OpenCV. Door HSV-thresholding toe te passen detecteert die groene objecten in het frame, selecteert de grootste blob, berekent het zwaartepunt daarvan en publiceert deze positie naar een andere ROS2-topic. Een setpointgenerator zet de gedetecteerde balpositie vervolgens om van beeldcoördinaten naar een bewegingssetpoint, op basis van de cameraresolutie en een aantal tuningparameters.
De bewegingssetpoints worden via een bestaand communicatiekanaal naar de loopcontroller gestuurd, die als firm real-time taak op de Xenomai-core draait. Deze loopcontroller ontvangt encoderterugkoppeling van de FPGA en gebruikt een 20-sim-model van het systeem met PID-functionaliteit om op vaste tijdstappen motorcommando's te berekenen. Het Xenomai-proces stuurt daarna de bijbehorende PWM-signalen en richtingssignalen door naar de FPGA, die de motoren aandrijft. We hebben ook veiligheidslagen geïmplementeerd om de PWM-waarden te begrenzen en de robot te stoppen zodra er geen bal wordt gedetecteerd. De video's op deze pagina laten het systeem in de praktijk zien in het RAM-lab. Met meer tijd hadden de PID-parameters waarschijnlijk verder afgestemd kunnen worden om de beweging te verbeteren, want de robot volgt de bal met succes, maar beweegt nog wat krabachtig.
De grootste uitdaging van dit project was om snel vertrouwd te raken met het bestaande roboticaplatform en te beslissen hoe we de software eromheen zouden structureren. Het was een erg interessant vak en een waardevolle praktische introductie tot softwarearchitectuur voor robotica en ROS2.
[1] J. P. de Rie, “The design and development of the RELbot add-on Scout: A modular sensing and computational platform,” Master’s thesis, University of Twente, Enschede, The Netherlands, Oct. 2025. [Online]. Available: https://purl.utwente.nl/essays/108887
Dit project is gemaakt als onderdeel van Advanced Software Development for Robotics (202200109)
Grade: 9.5