Digital twins and simulation work first, then the data science and machine learning projects behind it.
Robotics results are simulation-based: each card separates what runs in simulation, what is in development, and what is only planned.
RISE Lab · Research direction
Digital twins across systems
I build simulation digital twins of several kinds of robot: a Unitree G1 humanoid, a UR5e arm doing contact-rich assembly, and a quadrotor control test bench, with Isaac MCP as the tooling for driving the simulator from an agent.
The twins here are the simulation side: physics models of real robots, with measured results and written limits, not yet calibrated against hardware. The goal is sim-to-real, where data from the real robot improves the model and the control. With Dr. Wenlong Zhang, I am exploring a Jenga-playing robot that could use approaches such as model predictive control or reinforcement learning. That is a research direction, not a finished robot or a proven controller.
Same scripted commands at training iteration 0 (left) and 1499 (right), 16 simulated robots per side. Fallen robots are reset in place, and this clip is not footage of the 256-robot test.
Runs in simulation
Unitree G1 Humanoid Locomotion
Training and evaluating Unitree G1 locomotion in Isaac Lab with the Newton/MuJoCo-Warp physics backend. The task, rewards, and PPO setup are Isaac Lab's; my work is the training run on Newton, a scripted evaluation with pushes, a sweep across saved checkpoints, and a study of when and where robots fall.
Isaac Lab 3.0Newton / MuJoCo-WarpPPO (rsl_rl)Unitree G1Python
Published evaluation: 237 of 256 simulated robots stayed up through a 24-second scripted stand, walk, turn, and stop test with random pushes of up to 0.5 m/s. Two reruns gave 231 and 233. This is one policy from one training seed.
Most falls happen while turning: 17 of the 19 falls in the published run were in the turn phase.
Follow-up pilots measured where the policy breaks: half of the robots fall at about 2.2 m/s of added push speed, and the flat-ground policy keeps at least 80% survival on a 19 degree downhill and a 9 degree uphill.
Getting back up after a fall is work in progress: the current baseline passes strict validity checks on 68.2% of 256 held-out lying poses, and handing over from getting up to walking is the weak link.
Runs in simulation
A walking policy and its scripted 256-robot evaluation, on flat ground in Isaac Lab.
In development
Fall recovery and the hand-over from getting up to walking.
Direction / planned
Any hardware run. Nothing here has been tried on a physical G1.
Simulation only, one policy from one training seed, with no repeats or confidence intervals. The task, rewards, and PPO are upstream Isaac Lab components, not a new algorithm of mine.
Credits: Built on Isaac Lab (NVIDIA and contributors), the Unitree G1 model by Unitree Robotics, rsl_rl, Newton, and MuJoCo-Warp.
The UR5e assembling the seven-part arch bridge in Isaac Sim 6.2, from the repository.The run dashboard listing all 29 catalogued structures and their simulation results.
Runs in simulation
Contact-Rich Robotic Assembly Testbed
A contact-rich assembly testbed in Isaac Sim 6.2. A UR5e builds catalogued structures from interlocking parts, and a joint-strength physics model breaks any connection that is overloaded. The project asks what a robot can assemble reliably and why builds fail, and it is the contact-physics testbed for my Jenga research.
Isaac Sim 6.2PhysX 5.9UR5e / RG2Python
Ported the simulator from Isaac Sim 5.1 and Python 3.11 to Isaac Sim 6.2 and Python 3.12, and added a weld-torque correction for PhysX 5.9's CPU TGS solver, which misreported the loads the breakage model reads.
Wrote an assembly controller that builds any structure config, releases each part without touching its neighbours, and logs every gripper contact.
In the catalog of 29 structures, 21 complete in simulation at their saved settings. The other 8, including two cantilever break tests designed to fail, do not.
Failures led to specific fixes: easing off 0.5 mm before release, or releasing in 0.5 s instead of 1 s, stopped joints breaking as the gripper opened. Tables with no room for the fingers and 4-stud joints that break are still open.
Sweeps are reproducible: each records its configs, settings, and controller commit, and repeated runs gave identical results on the reference machine. A local dashboard shows every run.
Runs in simulation
Structure builds and break tests in Isaac Sim 6.2, judged by simulator ground truth.
In development
More ways to grip parts, such as long-side grips and re-grasping, to remove the gripper limits found so far.
Direction / planned
Building the same structures on the real UR5e and comparing what fails; carrying the evaluation methods over to Jenga.
All results are simulation; no real-robot trials have been run. A completed run is one deterministic run, not evidence of robustness.
Credits: Builds on BrickSim by Haowei Wen, Ruixuan Liu, Weiyi Piao, Siyu Li, and Changliu Liu (Intelligent Control Lab, Carnegie Mellon University; MIT License). The connection and breakage physics, the native extension, and the simulator UI are theirs. The UR5e, gripper, and bench models are lab-supplied.
A warehouse and wheeled robot built by one Isaac MCP quick-start call (from the README).A UR5e driven to a target and back through Isaac MCP (Isaac Sim 6.2, from the README).
Runs in simulation
Isaac MCP
An MCP server that lets AI agents drive NVIDIA Isaac Sim and Isaac Lab: build scenes, import robots, read cameras and LiDAR, and run Isaac Lab train, evaluate, and play jobs. It is the tooling I use to stand up and inspect simulated systems quickly.
PythonMCPIsaac SimIsaac LabROS 2
Lists 129 tools by default, or 138 with optional groups, covering scene and asset authoring, joints and physics, cameras and LiDAR, ROS 2 TF, Isaac Lab jobs, and screenshots and recordings.
The README examples are captures from live runs with a record of how each was made: a warehouse built in one call, robots imported from public repositories, and a Unitree G1 walking policy trained through the Isaac Lab tools. They illustrate the tools and are not benchmarks.
The fuller G1 walking evaluation, 237 of 256 robots through a pushed test, is its own project: Unitree G1 Humanoid Locomotion.
Runs in simulation
Documented builds are Isaac Sim 6.2.0.0 with Isaac Lab 3.0.0 and Isaac Sim 5.1.0.0 with Isaac Lab 2.3.2. Every demo is simulation only.
In development
Pre-release hardening and wider compatibility testing (Linux x86_64).
Direction / planned
Further robotics and learning workflows tracked on the project checklist.
Pre-release and simulation only; no hardware deployment.
Credits: Built on Aldrin Inbaraj's omni-kit-mcp and isaac-sim-mcp. The example robots and tasks belong to their owners, including NVIDIA's Isaac Lab and public Carter model.
Collaborative simulation research on energy-aware prescribed-time quadrotor control using a MuJoCo test bench. John Lok led the controller development. My part: team organization and presentations, reproducing an archived MuJoCo NMPC baseline on a lab PC, and a timing and validation study of solver timing, solver failures, and modeled energy that is still in progress.
MuJoCoNMPC baseline reproductionTiming and validationSimulation
Reproduced the archived MuJoCo NMPC baseline results on a lab PC, with matching telemetry and tracking tables.
Timing and validation study: setup and an initial baseline are done; results are not yet available.
Runs in simulation
Controller comparisons run in MuJoCo; everything here is simulation.
In development
Timing and validation study; a paper draft.
Direction / planned
Hardware validation at the ASU Drone Studio. Nothing has flown yet.
No hardware tests, no completed timing target, and no new controller are claimed.
Credits: Joint work with John Lok, who led the controller development.
With Dr. Wenlong Zhang · RISE Lab
Research direction
Jenga-Playing Robot (Research Direction)
A direction Dr. Wenlong Zhang and I are exploring: a Jenga-playing robot using approaches such as model predictive control or reinforcement learning, with the UR5e contact-assembly testbed as a starting point.
ManipulationContact-rich assemblySimulation
Related interests: drones, LiDAR, robotic perception, simulation, and robot learning.
Direction / planned
Exploring approaches. There is no Jenga robot and no proven controller yet.
Credits: Direction shared with Dr. Wenlong Zhang.
ASU RAS 545 · Lab 3
The simulated TurtleBot3 in Isaac Sim (left) navigating with Nav2 in RViz (right), with navigation and localization active and the planned path (red) weaving between the table-leg costmaps.The same robot's sensor topics in RViz: LiDAR scan, camera image, and TF frames.
Lab coursework
TurtleBot3 ROS 2 Sensing and Nav2 in Isaac Sim
A collaborative course lab in Isaac Sim: Action Graphs for ROS 2 clock, drive commands, 2D LiDAR, camera, and odometry/TF on a TurtleBot3 Burger, checked in RViz, then AMCL localization and Nav2 navigation to a goal with the simulated robot.
ROS 2 HumbleIsaac SimNav2AMCL2D LiDARRVizTF
RViz shows the simulated /scan, /camera/image_raw, /odom, and TF alongside the Isaac Sim stage.
Nav2 navigates the simulated robot to a goal: AMCL localizes it on a map of the room, the costmap marks the four table legs as obstacles, and the planned path runs between them.
Runs in simulation
Sensor topics in RViz, AMCL localization, and Nav2 navigation to a goal, all with the simulated robot.
Simulation only, from a course lab. Not shown: a physical TurtleBot, measured accuracy or repeated trials, or a mapping (SLAM) result. The public Nav2 goal examples in Isaac MCP use a Create 3, not this TurtleBot.
Credits: A course lab done with classmates. My part covered the Nav2 and AMCL setup, the Action Graphs, and the checks. The TurtleBot3 scene came from the course handout.
DataFest 2026: Early Signals of High Healthcare Utilization
My team's DataFest 2026 work on patient-journey modeling, utilization concentration, and geography-based segmentation, awarded Best Visualization at NAU's ASA DataFest 2026 (including a one-year American Statistical Association membership).
Pythonscikit-learnRandom forestClustering
I built a reusable analysis package, data-prep and QA utilities, an enrichment pipeline, and a random-forest workflow predicting future high utilizers from early encounters.
The challenge data and partner identity are not included in the repository.
Predicts NBA home wins using only information available before tip-off, with time-ordered validation and a companion R package, nba-data, that collects and validates ESPN game data. A scheduled job logs predictions for the current season before each game and scores them afterward.
RtargetsrenvxgboostSQLiteGitHub Actions
Tests check the features directly: changing one game's result changes no feature for that game or any earlier game.
On the held-out 2025-26 season the best model picked 68.6% of games correctly, against 55.4% for always picking the home team. Elo ratings alone reach 67.9%, and the interval for the gain from adding rolling features includes zero.
Corrected evaluation problems in an earlier course version, including cross-validation that mixed seasons and a threshold tuned on the test season, and documented each change.
Live 2026-27 predictions are scored on the project site; with only a few games played, early accuracy is not yet a conclusion.
End-to-end NBA shot analytics package combining R data infrastructure with Python modeling workflows. The project supports multi-source ingestion, rerunnable SQLite updates, shot-quality modeling, and player-level archetype analysis.
RPythonSQLitescikit-learnPyGAMStreamlit
Built a five-season training pipeline with roughly 1.1M historical shots and ~136K out-of-sample evaluation shots.
Documented ~63% unseen-data xFG accuracy and delivered residual, SDI, and player archetype analysis outputs.
Structured the repo as both an R package and analytics application with dashboard support.
Automated course-catalog pipeline built in collaboration with NAU's Institute of Advanced Applications of Artificial Intelligence. It extracts course prefixes from PDF source data, scrapes catalog records with Selenium, and supports downstream AI and ethics analysis.
PythonSeleniumpdfplumberpandasR Markdown
Scrapes term-level course records and exports structured CSV outputs for later analysis.
An older CS 472 course project, unrelated to my robotics work: DDPM diffusion models trained on MNIST and CIFAR-10, alongside autoencoder, denoising autoencoder, and variational autoencoder baselines on MNIST.
PythonPyTorchDiffusionSlurm
Trains each model family from one CLI, with saved run configuration and Slurm jobs for GPU runs.
Shot difficulty and scoring across the NBA and NHL
How much of a player's shooting efficiency reflects the difficulty of the shots they take? This capstone uses matched 2014–2024 NBA and NHL shot data to study expected scoring, shot difficulty, and player performance.
NBA shot difficulty versus actual field-goal percentage. Point size represents shot volume; color shows actual minus expected scoring rate.
My work: Developed data preparation and validation workflows, shot-quality models, a Shot Difficulty Index, and visual comparisons of player performance. The team presented the capstone at NAU UGRADS.
Research poster from the Department of Mathematics and Statistics at NAU, by Kanaan Law, Kaleb Coleman, and Drianna Walker.