Internship at NASA Jet Propulsion Laboratory (JPL)

C++, ROS Noetic, OpenCV, Eigen

NIOSH Robot
Testing the robot in the Mars Yard.

Note: JPL cleared this content for public release.

Overview

I worked as a Robotics Software Intern at NASA’s Jet Propulsion Laboratory in the Robotic Mobility group (347F) during Summer 2024.

I primarily developed ROS C++ packages to support the control of the NIOSH robot, a mobile robot designed to operate in the hazardous terrain of coal mines.

The robot itself is rather unique–it’s made up of two rigid bodies that are joined by a single linkage. The connection points are actuated, meaning the robot can change its kinematic configuration in response to its environment or a specific task. This enables the robot to operate in configurations like side-by-side or leader-follower, each of which has different advantages such as increased stability or a slimmer profile.

Projects

IMU-Based Rollover-Risk Detection

Rollover Risk Detection Rollover Risk Detection

I developed a simulation-based empirical method to asses the robot’s risk of tipping in any given state, where the state is defined by its kinematic configuration and the tilt of each body.

The algorithm models the support polygon of the robot, along with the ground-plane projection of the its center of mass (yellow circle). As the center of mass projection approaches the edge of the support polygon, it indicates a decrease in the robot’s stability.

Robot Path Projection Lines

Robot Path Projection Lines Robot Path Projection Lines

I developed an algorithm that generates path projection lines based on the camera’s intrinsic parameters and the robot’s configuration, with the lines representing the robot’s width on the ground plane. The system used a two-camera setup with a stitched video feed, and factors such as each camera’s yaw, pitch, field of view (FOV), and height are parameterized in the calculation.

Configuration Manager

Robot Path Projection Lines Robot Path Projection Lines

I developed a configuration manager that allows the robot to efficiently change its kinematic configuration during operation.

The algorithm abstracts the robot’s non-intuitive kinematics from the operator and prioritizes a small operational footprint during the transition.

SLAM