Robotics · Full-stack

Learning to build robotics end to end — from mechanical design and embedded firmware to the software that makes a machine move.

I'm Sam, a mechanical engineer (M.S., Purdue '26) interested in the space where hardware meets software. I like working across the whole stack of a robot — design, electronics, and control — and figuring out how the pieces fit together.

West Lafayette, IN ROS 2 · C++ · Python · SOLIDWORKS

Selected work

A robot I'm building now

Live · walking

Hexapod Robot

2025 — present

A six-legged robot learning to navigate on its own

This started with an open source design from MakeYourPet, which I've been adapting and building on. It has 18 servos across six legs, a Jetson Orin Nano running ROS 2 Jazzy, and a Pimoroni Servo2040 (RP2040) running C++ firmware to control the servos over USB.

I split the walking software into separate ROS 2 nodes so I can work on one piece at a time: choosing a gait, turning foot positions into joint angles, and sending commands to the servos. I worked out the inverse kinematics for my leg geometry and added an alternating tripod gait, where three legs move while the other three support the body.

Current phase — autonomy

It's now walking 40 cm square routes on its own using its onboard sensors and Nav2. In one September 2026 test with a tether attached, it finished all six parts of the route with a 10 cm/s speed limit and came back about 8 cm from where it started, according to its own position estimate. Next, I want it to explore and map the first floor. There's still work to do before that.

  • ROS 2 Jazzy
  • Jetson Orin Nano
  • C++ firmware
  • RP2040 / Servo2040
  • Inverse kinematics
  • nvblox
  • Nav2
  • cuVSLAM
  • SLAM Toolbox
  • RealSense D435i
  • SOLIDWORKS

Hexapod · Electronics

A custom control and power board

I designed a four-layer PCB to bring the hexapod's control and power electronics onto one board. An RP2350 handles 20 servo outputs, foot-contact inputs, and an IMU, while a protected 4S battery path supplies the servo rail and regulated Jetson power.

I organized the layout around short power loops and repeated servo sections, with components on both sides. The design and routing are complete; assembly and hardware bring-up are next.

  • KiCad
  • 4 layers
  • 110 × 140 mm
  • RP2350
Angled KiCad 3D model of Hexapod Control Board V1, with servo connectors along both sides, an XT90 battery connector, and four mounting holes
Hexapod Control Board V1 · KiCad 3D render

Hexapod · Reinforcement learning

Learning to get back on its feet

I trained a PPO policy in MuJoCo to right my 18-servo hexapod from upside-down starts. I refined the rewards to reduce jitter, acceleration, jerk, and motion near the servo limits, and varied mass, friction, and servo strength during training.

Once upright, the learned recovery hands over to a standing controller that settles the legs into their neutral pose. This is a simulation experiment; transfer to the physical robot remains to be tested.

  • PPO
  • MuJoCo
  • PyTorch
  • Dynamics randomization
MuJoCo simulation · Learned recovery with a standing-controller handoff · 1× speed

Inside the hexapod

Teaching it to find its way around

Once I had it walking with a controller, the next step was letting it decide where to go. The Jetson handles the sensing, planning, and walking onboard, and I use a separate dashboard to see what it's doing.

  1. 01

    Figuring out where it is

    The robot needs to keep track of where it is as it walks. I'm using a RealSense D435i with cuVSLAM to estimate its movement from stereo images and inertial data. Lidar and SLAM Toolbox build a 2D map, while nvblox uses depth images to build a 3D view of nearby surfaces. These maps help it work out where it can go.

    Perception & mapping
  2. 02

    Getting around its own legs

    One tricky part: the robot sees its own moving legs as obstacles. I use the leg geometry to filter those readings from the lidar and depth camera, while checking that there's room for the whole robot along a path. It can also lift its body for a clearer lidar scan before walking. Nav2 plans the route, and a supervisor checks its movement commands before they reach the walking controller.

    Planning & geometry
  3. 03

    Making it all run together

    Mapping, planning, and controlling 18 servos keep the Orin's six CPU cores busy. Getting everything to run together has meant moving the core control code to C++, tuning how much work the mapping and planner do, and tracking down delays in ROS messages. If navigation data falls behind, the robot pauses. Longer faults put it into a hold, with watchdogs in the software and firmware watching for lost communication.

    C++ & reliability
  4. 04

    Next up: exploring rooms

    The square routes are working at several speed limits now. I've also built the software to pick the next unexplored edge of a map, save progress, and retry routes when needed. The next step is getting those pieces working reliably across multiple rooms, then having it use a saved map on a later run. I still need to test those longer trips on the robot.

    Ongoing development

Earlier projects

Things I've built before

Previously completed projects. Full write-ups are on the way.

  1. 01

    Senior Design — Interactive Dog Toy

    A mechanical dog toy, built for autonomous play. Inspired by the whack a mole arcade game, a toy pops in and out based on the dogs proximity. A custom collar using UWB localization allows the toy to track the dog's position and give data on dog movement.

    Purdue · Capstone
  2. 02

    LQR Self-Balancing Robot

    An inverted-pendulum balancer stabilized with a Linear–Quadratic Regulator — modeling the dynamics, tuning the controller, and landing it on real hardware.

    ME 578 · Digital Control
  3. 03

    Autonomous Boat Simulation — Virtual Robot X

    A virtual robotic boat in ROS 2 completing station-keeping, wayfinding, and acoustic-perception tasks, with thrusters driven by PID control and Kalman filtering.

    ME 597AS · Autonomous Systems
  4. 04

    Mechatronics Final — Autonomous Ball Robot

    A differential-drive robot that autonomously sorted colored balls into baskets for the ME 588 team competition — full design, fabrication, and Arduino GIGA control. Took First Place and Best Robot Design.

    ME 588 · Mechatronics
  5. 05

    Bed Box

    A personal build to handle the difficulties of living in a shared dorm. Scored tens of thousands of views on the school' subreddit.

    Personal