{"adoption": {"forks": 342, "observed_at": "2026-08-28T04:05:24.853867+00:00", "stars": 1705}, "canonical_url": "https://ross.abutalabs.com/products/control-toolbox", "card": {"archived": false, "artifact_type": "library", "description": "The Control Toolbox - An Open-Source C++ Library for Robotics, Optimal and Model Predictive Control", "domain": ["robotics", "simulation", "autonomous-vehicles"], "enriched": true, "function": ["simulation", "math", "machine-learning"], "health_score": 20, "homepage": null, "language": "C++", "license": "BSD-2-Clause", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["ethz-adrl/control-toolbox"], "name": "ethz-adrl/control-toolbox", "platform": ["cpp", "cross-platform"], "pushed_at": "2022-11-09T23:17:15+00:00", "repo": "ethz-adrl/control-toolbox", "stars": 1705, "tags": ["optimal-control", "model-predictive-control", "trajectory-optimization", "ilqr", "ilqg", "riccati-solver", "automatic-differentiation", "rigid-body-dynamics", "extended-kalman-filter", "multiple-shooting", "motion-planning", "robotics-control", "optimization", "algorithms", "linux", "macos"], "topics": ["optimal-control", "model-predictive-control", "ilqr", "ilqg", "robotics", "trajectory-optimization", "lqr-controller", "control-systems", "cpp", "extended-kalman-filter", "riccati-solver", "multiple-shooting", "disturbance-observer", "automatic-differentiation", "rigid-body-dynamics"], "urls": [], "use_cases": ["solve optimal control problems for robotic systems in C++", "implement model predictive control (MPC) on real robots", "perform trajectory optimization with iLQR or multiple shooting", "model rigid body dynamics and kinematics for manipulators", "design extended Kalman filters and disturbance observers", "generate derivative code for dynamics with automatic differentiation", "run nonlinear MPC in real time on flying, walking or ground robots"], "what_it_is": "The Control Toolbox (CT) is an open-source C++ library for modelling dynamical systems, control, estimation, trajectory optimization and model predictive control, with special tooling for robotics. It provides solvers such as iLQR/iLQG, multiple shooting, and interfaces to IPOPT, SNOPT and HPIPM, plus automatic differentiation and rigid body dynamics via RobCoGen.", "when_to_avoid": ["you need actively maintained software with quick bug fixes (scarcely maintained since 2021)", "you want a Python-first control library", "your problem is simple PID/linear control that lighter tools handle", "you need extensive documentation or community support"], "when_to_choose": ["you need a high-performance C++ library for optimal control or MPC", "you are working on robotics control with rigid body dynamics models", "you want solver flexibility across IPOPT, SNOPT, HPIPM or custom Riccati solvers", "you need automatic differentiation and code generation for dynamics"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/control-toolbox", "repo": "ethz-adrl/control-toolbox", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.853867+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:37:31.646416+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4093fce1ab4b7fbff8ebf37bf86a710b81025713efceedfa122180df564c474d", "fetched_at": "2026-08-28T04:05:24.853867+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ethz-adrl/control-toolbox"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2687, "days_push": 1393, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}