Modulair mobiel platform

Ik heb voor een Belgisch kennisinstituut een modulair mobiele rover ontwikkeld dat buiten autonoom kan rondrijden. Elke module heeft een wiel met een in-wheel servomotor een harmonische aandrijving, waarmee het wiel om een vertikale as kan draaien. Zo is ieder wiel zodanig te positioneren dat om een willekeurig punt op de ondergrond een bocht wordt gedraaid met minimale zijdelingse slip. Het concept is modulair, dat wil zeggen dat een wiel kan worden bijgeplaatst en deze “weet” hoe hij moet meebewegen met de andere wielen. Hierdoor kunnen constructies worden ontwikkeld met wel 6 of 8 wielen die een grote draagkracht aankunnen. De initieel ontwikkelde rover heeft vier wiel-modules. Iedere module heeft een eigen computer (RPi4) en ROS2 wordt gebruikt als middleware.

Ik heb het concept ontwikkeld, de componenten (motoren, drives, communicatie, electronica) gespecificeerd en gesourced, en de mechanica uitgewerkt (CAD) en de uitvoering geregeld (bedrijf voor de lasconstructies, en bedrijf voor CNC). Verder heb ik alle software ontwikkeld.

Dit betreft software voor op de robot zelf, maar  ook de GUIs (rqt) en software voor analyse van de rosbags.

Unity3D en SLAM

Naast de ROS2-ontwikkeling heb ik in Unity3D verschillende omgeving gemaakt om het platform virtueel te kunnen testen tbv SLAM. Hiertoe heb ik in Unity3D een IMU-sensor en GPS-sensor ontwikkeld (een Lidar sensor was al beschikbaar). Ik heb aangetoond dat ik een kaart kan genereren van de omgeving tbv autonome navigatie, zie video hieronder.

Eerste testen buiten

Dit project is nog niet afgerond, de bedrading worden gefatsoeneerd en volgens EMC-regels worden afgeschermd om CAN-bus-storingen te voorkomen De huidige status is dat het platform met een joystick is te bedienen. Zie hieronder.

ROS2

De volgende ROS2-packages heb ik gemaakt:

drive_marloc Package met alle functionaliteit voor de uitvoering van de beweging van de wielen en de harmonische aandrijving. Communicatie met de drives gebeurt middels CAN-bus (openCAN).
marloc_bringup Package met de nodige launch-files om nodes op te starten.
marloc_calibration Package om calibratie van de harmonische aandrijving te doen. De werkelijke positie wordt continu gemeten zolang een batterij de aandrijving voedt. Echter, het is geen absolute encoder, en bij grote verdraaiingen als het platform niet bekrachtigd is wordt een meetfout gemaakt, in die gevallen is visuele calibratie van de voorwaartse wielpositie nodig.
marloc_description urdf model van de robot (ge-exporteerd uit Inventor en bewerkt voor gebruik in Unity3D en Gazebo) en rviz en gazebo-wereld van de robot voor visualizatie en simulatie.
marloc_interfaces Definitie van specifieke ROS-messages en ROS-services voor dit platform.
marloc_localization Configuratie van odometry (robot localization package) en schatter van odometry gebaseerd op pseudo-inverse van de mechanica en meting van de wielsnelheid en oriëntatie van de harmonische aandrijving.
marloc_logger Service voor het starten en stoppen van een rosbag.
marloc_orientation_plugin Rqt-plugin dat oriëntatie van de robot t.o.v. verticale as (zwaartekracht) toont.
compass_plugin Rqt-plugin dat oriëntatie robot t.o.v. noorden laat zien middels een kompasnaald.
marloc_simulation Launch en configuration files t.b.v. simulatie in Gazebo en Unity3D.
marloc_status Rqt-plugin dat realtime de oriëntatie van de wielen en snelheidsvector wielen toont.
nav2_mixed_pursuit_controller Zelf ontwikkelde regelaar dat een mix is tussen een L1-regelaar (die staat geen zijdelingse translatie toe) en een pure translatie-regelaar (die naar een pad beweegt zonder te draaien), deze heb ik geïmplementeerd als een nav2-plugin in C++

RQT Plugin

 

Opmerkingen zijn gesloten.