Skip to content

Valpatel/mr-cal-guide

Repository files navigation

MR-Cal Guide

Multiple Robot Calibration Guide — interactive reference.

A free, public, plain-English reference for camera, LiDAR, and IMU calibration — what the techniques are, when each one wins, what research it comes from, and which permissively-licensed software implements it. Designed to demystify a topic that's currently spread across hundreds of papers and dozens of single-purpose repos.

🔗 Quick links

📚 Browse all 14 topics papers · open-source software (license-badged) · real hardware part numbers
🧪 19 technique deep-dives Zhang's method · ICP · AX = XB · Kalibr · bundle adjustment · Allan variance · …
🖼 Animation gallery (137 beats) every interactive scene, every beat, with captions
📖 Glossary 68 plain-English term definitions
🏗 Architecture how the site itself is built (no build step, no framework)
✍️ Contributing adding a paper / a software / a topic / an animation
☁️ Deploy Cloudflare Pages step-by-step

Gallery

Six picks from the 21 interactive animations. Click any tile for the topic doc (papers, software, hardware); see the full screenshot index → for every beat of every animation.

Levinson per-beam LiDAR refinement
Levinson LiDAR refinement
per-beam offsets converging on flat ground
ICP between two LiDAR scans
Multi-LiDAR ICP
two scans converging into a single cloud
Hand-eye AX=XB on a moving robot
Hand-eye AX = XB
two LiDARs on a moving robot
LiDAR-IMU time-offset estimation
LiDAR-IMU time offset
aligning gyro rate vs LiDAR pose rate
Fisheye projection models compared
Fisheye projection models
pinhole vs Kannala-Brandt vs double-sphere
Asymmetric stepped block with pose ghosts
Asymmetric stepped block
why symmetric targets fail (4 pose ghosts)

What's in here

  • Topic pages for every common calibration relationship — mono camera, wide-FoV / fisheye, stereo, multi-camera, LiDAR intrinsics, multi-LiDAR extrinsics, IMU, camera-LiDAR, camera-IMU, LiDAR-IMU, calibration targets, hand-eye / robot-sensor.
  • Real research citations — papers with arXiv / IEEE / venue links, year, authors.
  • Permissive software index — every tool we cite is verified MIT / BSD / Apache-2.0 / MPL-2.0. GPL/LGPL/AGPL projects are flagged so readers can avoid accidental contamination.
  • Real hardware part numbers — Ouster OS-series, Hesai Pandar, Velodyne VLP/HDL, Livox, AprilTag boards, etc., with datasheet links.
  • 21 interactive Three.js animations — pinhole projection, ICP convergence, Allan variance, hand-eye AX=XB, fisheye ray-bending, Zhang's method walkthrough, six-position IMU cal, Levinson-Thrun refinement, asymmetric stepped block, the works. Every animation has its own dedicated title bar, canvas, and narration panel with captions + opt-in TTS narration that follows the scene beat-by-beat.
  • Tradeoffs, glossary, and a beginner-friendly tone throughout.

Stack

Vanilla HTML + ES modules + Three.js (loaded via importmap from unpkg). No build step. Drops onto any static host. Ships fast, stays maintainable, no framework treadmill.

mr-cal-guide/
├── index.html        ← landing page
├── glossary.html
├── about.html
├── topics/           ← one HTML page per topic (14 topics)
├── techniques/       ← per-technique deep dives (1 so far)
├── styles/
│   ├── theme.css     ← shared dark cyberpunk theme
│   └── guide.css     ← guide-specific layout (titles, panels, citations)
├── js/
│   ├── nav.js        ← injects header + side rail + section collapsing
│   ├── citations.js  ← renders paper / software / part chips
│   ├── narration.js  ← captions + word-sync; plays pre-rendered Piper audio
│   ├── viewer.js     ← Three.js scaffold + onNarrationBeat() bridge
│   └── animations/   ← one ES module per animation (21 files)
├── data/
│   ├── topics.json   ← list of topics + slugs + categories
│   ├── schema.md     ← citation JSON schema
│   ├── by-topic/     ← per-topic citations (papers / software / parts) — 14 files
│   └── narration/    ← per-animation narration scripts (21 JSON files)
├── audio/narration/  ← pre-rendered Piper voice clips, one folder per slug
├── scripts/render-narration.py  ← regenerate the audio above
├── images/targets/   ← 9 printable SVG calibration targets
├── tests/            ← pytest + Playwright suite (64 tests)
│   ├── conftest.py
│   ├── test_pages_load.py
│   ├── test_animations.py
│   ├── test_screenshots.py
│   └── README.md     ← how to run + CI sketch
├── scripts/          ← smoke tests + tooling
├── _headers          ← Cloudflare Pages security headers
├── _redirects        ← Cloudflare clean-URL rewrites
└── DEPLOY.md         ← Cloudflare Pages step-by-step

Run locally

# Any static server. The guide ships zero build step.
npx serve .                      # http://localhost:3000
# or
python3 -m http.server 8080      # http://localhost:8080

Deploy

See DEPLOY.md for Cloudflare Pages instructions (literally: connect the repo, set build = none, output = /).

Contributing

Each topic is one HTML page in topics/<slug>.html plus one JSON file in data/by-topic/<slug>.json. The HTML follows topics/_template.html. Citations follow data/schema.md.

To add a topic:

  1. Copy topics/_template.htmltopics/<your-slug>.html.
  2. Fill in the placeholders (search for {{ }} markers).
  3. Add citations to data/by-topic/<your-slug>.json.
  4. Append your slug to data/topics.json.
  5. Optionally: add a Three.js animation in js/animations/<your-slug>.js.

License

MIT — see LICENSE. © 2026 Valpatel Software · Created by Matthew Valancy. Use it however you like.

Why this exists

Robotics calibration is critical, copyleft-heavy, and woefully under-explained for newcomers. MR-Cal Guide is a deliberate counter-program: free, plain-English, permissively-licensed references, and interactive explanations of the math.

The guide stands on its own — read it, fork it, share it, mirror it. It's published by Valpatel Software.

About

An interactive guide to robot calibration terms, techniques, and tools.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors