1 minute read

Nemesis is a hybrid ROS1/ROS2 skid-steer UVG which grew out of an effort primarily to familiarize my self with integrating an exising ground vehicle into the ROS ecosystem.

Nemesis Main

The project began with the implementation a C++ ROS1 hardware_interface for the Monsterborg mobile base from PiBorg.

On its completion I went on to extend the system with a i7 processor and sensors payload for simultaneous localization and mapping (SLAM). Since then I have been using the system as an outdoor mapping and a mobile compute edge platform for drone navigation experiments including the TUM AR Drone ROS stack.

Very recently, I have began to make inroads into adding experimental autonomous navigation support with the ROS1 move_base package. After a rudimentary setup of move_base on ROS Melodic, I decided to switch to ROS2 Foxy to leveradge the nav2 package for greater flexibility using ros1_bridge to communicate with the mobile base Kinetic stack. This is currently current work in progress.

The following describes my stable setup on ROS1.

System Architecture

Nemesis system architecture diagram

The System architecture is logically into two system components with corresponding code repositories:

  1. A mobile base with an internal ARM based (ARM Cortex-A53 1.2GHz) base controller computer running ROS Kinetic. antoan/nemesis

  2. Upper chassis housing an i7 Intel dual core processor (i7-6600U CPU @ 2.60GHz) computer running ‘ROS Melodic’ and Intel Realsense D435i depth & T256 tracking cameras, positioned relative to each other with a dedicated mount. antoan/nemesis_core

Both computers are connected via ethernet network with an onboard router. The robot can be driven via multiplexed input from a Sony PS4 DualShock 4 controller, ROS rqt_steering plugin or cmd_vel input from move_base.

(A brief 3rd of POV Nemesis)

Flikr project album

Software Architecture

The software stack running on the mobile base is largely based on an adaptation of the Clearpath Husky Kinetic stack’s base, control, description and navigation packages.

The ROS hardware interface implementation wraps the motor controller driver that came with the mobile base, which I ported to Cython from Python, to reduce latency in the main ROS control loop.
For perception and SLAM, I use rtabmap_ros built from source with Apriltag support. In addition, I use the realsense_ros with the Realsense distribution installation method rather than the ros-melodic-realsense-ros package.

Nemesis ROS Graph
Nemesis ROS Graph

Below are some example mapping session taken recently.