Sohaib Kaidali

Robotics · reinforcement learning · perception

I teach robots to balance, walk and see.

I'm a computer engineering student at McGill and a research assistant at Mila and the McGill Mobile Robotics Lab, where I train a Unitree H2 humanoid to balance a free pole on its palm while it walks. I also write the perception and simulation software for McGill Robotics' underwater vehicle.

Open to internships for summer 2027

The H2 walking at 0.3 m/s with a free 1.5 m pole on its palm. Nothing holds the pole: the arm keeps moving under it. Simulation (Isaac Lab); hardware tests are planned for this winter.
99.0%of 1,024 walking test episodes end with the pole still up
30 Hz3D perception running on the underwater robot's Jetson
6thoverall at RoboSub, the international underwater-robot competition
320Msimulated control steps per second in my GPU car simulator

Selected work

Each project starts from a question. The case studies say what I built, what the numbers are, and what went wrong on the way.

Mila · McGill Mobile Robotics Lab · May 2026 – now

Can a humanoid balance a free pole on its palm while it walks, using only its head camera?

Yes, in simulation. Pure reinforcement learning never got there, so I put a classical balance controller in the arm and let RL learn the corrections on top.

  • 99.0%success walking, 98.8% standing, over 1,024 test episodes
  • ~30%more accurate pole estimate than a Kalman filter, from a learned estimator
  • 30 / 30walking trials through the robot's real software interface, in a second simulator
  • Isaac Lab
  • PPO
  • LQR
  • DAgger
  • MuJoCo
  • 31 DOF
Read the case study →

McGill Mobile Robotics Lab · 2026

Can one neural network walk five different robots?

One policy drives Cassie, Digit, the Unitree G1, H1 and H2, which have between 12 and 31 joints. I added the H2 and fixed the ways it learned to cheat.

  • 5 robotsone PPO policy, with masking for the joints a robot doesn't have
  • 17.5 → 4.0%difference between left and right steps after tuning motor gains from physics
  • 62°forward lean the first H2 policy used as an exploit, removed
  • Isaac Lab
  • RSL-RL
  • PyTorch
  • Sim-to-real
Read the case study →

McGill Robotics · 2025 – now

How do you test an underwater robot when the pool is booked?

I rebuilt the team's simulator so the real robot software runs against a virtual pool, used it to generate training images, and wrote the C++ pipeline that maps objects in 3D on the robot.

  • 0.83 mAP50on real pool images for the final detector, built on simulator-generated training data
  • 30 Hz3D object map on a Jetson AGX Orin (TensorRT, Kalman filter, Hungarian matching)
  • 6thplace overall at RoboSub 2026
  • C++
  • ROS 2
  • Unity
  • TensorRT
  • Synthetic data
Read the case study →
Chart showing, for ice, snow and wet roads, which corner speeds are recoverable, undetermined or physically impossible

Personal research project · 2026 · in progress

Can reinforcement learning beat model predictive control when a car hits ice?

Most comparisons include crashes nobody could have avoided. I first label which scenarios are physically recoverable, then compare the two methods only there, with the plan written down before the results.

  • 320Mcontrol steps per second in a GPU vehicle simulator I wrote
  • 150 testscheck the GPU simulator against a slow reference model
  • Pre-registeredhypotheses and what would disprove them, committed before any result
  • NVIDIA Warp
  • MPPI
  • PPO
  • Vehicle dynamics
Read the case study →

Try it

Balance a pole yourself.

This is the textbook version of the H2 problem: a 1.5 m pole on a cart. Move your pointer and the cart follows. With the controller on, it also keeps the pole up. Switch it off and you'll see why the robot needs one.

The controller is LQR, the same kind of balance law that sits inside the H2's arm. It runs in your browser.

More projects

Smaller builds, teaching tools and one useful failure.

AUV Lab web page with a 3D vehicle and its eight thrusters

2026 · live

AUV Lab

Interactive lessons I built for new team members: how eight thrusters turn into one motion command, then PID, LQR and MPC on the same simulated vehicle. Everything runs in the browser.

  • TypeScript
  • three.js
  • Control

2025

Sumo-Bot

A 1.7 m/s autonomous sumo robot on an ESP32. Collisions kept freezing the sensor bus, so I wrote a driver that detects a stuck sensor and clocks it free. Placed 4th against university teams.

  • C++
  • FreeRTOS
  • ESP32
  • PID
Stereo camera viewer showing a depth map and point cloud produced from the simulator

2026

ROS 2 sensors for Unity

A sensor package for Unity simulators: cameras, depth, LiDAR, IMU with drifting bias, GPS, sonar and DVL, published as standard ROS 2 messages. Written to avoid memory allocation while running, so frame times stay steady.

  • C#
  • Unity
  • ROS 2
  • Burst
Diagram: commanded force and drag cancel out in closed loop, so the fit cannot tell them apart

2026 · a useful failure

The model fit that was worse than guessing

I fitted a drag and added-mass model to pool data so we could use model predictive control. The optimizer converged, and the model predicted worse than a constant. The data was the problem, and finding out why changed how we collect it.

  • CasADi
  • IPOPT
  • System identification

2023

Slime-mold road networks

Slime mold grows efficient networks between food sources. I simulated 100,000+ agents on the GPU at 60 FPS and turned the pattern they leave into a road graph.

  • Java
  • OpenGL compute shaders
  • GLSL

2024 · live

Particle-filter localization, visualized

A robot that doesn't know where it is starts with thousands of guesses and discards the ones its sensors contradict. This shows that happening, step by step.

  • C#
  • Unity
  • WebGL

Earlier and other work

2025McGill course mapEvery McGill course and its prerequisites as one interactive graph. An LLM parses the free-text prerequisite rules.Open it
2024Nutrition calculatorA nutrition tracker built in a weekend at the DawHacks 2024 hackathon.Code
2024Heart-disease risk model21 pipelines on 250,000 survey records with 9% positives. The lesson was about evaluation: I resampled before cross-validation and had to redo it.Code
20222D PlaceA shared pixel canvas that many people edit at once. Rust server, WebSockets, SvelteKit front end.Code
2022FRC robot softwareVision targeting with OpenCV and velocity controllers for Team 3986. Regional champions.
2021Pathfinding visualizerA*, BFS, DFS and maze generation, animated.Run it

Experience

May 2026 – now
Montreal

Research assistant, humanoid robotics and reinforcement learning

Mila (Quebec AI Institute) and the McGill Mobile Robotics Lab

  • Built a 31-joint whole-body controller that lets the Unitree H2 balance a free pole on its palm while walking, using only its head camera. Case study
  • Trained a pole-state estimator with imitation learning (DAgger) that beats the Kalman filter by about 30%, and caught a data leak that had made it look twice as good.
  • Co-trained one walking policy across five robots and added the H2 to it. Case study

Jun 2022 – Aug 2025
Remote

Software engineer intern

MotionCorrect, Inc.

  • Built cross-platform tools with Rust back ends and plain-JavaScript front ends, including virtual scrolling so very large tables stay responsive.
  • Rebuilt the Windows, macOS and Linux build pipelines with caching and parallel jobs: 2 hours down to 20 minutes.
  • Shipped a Chrome and Firefox extension that reads room sizes from real-estate listings and totals the usable area, with tests that catch page-layout changes.

Sept 2025 – now
Montreal

Software engineer, autonomy and perception

McGill Robotics, autonomous underwater vehicle team

  • Rebuilt the Unity simulator and the synthetic-data pipeline; wrote the real-time 3D perception pipeline in C++ and ROS 2. Case study
  • Worked on 6-DOF state estimation and the quaternion/PID controllers. The team placed 6th overall at RoboSub.

2020 – 2022
Montreal

Team captain and software lead

FIRST Robotics Competition, Team 3986

  • Led the team to a regional championship. Wrote the vision pipeline and velocity controllers, which improved tracking precision by 20%.

About

I've been building robots since I was a kid with a knock-off Mindstorms set, spending hours deciding where the motors should go. In high school I led the software for a competition robot. At McGill I joined the underwater-robot team, and then a research lab that had a humanoid.

What I like most is the part between a controller that works in simulation and one that works on a machine. Most of my time goes into finding out why something that looks fine isn't: a sensor model that was too kind, a test that leaked the answer, a filter that trusted its camera too much.

I try to report numbers the way I'd want to read them: with the number of trials, on data the model hasn't seen, and with the failures left in.

B.Eng. in Computer Engineering, McGill University, expected May 2028. I speak English, French and Arabic.

Tools I use

Robot learning and control
Isaac Lab / Isaac Sim, MuJoCo, PyTorch, PPO (RSL-RL), imitation learning (DAgger), LQR, MPPI / MPC, Kalman filtering, domain randomization
Robotics software
C++, Python, ROS 2, TensorRT, ONNX, CUDA, NVIDIA Warp, OpenCV, Unity
Systems
Rust, C, TypeScript, FreeRTOS, Docker, Linux, CI/CD (GitHub Actions)

Awards

  • 6th overall, RoboSub 2026 with McGill Robotics
  • 8 first places at hackathons, including 1st overall at DawHacks and MariHacks (80+ teams each)
  • Regional champions, FIRST Robotics as team captain and software lead