Open-Source Projects.

It all begins with an idea or a problem.

Below is a selected list of open-source projects I’ve created.

Navigation2 (aka Nav2)

ROS 2’s navigation framework and system, the successor to the ROS Navigation Stack. Includes new algorithms including Hybrid-A*, MPC Controllers, Regulated Pure Pursuit, Waypoint Task Executors, Behavior Tree Navigator, Keepout and Speed Limited Zones, and more!

S Macenski, F Martín, R White, JG Clavero, “The Marathon 2: A Navigation System“, IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2020.

Smac Planner

A templated A*-based planning framework containing a 2D A*, Hybrid-A*, and State Lattice planner implementations. It covers the niche of supporting Ackermann (car-like), Legged, and non-circular Differential and Omnidirectional robots in the ROS Navigation ecosystem for the first time.

It is heavily optimized with precomputations and caching to ensure a real-time planning analogous to other algorithms available. It also has approximate paths within tolerances and analytic expansions to significantly accelerate planning.

Paper to be prepared in 2022

SLAM Toolbox

A toolbox for 2D Lidar SLAM and the default SLAM vendor for ROS 2. Enables editing of maps and continuation of prior mapping sessions to continue refining the map or accounting for changes in the environment.

It includes synchronous and asynchronous modes for offline and live processing. It contains heavily tuned parameters to work well out of the box for a broad number of robots and significant speed ups in the core SLAM algorithms.

Macenski, S., Jambrecic I., "SLAM Toolbox: SLAM for the dynamic world", Journal of Open Source Software, 6(61), 2783, 2021.

Macenski, S., "On Use of SLAM Toolbox, A fresh(er) look at mapping and localization for the dynamic world", ROSCon 2019.

Model Predictive Path Integral Controller

The Model Predictive Path Integral (MPPI) Controller is a Model Predictive Control (MPC) variant that optimizes a trajectory inter-iteration instead of intra-iteration by introducing random perturbations to the previous optimal trajectory at a high rate. These trajectory samples are then scored by a set of objective functions to create the desired behavior.

A key benefit of this approach is the use of objective functions that are not required to be convex or differentiable, creating greater latitude for an algorithm or behavior designer. This algorithm is fully reconfigurable, including plugin-based critic functions for customizable behavior.

Paper to be prepared in 2023

Spatio-Temporal Voxel Layer

A 3D voxel layer with temporal decay for highly dynamic environments. This uses OpenVDB, a 3D voxel representation made by Dreamworks Animations for films, to represent the spatial grid. Then leverages novel decay functions and sensor models to retain a locally accurate representation of the environment from many sensors in dynamic scenes.

Macenski S, Tsai D, Feinberg M., “Spatio-temporal voxel layer: A view on robot perception for the dynamic world”, International Journal of Advanced Robotic Systems, 2020.

Regulated Pure Pursuit Controller

This is a path tracking controller based on the Pure Pursuit algorithm with additional ‘regulation’ heuristics controlling the translational velocity to slow when navigating around sharp turns or when close to the environment where collisions may be possible (as a practical matter of safety in human filled environments and dynamics effects).

It can process at > 1kHz, has predictive collision detection, and dynamically adjustable lookahead distances based on speed.

Paper in review

Nav2 Simple Commander

This is a pure Python3 API for interacting with Nav2 without needing to worry about ROS 2. It handles all of the networking interfaces behind the scenes and gives a clean ROS-free API such a goToPose(), followWaypoints(), and changeMap().

It also includes several proof of concept applications like security patrols (shown), pick and place, and shelf inspection using the API.

Nav2 Waypoint Follower

This is a waypoint follower server where you can select N waypoints to visit sequentially in the Nav2 stack. At each waypoint, a Task Executors plugin will trigger to complete some task (such as shelf inspection shown).

It contains options to select which task executor to use at each waypoint and if to continue if a given waypoint is not able to be achieved.

ROS 2 Ouster Drivers

ROS 2 drivers for the full Ouster lidar series, OS-0, OS-1, and OS-2. This includes a well architected design to support future expansions in sensor API and sensor processing mechanics. It includes sensor processors for 3D structured pointclouds, IMU, 2D laser scan, and various array data image types.

I donated this project to ros-drivers for long-term community ownership and maintenance with support from Ouster.

Standardizing Interfaces

ROS is powerful due to its abundant tooling, great capabilities and standardized interfaces. I’ve developed the official standard interfaces for radar sensors, radar_msgs, and Artificial Intelligence (AI), vision_msgs.

I donated these projects to ros-perception for long-term community ownership and maintenance, with support from RadarIQ (radar_msgs) and Adam Allevato (author of original vision_msgs).