{"id":15672728,"url":"https://github.com/armandpl/furuta","last_synced_at":"2025-04-13T00:52:14.834Z","repository":{"id":63734215,"uuid":"408438685","full_name":"Armandpl/furuta","owner":"Armandpl","description":"Building and Training a Rotary Inverted Pendulum robot","archived":false,"fork":false,"pushed_at":"2024-10-29T14:14:01.000Z","size":72895,"stargazers_count":18,"open_issues_count":40,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-29T15:17:39.441Z","etag":null,"topics":["deep-learning","reinforcement-learning","robotics"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/Armandpl.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}},"created_at":"2021-09-20T12:43:04.000Z","updated_at":"2024-10-20T17:36:58.000Z","dependencies_parsed_at":"2024-01-29T20:15:48.201Z","dependency_job_id":"b6b75978-9672-474d-a384-3228596f3dd7","html_url":"https://github.com/Armandpl/furuta","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armandpl%2Ffuruta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armandpl%2Ffuruta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armandpl%2Ffuruta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armandpl%2Ffuruta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Armandpl","download_url":"https://codeload.github.com/Armandpl/furuta/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650435,"owners_count":21139672,"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","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":["deep-learning","reinforcement-learning","robotics"],"created_at":"2024-10-03T15:30:42.704Z","updated_at":"2025-04-13T00:52:14.810Z","avatar_url":"https://github.com/Armandpl.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Furuta Pendulum\n\nIn this repository you will find everything you need to build and train a rotary inverted pendulum (also known as a furuta pendulum). Watch the build video [here](https://www.youtube.com/watch?v=Y6FVBbqjR40).\n\n![](./assets/pendulum.jpg)\n## Table of Content\n- [Motivations and Goals](#motivations-and-goals)\n- [Getting Started](#getting-started)\n- [MLOps](#mlops)\n- [Credits](#credits)\n\n## Motivations and Goals\n- There are many ([hundreds!](https://www.youtube.com/results?search_query=furuta+pendulum)) videos of rotary inverted pendulum on the internet but we couldn't find good documentation on how to build one and how to control one. This projects aims to make building a furuta pendulum **affordable and reproducible**.\n- We wanted to learn about RL. Balancing a pendulum is kind of the \"hello world\" of the field, it seemed like a good starting point.\n\n## Getting Started\n1. [Get the supplies and follow the hardware instructions](https://github.com/Armandpl/furuta/tree/master/hardware)\n2. [Follow the software instructions](https://github.com/Armandpl/furuta/tree/master/software)\n3. Deploy pre-trained models, run experiments and train the robot\n\nIf you have any question feel free to open an issue or DM me [@armand_dpl](twitter.com/armand_dpl).\n\n## Usage\n1. Plug-in the robot\n2. Run `sudo dmesg | grep tty` in terminal to find which port is used for the device\n3. run `python tests/interactive_robot_self_test.py`\n\n## MLOps\nDuring this project we leveraged [Weights and Biases](https://wandb.ai/site) MLOps tools to make our life easier. You can find our experiments, pre-trained models and reports [on our dashboard](https://wandb.ai/armandpl/furuta). You can also read more about [Training Reproducible Robots with W\u0026B here](https://wandb.ai/armandpl/furuta/reports/Training-Reproducible-Robots-with-W-B--VmlldzoxMTY5NTM5).\n\n## Credits\nTo make this robot work we built on top of existing work!\n- We got the encoder precision and the idea to use a direct drive motor from the [Quanser Qube design](https://quanserinc.box.com/shared/static/5wnibclu7rp6xihm7mbxqxincu6dogur.pdf).\n- We re-used bits from [Quanser's code](https://git.ias.informatik.tu-darmstadt.de/quanser/clients/-/tree/master/quanser_robots/qube). Notably:\n  * their VelocityFilter class to compute the angular speeds\n  * their GentlyTerminating wrapper to send a zero command to the robot at the end of each episode\n  * their rotary inverted pendulum simulation\n  * their ActionLimiter class\n- The arm assembly is inspired by this [YouTube video](https://www.youtube.com/watch?v=xowrt6ShdCw) by Mack Tang.\n- The visualization we use for the simulation is copy-pasted from https://github.com/angelolovatto/gym-cartpole-swingup\n- We use the [StableBaselines3](https://github.com/DLR-RM/stable-baselines3) library to train the robot.\n- We implemented tricks from [Antonin Raffin's talk at RLVS 2021](https://www.youtube.com/watch?v=Ikngt0_DXJg).\n  * HistoryWrapper and continuity cost\n  * [gSDE](https://arxiv.org/abs/2005.05719)\n- We use [code from Federico Bolanos](https://github.com/fbolanos/LS7366R/blob/master/LS7366R.py) to read the encoders counters.\n\n## Authors\n[Armand du Parc Locmaria](https://armandpl.com)\n[Pierre Fabre](https://www.linkedin.com/in/p-fabre/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmandpl%2Ffuruta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farmandpl%2Ffuruta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmandpl%2Ffuruta/lists"}