{"id":17797342,"url":"https://github.com/kjyv/flobaroid","last_synced_at":"2026-06-16T00:01:20.524Z","repository":{"id":138798359,"uuid":"49442839","full_name":"kjyv/FloBaRoID","owner":"kjyv","description":"Framework for dynamical system identification of floating-base rigid body tree structures","archived":false,"fork":false,"pushed_at":"2026-06-15T12:35:42.000Z","size":53052,"stargazers_count":84,"open_issues_count":1,"forks_count":28,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-06-15T13:23:27.848Z","etag":null,"topics":["dynamics-models","excitation","identification","measurements","parameter-estimation","robotics","urdf","yarp"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kjyv.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-01-11T17:38:06.000Z","updated_at":"2026-06-15T12:24:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"f7329a36-951f-4bce-98d9-e8b1e938774b","html_url":"https://github.com/kjyv/FloBaRoID","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kjyv/FloBaRoID","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjyv%2FFloBaRoID","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjyv%2FFloBaRoID/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjyv%2FFloBaRoID/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjyv%2FFloBaRoID/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kjyv","download_url":"https://codeload.github.com/kjyv/FloBaRoID/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjyv%2FFloBaRoID/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34385031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dynamics-models","excitation","identification","measurements","parameter-estimation","robotics","urdf","yarp"],"created_at":"2024-10-27T11:54:00.302Z","updated_at":"2026-06-16T00:01:20.508Z","avatar_url":"https://github.com/kjyv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FloBaRoID\n\n(FLOating BAse RObot dynamical IDentification)\n\nFloBaRoID is a python toolkit for parameter identification of floating-base rigid body tree-structures such as\nhumanoid robots. It aims to provide a complete solution for obtaining physical consistent identified dynamics parameters.\nThe full floating-base dynamics are identifiable both in simulation and from real robot measurements. All steps\nof the pipeline can be run from the command line or through a graphical interface (`uv run gui.py`).\n\nFloBaRoID was originally developed at the [Advanced Robotics department](https://advr.iit.it/) of the\nIstituto Italiano di Tecnologia (IIT) for the WALK-MAN humanoid robot, and has since been generalized to\narbitrary floating-base tree-structured robots.\n\n\u003cdiv\u003e\n\u003cimg alt=\"Overview diagram\" src=\"https://cdn.rawgit.com/kjyv/FloBaRoID/master/documentation/identification_overview.svg\" width=\"62%\" align=\"left\" hspace=\"5px\"\u003e\n\u003cimg alt=\"WALKMAN suspended from a crane in the visualizer\" src=\"documentation/walkman_suspended.jpg\" width=\"33%\"\u003e\n\u003c/div\u003e\n\nFeatures:\n\n* find optimized excitation trajectories with non-linear global optimization (Optuna + IPOPT, as parameters of Fourier-series for periodic soft trajectories)\n  * D-optimality objective with analytical gradients \\[Ayusawa2017\\], optional per-joint velocity target\n  * collision-aware (convex hull, capsule, or full mesh), checked against the world and under the suspended base swing\n  * supports floating-base robots with suspended dynamics (ball-joint at configurable attachment frame)\n  * robust feasibility: infeasible candidates are repaired by amplitude back-off and known trajectories can seed the search\n* realistic measurement simulation from trajectories (friction, backlash, sensor noise, cable forces, thermal drift, etc.)\n* data preprocessing\n    * derive velocity and acceleration values from position readings\n    * data is zero-phase low-pass filtered from supplied measurements\n    * optionally select best data blocks from measurements by sub-regressor quality \\[Venture2009\\]\n      (useful for real robot data with variable excitation quality)\n* validation with other measurement files\n* excitation of real robots, using ROS/MoveIt! or Yarp\n* implemented estimation methods:\n  * ordinary least squares, OLS\n  * weighted least squares \\[Zak1994\\]\n  * estimation of parameter error using previously known CAD values \\[Gautier2013\\]\n  * essential standard parameters \\[Pham1991\\]\\[Gautier2013\\], estimating only those that are most certain for the measurement data and leaving the others unchanged\n  * SDP-constrained identification for physically consistent parameters \\[Sousa2014\\], using cvxpy (using e.g. CLARABEL or MOSEK solvers)\n  * closest-to-CAD recovery of standard parameters from feasible base solution, optionally observability-weighted (pull weakly-determined parameters toward CAD, leave well-determined ones free)\n  * geometric (log-det divergence) CAD prior \\[Lee2020\\]: pull each link's pseudo-inertia toward CAD on the SPD manifold instead of by Euclidean distance, repelling degenerate (zero-mass) solutions (`cadRegularizationMode: geometric`)\n  * identification from several measurement files at once, with optional per-trajectory inverse-noise weighting\n  * two-step friction identification: friction-free base parameter estimation from base wrench equations \\[Ayusawa2014\\], followed by per-joint friction fitting from the residual\n* 3D visualization of robot model, trajectories, and world environment (OpenGL)\n* plotting of measured and estimated joint state and torques (interactive, HTML, PDF or Tikz)\n* output of the identified parameters directly into URDF\n\n### Before installation\n\nYou'll need some or all of these depenencies installed in your system:\n\n* **eigen3, swig** (required for building iDynTree): `brew install eigen@3 swig` (macOS) or `apt install libeigen3-dev swig` (Ubuntu/Debian)\n* **ipopt** (required for building cyipopt, used for trajectory optimization / NL identification): `brew install ipopt` (macOS) or `apt install coinor-libipopt-dev` (Ubuntu/Debian). Uses the `mumps` linear solver by default. For slightly better performance, you can also install the [HSL library](https://licences.stfc.ac.uk/product/coin-hsl) (academic license) and configure via `linear_solver` option (e.g. `ma57`, `ma97`).\n\n## Installation\n\nInstall [uv](https://docs.astral.sh/uv/getting-started/installation/), then\nrun e.g. `uv run identifier.py` to run the tools in uv virtual env. It will install necessary dependencies\nautomatically.\n\nOptional dependency groups can be installed with:\n* `uv sync --group visualization` — matplotlib2tikz for TikZ export\n* `uv sync --all-groups` — everything (recommended)\n\n\n## Commands\n\nAll commands can also be launched and configured from a graphical interface that streams their\nlive output:\n\n```bash\nuv run gui.py\n```\n\n* **trajectory.py**: generate optimized trajectories\n\n```bash\nuv run trajectory.py --config configs/kuka_lwr4.yaml --model model/kuka_lwr4.urdf\n```\n\nSaves to `\u003cmodel\u003e.trajectory.npz` by default (e.g. `model/kuka_lwr4.urdf.trajectory.npz`). Override with `--filename`.\n\n* **excite.py**: send trajectory to control the robot movement and record the resulting measurements\n\n```bash\nuv run excite.py --config configs/kuka_lwr4.yaml --model model/kuka_lwr4.urdf --filename measurements.npz\n```\n\n* **simulator.py**: simulate realistic measurement data from a trajectory file (without a physical robot).\n  Computes inverse dynamics and adds configurable real-world effects (friction,\n  sensor noise, backlash, joint elasticity, cable forces, thermal drift, etc.).\n  Settings are controlled via the config file (`simulate*` options).\n\n```bash\nuv run simulator.py --config configs/kuka_lwr4.yaml --model model/kuka_lwr4.urdf\n```\n\nSaves to `\u003cmodel\u003e.measurements.npz` by default. Override with `--filename`.\n\n* **identifier.py**: identify dynamical parameters (mass, COM and rotational inertia) starting from an URDF description and from torque and force measurements\n\n```bash\nuv run identifier.py --config configs/kuka_lwr4.yaml --model model/kuka_lwr4.urdf --measurements measurements.npz\n```\n\n* **visualizer.py**: show 3D robot model of URDF, trajectory motion\n\n```bash\nuv run visualizer.py --config configs/kuka_lwr4.yaml --model model/kuka_lwr4.urdf --trajectory model/kuka_lwr4.urdf.trajectory.npz\n```\n\n### Additional non-PyPI dependencies\n\nRequirements for excitation module:\n\n* for ros, python modules: ros, moveit\\_msg, moveit\\_commander\n* for yarp: c compiler, installed [robotology-superbuild](https://github.com/robotology-playground/robotology-superbuild), python modules: yarp\n* for other robots, new modules will have to be written\n\nAlso see the [Tutorial](documentation/TUTORIAL.md).\n\nKnown limitations:\n\n* trajectory optimization for floating-base robots with suspended dynamics uses a ball-joint\n  model. True chain/cable dynamics and walking contact dynamics are not yet implemented.\n* YARP excitation module is not very generic (ROS should be)\n* using position control over YARP is not realtime safe and can expose timing issues (especially with python to C bridge)\n\nThe SDP-constrained identification follows the LMI formulation of \\[Sousa2014\\] (and the reference\nimplementation [cdsousa/wam7\\_dyn\\_ident](https://github.com/cdsousa/wam7_dyn_ident)), but is a from-scratch\nreimplementation that differs in how the problem is built and solved:\n\n* **Construction.** The original builds the linear matrix inequalities *symbolically* (sympy with `lmi_sdp`).\n  This toolkit instead assembles the constraint matrices *numerically* and hands them to [cvxpy](https://www.cvxpy.org/).\n  Avoiding symbolic expansion makes constraint construction far faster and keeps it tractable for high-DOF\n  floating-base models with hundreds of standard parameters, where symbolic generation becomes prohibitively\n  slow and memory-heavy.\n* **Solver.** The problem is solved through cvxpy's conic-solver abstraction, so any of its modern interior-point\n  solvers can be used (CLARABEL by default, MOSEK and others optional). These are numerically more stable on\n  large, ill-conditioned floating-base problems than the earlier solver pipeline; the solver and its tolerances\n  are configurable (`sdpSolver`, `sdpSolverOptions`), and a failed solve degrades gracefully to the a priori\n  parameters instead of aborting.\n\nUsage is licensed under the LGPL 3.0, see License.md. Please quote the following publication if you're using this software for any project:\n`S. Bethge, J. Malzahn, N. Tsagarakis, D. Caldwell: \"FloBaRoID — A Software Package for the Identification of Robot Dynamics Parameters\", 26th International Conference on Robotics in Alpe-Adria-Danube Region (RAAD), 2017`\n\n### References\n\n\\[Venture2009\\] G. Venture, K. Ayusawa, Y. Nakamura: \"A numerical method for choosing motions with optimal excitation properties for identification of biped dynamics — An application to human,\" IEEE International Conference on Robotics and Automation (ICRA), pp. 1226–1231, 2009.\n\n\\[Gautier1991\\] M. Gautier: \"Numerical calculation of the base inertial parameters of robots,\" Journal of Robotic Systems, vol. 8, no. 4, pp. 485–506, 1991.\n\n\\[Pham1991\\] C. M. Pham, M. Gautier: \"Essential parameters of robots,\" Proceedings of the 30th IEEE Conference on Decision and Control, Brighton, England, pp. 2769–2774, 1991.\n\n\\[Zak1994\\] G. Zak, B. Benhabib, R. G. Fenton, I. Saban: \"Application of the Weighted Least Squares Parameter Estimation Method to the Robot Calibration,\" Journal of Mechanical Design, vol. 116, no. 3, pp. 890–893, 1994.\n\n\\[Gautier2013\\] M. Gautier, G. Venture: \"Identification of Standard Dynamic Parameters of Robots with Positive Definite Inertia Matrix,\" IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), Tokyo, Japan, pp. 5815–5820, 2013.\n\n\\[Sousa2014\\] C. D. Sousa, R. Cortesão: \"Physical feasibility of robot base inertial parameter identification: A linear matrix inequality approach,\" The International Journal of Robotics Research, vol. 33, no. 6, pp. 931–944, 2014.\n\n\\[Ayusawa2014\\] K. Ayusawa, G. Venture, Y. Nakamura: \"Identifiability and identification of inertial parameters using the underactuated base-link dynamics for legged multibody systems,\" The International Journal of Robotics Research, vol. 33, no. 3, pp. 446–468, 2014.\n\n\\[Ayusawa2017\\] K. Ayusawa, A. Rioux, E. Yoshida, G. Venture, M. Gautier: \"Generating Persistently Exciting Trajectory Based on Condition Number Optimization,\" IEEE International Conference on Robotics and Automation (ICRA), Singapore, pp. 6518–6524, 2017.\n\n\\[Lee2020\\] T. Lee, P. M. Wensing, F. C. Park: \"Geometric Robot Dynamic Identification: A Convex Programming Approach,\" IEEE Transactions on Robotics, vol. 36, no. 2, pp. 348–365, 2020.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkjyv%2Fflobaroid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkjyv%2Fflobaroid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkjyv%2Fflobaroid/lists"}