{"id":31039121,"url":"https://github.com/stephane-caron/pink_balancer","last_synced_at":"2025-09-14T07:47:51.885Z","repository":{"id":216144813,"uuid":"740566746","full_name":"stephane-caron/pink_balancer","owner":"stephane-caron","description":"Upkie agent that can balance and crouch","archived":false,"fork":false,"pushed_at":"2025-08-07T05:45:44.000Z","size":208,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-12T15:50:10.717Z","etag":null,"topics":["inverse-kinematics","legged-robots","locomotion","pid-control","python","robotics","wheeled-biped"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stephane-caron.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2024-01-08T15:55:33.000Z","updated_at":"2025-08-14T15:17:32.000Z","dependencies_parsed_at":"2024-01-22T10:32:39.588Z","dependency_job_id":"1a49e574-dcb2-4b52-ad14-5a97dedf7db7","html_url":"https://github.com/stephane-caron/pink_balancer","commit_stats":null,"previous_names":["stephane-caron/pink_balancer","upkie/pink_balancer"],"tags_count":0,"template":false,"template_full_name":"upkie/new_agent","purl":"pkg:github/stephane-caron/pink_balancer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-caron%2Fpink_balancer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-caron%2Fpink_balancer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-caron%2Fpink_balancer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-caron%2Fpink_balancer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stephane-caron","download_url":"https://codeload.github.com/stephane-caron/pink_balancer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-caron%2Fpink_balancer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275076528,"owners_count":25401315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"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":["inverse-kinematics","legged-robots","locomotion","pid-control","python","robotics","wheeled-biped"],"created_at":"2025-09-14T07:47:50.829Z","updated_at":"2025-09-14T07:47:51.878Z","avatar_url":"https://github.com/stephane-caron.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pink balancer\n\n[![upkie](https://img.shields.io/badge/upkie-8.0.0-bbaacc)](https://github.com/upkie/upkie/tree/v8.0.0)\n\nAn agent for [Upkie](https://github.com/upkie/upkie/) that combines wheeled balancing with inverse kinematics computed by [Pink](https://github.com/stephane-caron/pink). This is the controller that runs in the [first](https://www.youtube.com/shorts/8b36XcCgh7s) [two](https://www.youtube.com/watch?v=NO_TkHGS0wQ) videos of Upkie.\n\n## Installation\n\n### On your machine\n\n```console\nconda env create -f environment.yaml\nconda activate ppo_balancer\n```\n\n### On your Upkie\n\nThe PPO balancer uses [pixi](https://pixi.sh/latest/#installation) and [pixi-pack](https://github.com/Quantco/pixi-pack/releases) to pack a standalone Python environment to run policies on your Upkie. First, create `environment.tar` and upload it by:\n\n```console\nmake pack_pixi_env\nmake upload\n```\n\nThen, unpack the remote environment:\n\n```console\n$ ssh user@your-upkie\nuser@your-upkie:~$ cd ppo_balancer\nuser@your-upkie:ppo_balancer$ make unpack_pixi_env\n```\n\n## Usage\n\nStart the simulation or pi3hat spine, then run:\n\n```console\nmake run_agent\n```\n\n### Gamepad commands\n\nOnce the agent is running, you can direct your Upkie using the game controller 🎮\n\n- **Left joystick:** go forward right backward\n- **Right joystick:** turn left or right\n- **Directional pad:** down to crouch, up to stand up\n- **Right button:** (B on an Xbox controller, red circle on a PS4 controller) emergency stop 🚨 all motors will turn off\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephane-caron%2Fpink_balancer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephane-caron%2Fpink_balancer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephane-caron%2Fpink_balancer/lists"}