Tijdens het ontwikkel van de robot voor PEE20 bleek het zeer handig te zijn om kruispunt situaties te kunnen visualiseren. Ismail doet dit graag met de hand, maar het leek mij interessant om dit te simuleren. Daarom besloot ik met godot een applicatie te maken die dit doet.
Godot is een game engine en dat maakt het niet de meest logische code om een applicatie in te ontwikkelen. Ik had alleen helemaal geen ervaring met UI frameworks voor Python, had totaal geen zin om een nieuw Flutter project te beginnen, en al helemaal niet om met bootstrap en php iets te bouwen. Dus besloot ik Godot te gebruiken. Enkele voordelen van Godot:
GDscript lijkt op Python
Applicaties zijn cross-platform
Hoge performance
Snel itereren mogelijk
Toen ik begon met het schrijven van de programmacode had ik nog totaal geen idee hoe ik de sensoren en kruispunten zou weergeven en simuleren. Ik was ook niet van plan dit formeel te maken door een plan op te stellen en ideeën te brainstormen. Dit was immers een 15 minute coding adventure en dus kon ik geen tijd verliezen aan zulke zaken.
Ik ben als allereerst begonnen met het maken van de lijnvolgsensoren. Ik besloot de simulatie te laten werken vanaf een birds-eye-view, dus topdown, omdat dit ook de orientatie van de lijnvolgsensoren is ten opzichte van de ondergrond. Deze sensoren bestaan uit niets minder dan een paar rechthoeken, en een lamp dat rood of groen kan zijn, op basis van of het een zwarte lijn detecteert. Toen heb ik een sensor bracket object gemaakt dat deze sensoren beheert en instelt. Verder heb ik een zeer eenvoudige datamanager geschreven zodat ik de positie en hoeveelheid van sensoren kon bijhouden.
Daarna ben ik bezig gegaan aan de UI, wat achteraf misschien niet zo'n goed idee is, zo behendig ben ik daar namelijk niet in. Ik wilde graag dat de positie in een sensorarray in te stellen was met een drag-and-drop interface, omdat het inventorysysteem van een vorig project ook zo werkte.
Hierna heb ik de kruispunten toegevoegd. Deze bestaan uit rechthoeken met een detectiemogelijkheid. Als de rechthoek van de sensor LED de rechthoek van de lijn snijdt, wordt de LED groen: anders wordt deze rood. Dit onderdeel was het makkelijkst te implementeren
Daarna heb ik meer UI en interactie mogelijkheden toegevoegd. Heel de sensorarray kon nu ook gedraaid worden en de kruispunten konden 90º geroteerd worden. Om de applicatie ook voor telefoons en touchscreens toegankelijk te houden voegde ik hier knoppen voor toe.
Om tot deze werkzame staat te komen heeft het maken van de applicatie me ongeveer 3 uur gekost; best netjes al zeg ik het zelf.
We hebben de tool een aantal keren goed kunnen gebruiken en heb na afronding van het project nog wat quality-of-life aanpassingen en toevoegingen gedaan voor eventuele toekomstige leerlingen.
De horizontale en verticale spacing van de sensoren kan nu aangepast worden. Ook kan de hoeveelheid ingesteld worden, wat eigenlijk al de bedoeling was sinds het begin. Verder werkt de onscreen joystick nu correct, is er een instellingen/help popup, en ziet de UI er iets plesanter uit.
Al met al ben ik zeer tevreden met het extra product dat PEE20 heeft opgeleverd. Elk excuus om te programmeren of simuleren haal ik graag aan. Wil je de tool zelf gebruiken? Ga dan naar https://greaseheadd.itch.io/line-sensor-tool met toeganscode 'PPanx'. De code is vrijgegeven onder de MIT licentie.