FIGAROH fits joint offsets, frame transforms, masses, inertias and friction from your measurements, plans the experiments that make them identifiable, and gives every result a pass/fail verdict.
$ git clone https://github.com/thanhndv212/figaroh-examples $ cd figaroh-examples/examples/ur10 $ python calibration.py --calibrate-only --no-plot
from figaroh.tools.robot import load_robot
from examples.ur10.utils.ur10_tools import UR10Calibration
robot = load_robot("urdf/ur10_robot.urdf", load_by_urdf=True)
cal = UR10Calibration(robot, "config/ur10_unified_config.yaml")
cal.initialize()
cal.solve(html_report=True)
print(cal.verify(scope="execution").passed)
Pick a goal. You get what you need, what you get back, and the command that runs it.
cd figaroh-examples/examples/ur10 python calibration.py --calibrate-only --no-plotStep-by-step calibration guide →
cd figaroh-examples/examples/ur10 python identification.pyStep-by-step identification guide →
python optimal_config.py # calibration python optimal_trajectory.py # identificationExperiment design guide →
Calibration and identification follow the same path. Each step explains the choices you make and how you know it worked.
FIGAROH ships agent skills. They check your environment, pick the right config template, run the task and read the report back to you, in Claude Code or any agent that reads Markdown instructions.
Every example ships its URDF, config, data and expected results.