Regenald
Regenald is a differential drive robot I built for Louisa County Public Schools using ROS2 and an Nvidia Jetson Xavier NX with the ability to perform Simultaneous Localization and Mapping (SLAM). The robot is based on James Bruton’s Really Useful Robot with some modifications to take lower cost parts that are also available in the United States. Most of the body’s contruction is 3D printed with a few aluminum extrusions and 8mm steel rods.
Build
The bot is built around an Nvidia Jetson Xavier NX running ROS2 Humble through podman. The motor controller used is an ODrive V3.6 connected to the Nvidia Jetson Xavier NX via USB and controlled using a python ROS2 node program. A Python node was used instead of a C++ control module due to ODrive not having an official C++ control library for their boards. The LiDAR used is a Slamtec RPLIDAR A2M8 which is connected via USB to the Jetson. There is dedicated Teensy 4.1 to control the DC 12v head pully motor over USB to control the optocoupled H-bridge motor controller since the Nvidia Jetson could not output enough voltage over GPIO to reliably control the H-bridge controller. The microcontroller communicates using a custom serial protocol to encode and send the PWM signals over USB and a Python ROS2 node running on the Jetson. The robot has two power rails on a common ground, a 12v one to power the Jetson and a 24v one to drive the ODrive and brushless motors.
Simultaneous Localization and Mapping
SLAM is achieved using ROS2’s SLAM Toolbox launched in online async mode. Navigation is handled via Navigation2 and both are displayed and controlled using RViz.
Controller
If not running in SLAM mode, the controller can be used. The controller is based on James Bruton’s ROSremote. It’s using a raspberry Pi 4 with a Teensy 4.1 running Micro-ROS to read in the values of each joystick and button to publish them to the /joy
topic. The /joy
topic is subscribed to by the various adapter ROS2 nodes that either convert the /joy
messages into a /twist
message or map them into movement of the controller’s mouse and click actions in it’s UI.