FAQ & Troubleshooting¶
Installation¶
pip install figaroh fails to build, or optimization scripts complain about missing solvers¶
Optimal configuration/trajectory generation uses cyipopt (a wrapper
around the IPOPT solver), which needs system libraries that aren't pulled
in by pip alone:
# Debian/Ubuntu
sudo apt-get install -y pkg-config coinor-libipopt-dev libblas-dev liblapack-dev
pip install cyipopt picos cvxpy
If you use conda, some robotics dependencies are easier to get from conda-forge:
conda install -c conda-forge pinocchio cyipopt
Do I need MuJoCo, Genesis, or Isaac Sim installed?¶
No — Pinocchio is the only always-available backend and FIGAROH's core
algorithms don't require the others. Install mujoco, genesis-world, or
Isaac Sim only if you actually want that
backend; figaroh.backends.list_backends()
reports what's currently available in your environment.
Configuration¶
Should I use the unified format or the legacy format?¶
Use the unified format for anything new —
it supports extends: template inheritance, so a robot config only states
what's actually robot-specific. The legacy flat format still works and
existing configs don't need migrating, but new examples in
figaroh-examples all use
the unified format.
My robot config isn't picking up template defaults¶
Check that extends: is a path relative to the config file itself, not the
working directory — e.g. extends: "../../templates/manipulator_robot.yaml"
from examples/my_robot/config/. Also remember list-valued keys (like
markers) are replaced, not merged, when both the template and the robot
config define them — see override rules.
Calibration & Identification¶
Calibration/identification isn't converging¶
Check your initial parameter guesses and joint limits in the config first — most non-convergence traces back to a bad initial guess or an over-constrained problem, not the solver itself.
Identification results have high uncertainty or fail verify()¶
This is almost always a data-quality problem, not an algorithm problem:
- Was the trajectory actually "exciting"? See Optimal Experiment Design — an ill-conditioned trajectory will identify poorly no matter how good the solver is.
- Is the signal-to-noise ratio adequate? Try enabling
decimate=Trueor tightening the Butterworth cutoff frequency insignal_processing. - Do you have a genuinely held-out
validation_data_fileconfigured? A run with no validation data skips (not fails) the validation-based checks inverify()— see thresholds.
Why did a metric get skipped instead of failed in my verification report?¶
A threshold whose metric can't be computed — typically because no
validation_data_file is configured — is skipped rather than counted as a
failure. An empty check list counts as passed since there's nothing to
fail on. See Reporting & Verification.
Examples¶
Where are the runnable robot examples?¶
In the separate figaroh-examples repository, not in this one — see the Examples Gallery. figaroh (this repo) is the library; figaroh-examples has the data, URDFs, and per-robot scripts.
How do I add support for a new robot?¶
Scaffold it from the TIAGo example:
cd figaroh-examples/examples
./create_example.sh <robot_name>
Then implement a BaseCalibration/BaseIdentification subclass under
utils/, and point its config at the matching
template.