{"id":48444463,"url":"https://github.com/htl-stp-ecer/raccoon-cli","last_synced_at":"2026-04-25T14:03:06.189Z","repository":{"id":349123538,"uuid":"1144881852","full_name":"htl-stp-ecer/raccoon-cli","owner":"htl-stp-ecer","description":"Dev toolchain for RaccoonOS — scaffold projects, configure hardware, sync code, and run missions on the Wombat","archived":false,"fork":false,"pushed_at":"2026-04-08T18:04:31.000Z","size":1396,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-08T19:27:44.585Z","etag":null,"topics":["botball","cli","code-generation","python","raccoon-os","raspberry-pi","robotics"],"latest_commit_sha":null,"homepage":"https://raccoon-docs.pages.dev/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/htl-stp-ecer.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-29T06:40:57.000Z","updated_at":"2026-04-08T18:02:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/htl-stp-ecer/raccoon-cli","commit_stats":null,"previous_names":["htl-stp-ecer/raccoon-cli"],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/htl-stp-ecer/raccoon-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htl-stp-ecer%2Fraccoon-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htl-stp-ecer%2Fraccoon-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htl-stp-ecer%2Fraccoon-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htl-stp-ecer%2Fraccoon-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/htl-stp-ecer","download_url":"https://codeload.github.com/htl-stp-ecer/raccoon-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htl-stp-ecer%2Fraccoon-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31635971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["botball","cli","code-generation","python","raccoon-os","raspberry-pi","robotics"],"created_at":"2026-04-06T17:04:01.164Z","updated_at":"2026-04-15T23:02:23.536Z","avatar_url":"https://github.com/htl-stp-ecer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/htl-stp-ecer/.github/main/profile/raccoon-logo.svg\" alt=\"raccoon-cli\" width=\"100\"/\u003e\n\n# raccoon-cli\n\n**The dev toolchain for RaccoonOS — scaffold, configure, sync, and run Botball robots.**\n\n[![Build \u0026 Release](https://github.com/htl-stp-ecer/raccoon-cli/actions/workflows/build-release.yml/badge.svg)](https://github.com/htl-stp-ecer/raccoon-cli/actions/workflows/build-release.yml)\n[![Latest Release](https://img.shields.io/github/v/release/htl-stp-ecer/raccoon-cli)](https://github.com/htl-stp-ecer/raccoon-cli/releases/latest)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](COPYING)\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python\u0026logoColor=ffdd54)\n![PyPI](https://img.shields.io/pypi/v/raccoon-cli?logo=pypi\u0026logoColor=white)\n![Platform](https://img.shields.io/badge/Platform-KIPR%20Wombat-orange)\n\n\u003e 📖 **Full documentation at [raccoon-docs.pages.dev](https://raccoon-docs.pages.dev/)**\n\n\u003c/div\u003e\n\n---\n\n`raccoon` is the command-line companion to [RaccoonLib](https://github.com/htl-stp-ecer/raccoon-lib). It handles everything outside the robot code itself: creating projects, generating hardware boilerplate from a YAML config, syncing files to the Pi, and running your missions remotely.\n\n---\n\n## Installation\n\n```bash\npip install raccoon-cli\n```\n\n---\n\n## Quick Start\n\n```bash\n# 1. Create a new project (runs the hardware wizard automatically)\nraccoon create project MyRobot\ncd MyRobot\n\n# 2. Connect to your Pi\nraccoon connect 192.168.4.1\n\n# 3. Sync + run\nraccoon run\n```\n\nThat's it. `raccoon run` regenerates any stale code, syncs changed files to the Pi, and streams output back to your terminal.\n\n---\n\n## How it works\n\nraccoon uses a **client-server architecture**. Your laptop runs the CLI; the Pi runs a small FastAPI daemon (`raccoon-server`) that receives commands, manages execution, and streams logs back.\n\n### Pi setup (one time)\n\n```bash\n# On the Pi -- install raccoon-server as a systemd service\nsudo raccoon-server install\n```\n\nAfter that, the server starts automatically on boot and `raccoon connect` can reach it.\n\n---\n\n## Commands\n\n### Project management\n\n| Command | Description |\n|:--------|:------------|\n| `raccoon create project \u003cname\u003e` | Scaffold a new project and run the hardware wizard |\n| `raccoon create mission \u003cname\u003e` | Add a new mission to the current project |\n| `raccoon list projects` | List all projects in the current directory |\n| `raccoon list missions` | List missions in the current project |\n| `raccoon remove mission \u003cname\u003e` | Remove a mission |\n| `raccoon reorder` | Interactively reorder missions |\n\n### Hardware \u0026 code generation\n\n| Command | Description |\n|:--------|:------------|\n| `raccoon wizard` | Re-run the interactive hardware configuration |\n| `raccoon codegen` | Regenerate `src/hardware/defs.py` and `src/hardware/robot.py` from config |\n| `raccoon calibrate` | Two-phase calibration: measure encoder ticks/rev, then run autotune |\n\n### Remote development\n\n| Command | Description |\n|:--------|:------------|\n| `raccoon connect \u003caddress\u003e` | Connect to a Pi server |\n| `raccoon disconnect` | Disconnect from the current Pi |\n| `raccoon status` | Show connection status |\n| `raccoon sync` | Sync changed files to the Pi (uses content hashing) |\n| `raccoon sync --force` | Re-upload all files |\n| `raccoon run` | Regenerate code, sync, and run on the Pi |\n\n### Debugging\n\n| Command | Description |\n|:--------|:------------|\n| `raccoon lcm spy` | Live-inspect LCM messages on the bus |\n| `raccoon lcm record \u003cfile\u003e` | Record LCM traffic to a file |\n| `raccoon checkpoint list` | List saved checkpoints |\n| `raccoon checkpoint restore \u003cid\u003e` | Restore project to a checkpoint |\n\n### Tooling\n\n| Command | Description |\n|:--------|:------------|\n| `raccoon update` | Update raccoon-cli to the latest version |\n| `raccoon completion` | Install shell tab-completion |\n| `raccoon web` | Launch the web IDE |\n\n---\n\n## Project structure\n\n`raccoon create project` generates:\n\n```\nMyRobot/\n├── raccoon.project.yml    # Hardware config -- motors, sensors, drivetrain, connection\n├── src/\n│   ├── main.py\n│   ├── hardware/\n│   │   ├── defs.py        # Generated -- do not edit by hand\n│   │   └── robot.py       # Generated -- do not edit by hand\n│   ├── missions/\n│   │   ├── setup_mission.py\n│   │   └── shutdown_mission.py\n│   └── steps/\n└── .raccoonignore         # match patterns excluded from sync\n```\n\n`defs.py` and `robot.py` are regenerated by `raccoon codegen` (and automatically on every `raccoon run`). Edit `raccoon.project.yml` or re-run `raccoon wizard` to change hardware config - never edit the generated files directly.\n\n---\n\n## Configuration\n\n`raccoon create project` generates a split config layout. The root file just glues things together:\n\n### `raccoon.project.yml`\n\n```yaml\nname: MyRobot\nuuid: \u003cauto-generated\u003e\n\nrobot:       !include 'config/robot.yml'\nmissions:    !include 'config/missions.yml'\ndefinitions: !include 'config/hardware.yml'\nconnection:  !include 'config/connection.yml'\n```\n\n### `config/hardware.yml` -- sensors, motors, servos\n\n```yaml\nbutton:\n  type: DigitalSensor\n  port: 10\nimu:\n  type: IMU\nfront_left_ir_sensor:\n  type: IRSensor\n  port: 1\nfront_right_ir_sensor:\n  type: IRSensor\n  port: 2\n\n_motors: !include-merge 'motors.yml'\n_servos: !include-merge 'servos.yml'\n```\n\n### `config/motors.yml`\n\n```yaml\nleft_motor:\n  type: Motor\n  port: 0\n  inverted: false\n  calibration:\n    ticks_to_rad: 0.00002   # set by raccoon calibrate\n    vel_lpf_alpha: 1.0\nright_motor:\n  type: Motor\n  port: 1\n  inverted: true\n  calibration:\n    ticks_to_rad: 0.00002\n    vel_lpf_alpha: 1.0\n```\n\n### `config/connection.yml`\n\n```yaml\npi_address: 192.168.4.1\npi_port: 8421\npi_user: pi\nauto_connect: true\n```\n\n### `~/.raccoon/config.yml` (global)\n\n```yaml\nknown_pis:\n  - hostname: raccoon-pi\n    address: 192.168.4.1\ndefault_pi_user: pi\n```\n\n---\n\n## Part of RaccoonOS\n\n| Repository | What it is |\n|:-----------|:-----------|\n| [raccoon-lib](https://github.com/htl-stp-ecer/raccoon-lib) | Core robotics library |\n| [raccoon-example](https://github.com/htl-stp-ecer/raccoon-example) | Reference robot -- start here if you're new |\n| [raccoon-transport](https://github.com/htl-stp-ecer/raccoon-transport) | LCM messaging layer |\n| [documentation](https://raccoon-docs.pages.dev/) | Full platform docs |\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started contributing\n\n\n## License\n\nCopyright (C) 2026 Tobias Madlberger  \nLicensed under the GNU General Public License v3.0 -- see [COPYING](COPYING) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhtl-stp-ecer%2Fraccoon-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhtl-stp-ecer%2Fraccoon-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhtl-stp-ecer%2Fraccoon-cli/lists"}