{"id":15064189,"url":"https://github.com/alberto-abarzua/ribot","last_synced_at":"2025-04-10T11:51:09.944Z","repository":{"id":40378276,"uuid":"423932691","full_name":"alberto-abarzua/ribot","owner":"alberto-abarzua","description":"Robot arm control software, controlled by an ESP-32 via Wi-Fi. Designed to be intuitive and user-friendly","archived":false,"fork":false,"pushed_at":"2024-03-28T17:49:09.000Z","size":195077,"stargazers_count":35,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-24T10:38:53.270Z","etag":null,"topics":["3d-models","6dof","arm","controller","esp32","python","robot","robot-arm","robot-arm-control","robotarm","robotics","unity","wifi"],"latest_commit_sha":null,"homepage":"https://ribot.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alberto-abarzua.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}},"created_at":"2021-11-02T17:11:57.000Z","updated_at":"2025-03-22T04:51:45.000Z","dependencies_parsed_at":"2023-11-15T01:47:13.045Z","dependency_job_id":"967f4794-9d97-41fd-8a64-651656b96b05","html_url":"https://github.com/alberto-abarzua/ribot","commit_stats":null,"previous_names":["alberto-abarzua/robot-arm-control","alberto-abarzua/ribot"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto-abarzua%2Fribot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto-abarzua%2Fribot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto-abarzua%2Fribot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto-abarzua%2Fribot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alberto-abarzua","download_url":"https://codeload.github.com/alberto-abarzua/ribot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248215192,"owners_count":21066619,"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":["3d-models","6dof","arm","controller","esp32","python","robot","robot-arm","robot-arm-control","robotarm","robotics","unity","wifi"],"created_at":"2024-09-25T00:13:15.053Z","updated_at":"2025-04-10T11:51:09.911Z","avatar_url":"https://github.com/alberto-abarzua.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ribot: Robot Arm Controller\n\nWelcome to the Ribot project, your comprehensive solution for controlling robotic arms with up to 6 degrees of freedom (DOF). This project encapsulates both firmware and software components tailored to deliver an exceptional user experience in robotic arm manipulation.\n\n![Ribot](./arm_docs/static/img/general_page.gif)\n\n## Demo Video\n\n[![Demo on Robot Arm](https://img.youtube.com/vi/HM4zTVW9VRM/0.jpg)](https://www.youtube.com/watch?v=HM4zTVW9VRM)\n\n[Click this or the image!](https://youtu.be/HM4zTVW9VRM)\n\n## Getting Started\n\n### Prerequisites\n- Docker Desktop: [Download here](https://www.docker.com/products/docker-desktop/)\n- Python 3.8 or higher\n- ESPTool Python package for firmware flashing (Required, if using Docker):\n  ```bash\n  pip install esptool toml\n  ```\n- Alternatively, you can use your own install of ESP IDF (v5.1.1) for manual firmware flashing.\n\n### Installation\n\n1. **Clone the Repository**\n   ```bash\n   git clone https://github.com/alberto-abarzua/ribot.git\n   ```\n\n2. **ribot.py Script**\n   This utility script facilitates building, running, and managing the project.\n   - Usage: \n     ```bash\n     python ribot.py --help\n     ```\n\n3. **Building the Firmware for ESP32**\n   ```bash\n   python ribot.py build-esp\n   ```\n\n4. **Flashing the Firmware**\n   ```bash\n   python ribot.py build-esp --flash\n   ```\n\n5. **Running Backend and Frontend Services**\n   For real ESP32:\n   ```bash\n   python ribot.py runserver --esp\n   ```\n   For a dummy firmware version (Docker):\n   ```bash\n   python ribot.py runserver\n   ```\n\n## Project Components\n\n### Firmware\n- **Language**: C++\n- **Framework**: ESP IDF\n- **Target Platform**: ESP32 Microcontroller\n- **Functionality**: Manages robotic arm control logic and real-time operations.\n\n### Software\n- **Backend**\n  - **Language**: Python\n  - **Framework**: FastAPI\n  - **Functionality**: Facilitates communication between the frontend and firmware, processes control commands, and manages system state.\n- **Frontend**\n  - **Language**: JavaScript\n  - **Framework**: React\n  - **Functionality**: Provides a user interface for interacting with the robotic arm, sending commands, and receiving feedback.\n\n## Communication\n- Firmware to Backend: Sockets\n- Frontend to Backend: WebSockets and HTTP requests\n\n## Python Control Library for Ribot\n\nThe Ribot project utilizes a Python library, `ribot-controller`, to seamlessly integrate backend operations with the robot arm's firmware. This library is a pivotal component of the backend, enabling efficient and straightforward control of the robotic arm. It's available on PyPI and can be easily incorporated into Python-based applications.\n\n### Key Features\n- **Easy-to-Use Interface**: Provides simple and intuitive commands for robotic arm control.\n- **Direct Connection with Firmware**: Ensures seamless communication between the backend and the robotic arm's firmware.\n- **Python-based**: Leveraging Python's versatility and simplicity for robotic control tasks.\n\n### Installation\nTo install `ribot-controller`, use pip:\n```bash\npip install ribot-controller\n```\n\n### Example Usage\nBelow is an example illustrating how to use the `ribot-controller` library to control the robot arm:\n\n```python\nfrom ribot.control.arm_kinematics import ArmParameters, ArmPose\nfrom ribot.controller import ArmController, Settings\n\nif __name__ == \"__main__\":\n    # Arm parameters (Physical dimensions of the arm)\n    arm_params: ArmParameters = ArmParameters()\n    arm_params.a2x = 0\n    arm_params.a2z = 172.48\n\n    arm_params.a3z = 173.5\n\n    arm_params.a4z = 0\n    arm_params.a4x = 126.2\n\n    arm_params.a5x = 64.1\n    arm_params.a6x = 169\n\n    controller = ArmController(arm_parameters=arm_params)\n    # The websocket server is used by the simulation in the Frontend\n    controller.start(websocket_server=False, wait=True)\n\n    controller.set_setting_joints(Settings.STEPS_PER_REV_MOTOR_AXIS, 400)\n    controller.home()\n\n    # Move to a position\n    position = ArmPose(x=320, y=0, z=250, pitch=0, roll=0, yaw=0)\n    controller.move_to(position)\n    controller.wait_done_moving()\n\n    # Move to angles (rads)\n    angles = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n    controller.move_joints_to(angles)\n\n    # Move the tool (rads)\n    controller.set_tool_value(1.2)\n\n    print(\"Homed:\", controller.is_homed)\n```\n\nThis example demonstrates initializing the controller, setting up the arm parameters, and executing various movements including positioning, angling, and tool manipulation.\n\n### Documentation\nFor detailed documentation, please visit our [Docs](https://ribot.dev).\n\n### Contributing\n\nPlease feel free to contribute to this project! We welcome any and all contributions to help improve the Ribot project. We don't have any specific guidelines for contributing, but please follow the general guidelines below:\n\n**Issues**: If you find any bugs or have any feature requests, please create an issue on GitHub.\n\n**Pull Requests**: If you have any changes you'd like to make, please create a pull request on GitHub. We'll review it and merge it if it looks good!\n\n**Code Style**: Follow the existing code style (formatting and linting). For python code, we use black, isort, mypy, and flake8. For C++ code, we use clang-format and clang-tidy. For JavaScript code, we use prettier and eslint.       \n- You can check if you are following the code style by running `python ribot.py lint` in the root directory of the project. This will run all the linters and formatters on the codebase.\n- To format the code, run `python ribot.py format` in the root directory of the project. This will run all the formatters on the codebase.\n\n**Testing**: We have unit tests for the Python codebase. You can run them by running `python ribot.py test` in the root directory of the project.\n\n### License\nThis project is licensed under the [MIT License](#).\n\n---\n\nHappy coding and controlling with Ribot! 🤖✨\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falberto-abarzua%2Fribot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falberto-abarzua%2Fribot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falberto-abarzua%2Fribot/lists"}