{"id":50429914,"url":"https://github.com/enactic/openarm_control","last_synced_at":"2026-05-31T13:30:30.651Z","repository":{"id":359297473,"uuid":"1242142141","full_name":"enactic/openarm_control","owner":"enactic","description":"OpenArm Control: Kinematics and Dynamics for OpenArm","archived":false,"fork":false,"pushed_at":"2026-05-21T07:53:37.000Z","size":10,"stargazers_count":1,"open_issues_count":2,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-21T14:56:59.133Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enactic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-05-18T07:01:00.000Z","updated_at":"2026-05-21T07:53:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/enactic/openarm_control","commit_stats":null,"previous_names":["enactic/openarm_control"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/enactic/openarm_control","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_control","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_control/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_control/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_control/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enactic","download_url":"https://codeload.github.com/enactic/openarm_control/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_control/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33733754,"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-05-31T02:00:06.040Z","response_time":95,"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":[],"created_at":"2026-05-31T13:30:28.987Z","updated_at":"2026-05-31T13:30:30.645Z","avatar_url":"https://github.com/enactic.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenArm Control\n\nReusable kinematics and control utilities for OpenArm, backed by MuJoCo and [mink](https://github.com/kevinzakka/mink).\n\n## Install\n\n```bash\nuv sync\n```\n\n## Usage\n\n### `Kinematics`\n\n```python\nfrom openarm_control import Kinematics, IKParams, ArmSetup\n\n# FK only\nkin = Kinematics(setup)\npose = kin.fk(\"right\", joints)               # float32[7]\npose_r, pose_l = kin.fk_bimanual(r, l)       # single mj_forward\n\n# IK\nkin = Kinematics(setup, IKParams(damping=0.25, posture_cost=0.01))\nkin.set_target(\"right\", pose_r)\nkin.set_target(\"left\", pose_l)\nresult = kin.solve(dt=0.1, n_iters=5)        # float32[16] right[8]+left[8]\n```\n\n### `IKParams`\n\nSolver configuration passed to `Kinematics`. All fields have defaults.\n\n| Field | Default | Description |\n|---|---|---|\n| `position_cost` | `1.0` | Position task weight |\n| `orientation_cost` | `1.0` | Orientation task weight |\n| `lm_damping` | `0.01` | Per-task Levenberg-Marquardt damping |\n| `damping` | `0.25` | Global Tikhonov regularization |\n| `solver` | `\"daqp\"` | QP backend |\n| `posture_cost` | `0.01` | Neutral posture task weight (0 = disabled) |\n| `diag_reg` | `0.0` | QP diagonal regularization |\n| `dt` | `0.1` | Integration timestep per iteration |\n| `max_iters` | `5` | IK iterations per solve |\n| `velocity_limits` | `None` | Per-joint velocity limits (applied in rad/s from `config.py`); `None` = disabled |\n\nBuild from CLI args with `register_ik_args` + `ik_params_from_args`:\n\n## Related links\n\n- 💬 Join the community on [Discord](https://discord.gg/FsZaZ4z3We)\n- 📬 Contact us through \u003copenarm@enactic.ai\u003e\n\n## License\n\nLicensed under the Apache License 2.0. See [LICENSE.txt](LICENSE.txt) for details.\n\nCopyright 2026 Enactic, Inc.\n\n## Code of Conduct\n\nAll participation in the OpenArm project is governed by our [Code of Conduct](CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenactic%2Fopenarm_control","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenactic%2Fopenarm_control","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenactic%2Fopenarm_control/lists"}