Projects

22 projects across 11 categories. Filter by topic below.

2025

Robotics · 19 min read

Nonlinear MPC for Autonomous Racing

Progress-maximizing NMPC for a full-scale Dallara AV-24 competing in the Indy Autonomous Challenge. Two-timescale architecture: a full-lap minimum-time NLP solved offline with a double-track Pacejka vehicle model produces the Track Trajectory Library, while an NMPC at 100 Hz in a Frenet frame executes it with RTI. Validated in AWSIM (best lap 117.6 s, 207 km/h max) and on the physical car.

PythonC++17CasADiacados +4
Robotics · 7 min read

MPC for UR7e Robotic Arm: Warehouse Sorting

Constrained joint-space Model Predictive Control for a UR7e manipulator. An RGB-D perception pipeline localizes objects and obstacles; a receding-horizon CasADi/IPOPT solver generates collision-free joint trajectories at 12 Hz, validated in MuJoCo and deployed on real hardware.

PythonMuJoCoCasADiROS2 +1
Robotics · 8 min read

Decentralized Fleet Coordination for Airport Ground Operations

Multi-agent coverage control for airport ground vehicles using Buffered Voronoi Cells, Lloyd's algorithm, and game-theoretic demand response. Zero collisions across all test scenarios.

PythonMulti-Agent SystemsOptimal ControlGame Theory
Machine Learning · 14 min read

Multi-Agent RL for Autonomous Driving in Waymax

PPO agent trained in Google's JAX-based Waymax simulator on Waymo Open Dataset traffic. Began as speed tracking on log-replay traffic and ended as adaptive cruise control evaluated on a five-scenario stress suite: stalled vehicle, slow lead, emergency braking, stop-and-go, and cut-in. Four pass with zero contact; the fifth exposes a measurable generalization gap. Fourteen training runs, ten documented failure modes.

PythonJAXFlaxOptax +2
Machine Learning · 3 min read

Deep Learning from Scratch

The full arc: backpropagation in raw NumPy, CNNs with BatchNorm and Dropout trained to 78% on CIFAR-10, multi-head self-attention for text summarization, and a Masked Autoencoder that reconstructs images from 25% of their patches, then transfers those features to downstream tasks.

PythonNumPyPyTorchCIFAR-10
Machine Learning · 4 min read

Classical ML from Scratch

Two learning paradigms built from NumPy up: tree-based spam classification (decision tree, Random Forest, AdaBoost) and SVD/ALS matrix factorization for movie recommendations. No frameworks; matched scikit-learn on both.

PythonNumPySciPyMachine Learning

2024

Natural Language Processing · 5 min read

Modern NLP: From Statistical MT to Multimodal Foundation Models

Four paradigm shifts in one semester: IBM Model 1, attention-based NMT, transformer parsing, LLM fine-tuning, and CLIP multimodal retrieval with pragmatic reasoning. Each technique subsumes and extends the previous.

PythonPyTorchTransformersCLIP +1
Computer Vision · 3 min read

Neural Radiance Fields (NeRF)

Training an MLP to represent a 3D scene as a continuous function from (x, y, z, θ, φ) to (RGB, density). Volume rendering turns the field back into images; the field itself is the 3D model.

PythonPyTorchNeural Rendering3D Vision
Computer Vision · 4 min read

Fun With Diffusion Models

Sampling from DeepFloyd IF (CFG, SDEdit, inpainting, visual anagrams), then training a time- and class-conditioned U-Net from scratch on MNIST to learn the diffusion process end-to-end.

PythonPyTorchDiffusion ModelsGenerative AI
Computer Vision · 2 min read

Auto-Stitching Photo Mosaics

Building a panorama pipeline from scratch: Harris corner detection, Adaptive Non-Maximal Suppression, feature matching, RANSAC for homography estimation, and Laplacian-pyramid blending.

PythonNumPyOpenCVComputer Vision
Computer Vision · 4 min read

Face Morphing with Delaunay Triangulation

Smooth warping between two faces via point correspondences, Delaunay triangulation, and affine warps per triangle. Plus: population mean faces and caricature generation by extrapolation.

PythonNumPyscikit-imageComputer Vision
Computer Vision · 3 min read

Filters & Frequencies: Edges, Hybrid Images, and Blending

Working in the frequency domain to extract edges, create hybrid images that change meaning with viewing distance, and blend images seamlessly via Laplacian pyramids. Ends with the famous 'oraple.'

PythonNumPySciPyComputer Vision
Computer Vision · 3 min read

Colorizing 1907 Russian Empire Photographs

Reconstructing color from Sergei Prokudin-Gorskii's glass plate negatives (captured 1907–1915) using image pyramids and normalized cross-correlation alignment.

PythonNumPyscikit-imageComputer Vision
Artificial Intelligence · 6 min read

Pacman AI: A Tour of Classical AI

End-to-end AI agent built across four paradigms: A* pathfinding, Minimax/Expectimax game trees, HMM + particle filter tracking, and Q-learning. Each piece solves one Pacman problem; together they cover the full classical AI curriculum.

PythonAISearch AlgorithmsGame Theory +2
Parallel Computing · 2 min read

17× Faster 2D Convolution: AVX2 + OpenMP

Hand-optimized SIMD kernels with parallel tiling achieve 17× speedup over naive implementation. Deep dive into vectorization, memory patterns, and performance engineering.

CAVX2OpenMPSIMD +1
Computer Architecture · 4 min read

32-bit RISC-V CPU from Logic Gates

A complete 2-stage pipelined RV32I processor built from first principles in Logisim: ALU, register file, control unit, and memory system, all hand-wired from basic gates.

Logisim EvolutionRISC-VDigital LogicComputer Architecture
Systems Programming · 3 min read

MNIST Neural Network in Pure RISC-V Assembly

A complete 2-layer MLP for digit classification: matrix multiply, ReLU, argmax, file I/O, and all infrastructure, written entirely in hand-coded RISC-V assembly without any library calls.

RISC-VAssembly LanguageVenus SimulatorLinear Algebra +1

2023