Ontwikkeling en simulatie van een boot controller
Voor een ontwikkelaar in Nederland heb ik een nieuwe regelaar voor een boot ontwikkeld in ROS. De boot is voorzien van twee vaste thrusters naast elkaar. Het probleem met de oude regelaar was dat de boot doorschoot, niet goed koers hield, en geen goede mitigatie had in geval van obstakels: Om botsingen te voorkomen werd de motor uitgezet, maar de snelheid naar het obstakel is dan nog niet uit de boot waardoor botsingen niet altijd te voorkomen waren.
Ik heb dit laatste opgelost door een loiter-functie gemaakt die de positie vasthoudt als er een obstakel zich op het pad bevindt.
De regelaar heb ik ook gewijzigd: Voor de rotatie van de boot, en de voorwaatse positionering, zijn aparte regelaars gemaakt. Tevens zijn deze regelaars “gethrottled” afhankelijk van de oriëntatie van de boot t.o.v. het setpoint. Als de boot te ver is verdraait van het setpoint wordt de werking van de voorwaartse regelaar beperkt (tot 0), waarmee wordt bereikt dat de boot zich eerst goed draait naar het setpoint, en dan pas er naartoe gaat. Dit voorkomt gezwalk van de boot. De regelaars zijn PD-regelaars. Ook nieuw is dat als het setpoint (dat zich langs een gedefinieerde baan beweegt) te ver weg komt te liggen, deze wordt gepauzeerd. Dat voorkomt dat delen van de baan worden ‘afgesneden’ en dus wordt het opgegeven pad beter gevolgd.
De regelaar is in de praktijk getest (“op het water”) en de nieuwe functionaliteit werkt goed: Het pad werd beter gevolgd, zodat ook dichter bij de kant kon worden gevaren, en bij obstakels werd er hard geremd zodat botsingen werden voorkomen. Tevens had ik een simulator in Python gebouwd voordat de regelaar gebouwd was (en ook was met de bestaande simulator in Gazebo getest) voordat het water op werd gegaan.
De state-machine heb ik t.b.v. de nieuwe regelaar ook aangepast (SMAC voor ROS1). De regelaar-parameters zijn dynamisch te re-configureren. Dit was een kort project (1 maand) waarin snel resultaten geboekt zijn.