Skip to content
View Hadrien-Cornier's full-sized avatar

Block or report Hadrien-Cornier

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Hadrien-Cornier/README.md

I'm Hadrien, with a background in software, data, and production machine learning. My current focus is robotics data, evaluation, and machine learning. I have a lot to learn, so I use experiments and open-source contributions to test what I understand.

Featured project: Culture Calendar

Culture Calendar is my automated calendar for cultural events in Austin. It covers film, classical music, opera, ballet, book clubs, and visual arts. You can search the calendar and read AI-written reviews and ratings.

Explore the calendar · Source code

Subscribe to the newsletter

Recent open-source contributions

Selected pull requests I authored or co-authored, with their impact. Status checked October 12, 2026.

Merged

  • LeRobot #4926: fix the Feetech register name · Author · October 12. Removed a trailing space from the acceleration-multiplier register name so reads and writes work with the expected spelling; added mocked read/write and control-table regression tests.
  • LeRobot #4874: multi-worker streaming · Author · October 12. Enabled multiple DataLoader workers per rank: 2.14–2.52× CPU loader throughput with 4 workers versus 1 on two datasets with 8-vCPU machines. Includes exact-coverage and resume tests; higher memory use and batch-diversity trade-offs are documented. GPU-bound training did not speed up.
  • leLab #123: camera rotation throughout the workflow · Author · October 9. Added saved camera rotation across previews, recording and inference, so an upside-down wrist camera can use the same orientation throughout.
  • LeRobot #4871: honor the training seed · Author · October 8. Fixed streaming runs silently using seed 42 instead of the configured training seed, with tests for repeatable ordering and checkpoint resume.
  • leLab #122: repair statistics from the correct video · Author · October 8. Preserved chunk identity when recovering interrupted recordings, preventing image-normalization statistics from being calculated from another episode's video.
  • LeRobot #3917: faster episode-pool streaming · Co-author · October 7. Metadata caching and plain-float timestamp checks gave 30–49% higher throughput in separate tested CPU workloads. Smaller MP4 header reads also cut a full video-index build from 33 to 12.7 minutes in the maintainer's test. These are separate measurements, not additive or end-to-end training gains.
  • mjlab #1202: preserve the final motion frame · Author · October 3. Fixed motion resampling dropping the endpoint when it falls on the output grid, so converted clips reach their final pose; checked 25,664 frame-rate and clip-length combinations.

Open

These are proposed changes under review. Measurements come from tests on the PR branches.

  • LeRobot #4920: discard stale Feetech replies · Author · Opened October 11. Clears old input bytes before each request to avoid reading stale load values as positions. Controlled, torque-off SO-101 tests eliminated the wrong replies in the tested cases; replies arriving after the reset remain a limitation.
  • LeRobot #4905: migrate checkpoints without an optional config · Author · Opened October 10. Lets Hub checkpoint migration continue when the optional training-config file is missing, while preserving authentication errors. Validated with regression tests and a real ACT checkpoint migration.
  • LeRobot #4891: repeatable streaming with no worker process · Author · Opened October 8. Applies image transforms on the training thread when num_workers=0, avoiding random-number races between decoder threads. Two same-seed CPU training runs produced identical losses across the tested 20 steps.
  • LeRobot #4890: pass the trainer's data-parallel rank · Author · Opened October 8. Prevents ranks from silently streaming the full dataset when a launcher omits rank environment variables. A two-process test gives each rank a disjoint half of the dataset.
  • LeRobot #4695: keep cleaning up after a motor error · Author · Opened September 21. Attempts torque disable on every serial motor and port closure even after an individual failure, then reports the error. Includes regression tests and SO-101 Feetech validation; cleanup remains best-effort.

Open-source hardware: SO-101 pen holder

so101-pen-holder is a printed sleeve that holds a pen on the stock SO-101 gripper, so that a drawing shows the arm's tracking error. You print 4 small parts. You buy nothing, and you do not take the arm apart. It takes any round pen from 8 to 13 mm, and the tip position is known for each pen. A parametric CAD script checks every part against the stock gripper meshes. The first set is printed and fits: the sleeve slid onto the stock finger, the screws turned in on the first try, and I felt no play by hand. Nothing is measured yet. See the print and the fit.

I designed it to also hold the pen of a Wacom Intuos S drawing tablet (CTL-4100, about 40 USD), which I bought to measure the arm. The joint encoders cannot see bending, gear play or errors in the arm model, but the tablet measures the pen tip itself. It sends the tip position 133 times per second, more than 2 times the 60 Hz control rate, and Wacom gives its tolerance as ±0.25 mm at the center of the tablet. Why this tablet, and how to use it with the holder.

The SO-101 in a drawing pose with the printed pen sleeve on its fixed finger

Current project: SO-101 control

My current project has an ambitious goal: build the best controller in the world for the SO-101. I'm working toward smooth, precise trajectory tracking, comparing controllers in simulation and on my own arm.

I start with the physics: gravity, friction, servo delay, and encoder limits. Then I test model-based control, state estimation, and learning from repeated motions, and explore neural networks that learn what the physics model misses. I also designed an open-source pen holder so drawings can make the arm's tracking errors visible. The work is ongoing, and I document the experiments in my SO-101 control series.

Latest writing

My latest series, From policy to action: the last mile of robotics control, follows the SO-101 project from the joint physics to learned corrections and hardware:

  1. One equation, and every way the arm misses it (October 2, 2026)
  2. Seeing finer than the sensor (October 3, 2026)
  3. Six ways to choose the goal (October 4, 2026)
  4. Learning what the physics misses (October 5, 2026)
  5. A pen holder that shows the arm’s error, not its own (October 5, 2026)

Earlier writing and experiments

These articles and experiments record what I learn and the evidence I use.

You can read more of my notes on my blog.

Pinned Loading

  1. lerobot-camera-stacking-benchmark lerobot-camera-stacking-benchmark Public

    Benchmark: stacking robot camera views into one video vs one file per camera, for LeRobot (DATA-11 / DATA-03)

    Python

  2. huggingface/lerobot huggingface/lerobot Public

    🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning

    Python 28.2k 5.9k

  3. mujocolab/mjlab mujocolab/mjlab Public

    Isaac Lab API, powered by MuJoCo-Warp, for RL and robotics research

    Python 3.2k 560

  4. galilai-group/stable-worldmodel galilai-group/stable-worldmodel Public

    A platform for reproducible world model research and evaluation

    Python 2.3k 288

  5. kevinzakka/mink kevinzakka/mink Public

    Python inverse kinematics based on MuJoCo.

    Python 1.6k 124

  6. huggingface/leLab huggingface/leLab Public

    🤗 LeLab: A web UI interface on top of LeRobot

    TypeScript 194 76