Sept 2025 — Present · Waterloo, ON

Exo Software Team Lead

UWaterloo Biomechatronics Design Team

Overview

Led the software team for Exo, a project team within the UWaterloo Biomechatronics Student Team building a soft exoskeleton for the ACE competition.

As the Software Lead, coordinated development across embedded firmware, control, simulation, and a reinforcement learning-based motion assistance system.

Exoskeleton v1

CAD model of the exoskeleton, 
showing both legs and the cable-driven actuation
The exoskeleton assists two joints per leg through cable-driven actuation.

Full mechanical, electrical, and software details are available in our 2026 ACE competition slides.

System Overview

Full system architecture, from the IMUs and motor drivers through the firmware 
to the ROS2 policy and the user interface
One loop: sensors into firmware, motion states out to the policy, final torque back to the motor drivers. The interface taps the same firmware for telemetry and the emergency stop.

Connected the full software stack from sensors and motor drivers to the motion assistance policy.

Streamed motion data from IMUs and motors over CAN into the embedded firmware. The resulting state was passed to a reinforcement learning policy running in ROS2, which generated assistive torque commands for the motors.

Motion-Adaptive Assistive Control

Deep Reinforcement Learning

Training pipeline: recorded motions feed a target torque, the simulator and the DDPG update, 
and a reward built from position, velocity and torque error
Training. Recorded motions set the target; the reward penalises error in joint position, joint velocity and torque.

Developed a reinforcement learning-based controller to adapt assistance to the wearer's movement instead of relying on separate controllers for various movements and making algorithm complex.

Engineered learning strategy using model-free DDPG policy to map hip and knee joint motions into continuous torque commands for the actuators.

Simulation & Training

Trainning models in parallel in NVIDIA Isaac Sim

Trained model and simulated hundreds of environments in parallel in NVIDIA Isaac Sim, allowing policies to be trained and evaluated within short time.

Deployment to Real Hardware

The trained network deployed on hardware, reading real joint states and returning a torque
Deployment. The weights are frozen, and the same network now reads joint angle, joint velocity and IMU data off the real exoskeleton.

Deployed the trained policy on real hardware, using real joint and IMU measurements to generate assistive torque in real time.

Firmware

Four FreeRTOS tasks in priority order, an emergency-stop interrupt service routine, 
and the flags they share
Four tasks in priority order, plus the emergency-stop interrupt that can cut the drivers regardless of what else is running.

Built a deterministic embedded control layer around FreeRTOS with fixed-rate tasks and priority-based scheduling.

The highest-priority control task ran at 1 kHz, applying torque and safety limits before commanding the motor drivers. Keeping these limits in firmware created a safety boundary independent of the higher-level controller.

Stack

  • C
  • C++
  • FreeRTOS
  • ROS 2
  • Python
  • NVIDIA Isaac Sim
  • CAN