{"id":15145407,"url":"https://github.com/robotstudio/choreo","last_synced_at":"2026-01-19T18:32:35.840Z","repository":{"id":57198300,"uuid":"50003066","full_name":"RobotStudio/choreo","owner":"RobotStudio","description":"A Robotics Framework","archived":false,"fork":false,"pushed_at":"2017-09-12T21:51:00.000Z","size":548,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-06T21:46:13.850Z","etag":null,"topics":["architecture","choreo","choreo-framework","golang","microservice","middleware","peer-network","robot-framework","robotics","robots"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RobotStudio.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}},"created_at":"2016-01-20T03:56:24.000Z","updated_at":"2017-05-23T18:33:20.000Z","dependencies_parsed_at":"2022-09-16T14:10:39.063Z","dependency_job_id":null,"html_url":"https://github.com/RobotStudio/choreo","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/RobotStudio%2Fchoreo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotStudio%2Fchoreo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotStudio%2Fchoreo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotStudio%2Fchoreo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RobotStudio","download_url":"https://codeload.github.com/RobotStudio/choreo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247557805,"owners_count":20958047,"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":["architecture","choreo","choreo-framework","golang","microservice","middleware","peer-network","robot-framework","robotics","robots"],"created_at":"2024-09-26T11:24:41.326Z","updated_at":"2026-01-19T18:32:35.790Z","avatar_url":"https://github.com/RobotStudio.png","language":"Go","readme":"# Status\n\nThis project is in its infancy.  If you would like to know more, please see\n[Contributing](#contributing) below.\n\n\n# Synopsis\n\nThe Choreo Framework is a microservices framework for assisting in the\ndevelopment of robotics and _Internet-of-things_ applications.  While it is\nlightweight, it intends to act as a more more flexible and modular approach\nthan ROS (\"Robot Operating System).\n\nOne way to think of Choreo is as an SOA ([Service-Oriented Architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture))\nwithout centralization.  What this means is that a network of services using\nthe Choreo framework self-organize themselves as peers, and establish\ncommunications across these channels using the [GOSSIP protocol](https://en.wikipedia.org/wiki/Gossip_protocol) to\ncommunicate events, whereby applications within the network can respond and\neffect action on the network.  ([More information below.](#architecture))\n\n\n### Key Features\n\nThis is a preliminary list, and not at all the current state of things:\n- Service Authentication + Authorization\n- Network encryption\n- Minimal knowledge required to get fully-capable robotics platform\n- Modular architecture, allowing swappable technologies (ie- [DDS](https://en.wikipedia.org/wiki/Data_Distribution_Service))\n- Ingress protection\n- Cloud integration\n- Language and platform/technology agnostic\n- Highly extensible/configurable\n\n\n## Road Map\n\nWe are currently creating several PoC pieces to integrate various systems to\ncreate a *development stack* for robotics that is comparable to [ROS](http://www.ros.org/core-components/).\n\n* Integration with [`Consul`, `Serf`, `Swim`, and `Gossip` (Hashicorp Protocols)](https://www.hashicorp.com/)\n  for decentralized resource management, configuration, and auth.\n* Integration with [GRPC](https://grpc.io) for language-agnostic messaging.\n* Communication using Protocol Buffers.\n\n\n# Language\n\nWhile the core of the framework is being built in Golang, the application is\nbuilt to be language-agnostic and with [_convention over configuration_](https://en.wikipedia.org/wiki/Convention_over_configuration) in\nmind.\n\nThe core Choreo libraries are created using the Go programming language,\nand will likely incorporate some mix of code generation and external libraries\nto build compliant interfaces for your chosen language.\n\n\n# Getting Started\n\n## Installation\n\nWe aren't currently providing binary distribution.  With that, you are welcome\nto download the application using your Golang environment.\n\nMake sure you have your Go environment setup, and the `$GOPATH/bin` in your\n`$PATH`.  See the GoLang instructions for your distribution.\n\n    go get github/RobotStudio/choreo\n\n\n## Creating a project\n\n** NOTE: ** This does not currently work.\n\nA Choreo project can contain several _apps_, each performing a specific\nfunction:\n\n    choreo new projectName\n\nThis will create a new project in the `projectName` directory.\n\n_More coming soon..._\n\n\n# Architecture\n\n### Overview\n\nThe _stack_, as it stands.\n\n```\n    +================+\n    |     Cloud      |\n    |  Integrations  |\n    +----------------+\n    |     Auth       |\n    +----------------+\n    |    Config      |\n    +----------------+\n    |    Events      |\n    +----------------+\n    |   Membership   |\n    +----------------+\n    |    Discovery   |\n    +----------------+\n    |  Communication |\n    +----------------+\n    |    Physical    |\n    +================+\n```\n\n- Cloud Integrations ([tafy.io](https://tafy.io) _TBD ... coming soon_)\n- Auth ([Consul](https://github.com/hashicorp/consul))\n- Configuration ([Consul](https://github.com/hashicorp/consul))\n- Events ([Serf](https://www.serf.io/))\n- Membership ([SWIM](https://www.cs.cornell.edu/~asdas/research/dsn02-swim.pdf))\n- Discovery ([Gossip](https://en.wikipedia.org/wiki/Gossip_protocol))\n- Communication ([GRPC](https://grpc.io))\n- Physical ([Imagen](https://github.com/RobotStudio/imagen) _TBD ... coming soon_)\n\nEach of the layers is built independently, and the architecture intends to be\nmodular, allowing for any of these technologies to be swapped to meet the\nneeds of the individual.\n\nWhile this isn't the typical `middleware` model, it aims to achieve similar\ndesign considerations.\n\n\n### Design\n\nConsider the following architecture for a given robot:\n\n                        XXX\n                    XXXXX XXX    XXXXXX\n                 XXX        XXXXXX    XXX\n          XXXXXXXX           XX          XXXXXXXXX\n         X                                XX     XX\n         XXX           CLOUD SERVICES             XX\n           XXX                                     X\n             XX          X                         X\n              XXX       XX  XX+X        XXX      XXX\n                XXXXXXXXX XXX |XX      XX XXXXXXXX\n                        XXX   | XXXXXXXX\n                              |     XX\n                              |\n                              |\n                              |\n                              |\n                          +---+--+\n                          |      |\n                          | RPi  | Gateway\n                          |      |\n                          +--+---+\n                             |\n                             |\n                        +----+-----+\n                        | Ethernet |\n             +----------+  Switch  +-----------+\n             |          +----+-----+           |\n             |               |                 |\n             |               |                 |\n         +---+--+         +--+---+         +---+--+\n         |      |         |      |         |      |\n         | RPi  |         | RPi  |         | RPi  |\n         |      |         |      |         |      |\n         +----+-+         +----+-+         +----+-+\n              |                |                |\n              |                |                |\n        +-----+----+     +-----+----+     +-----+----+\n        |          |     |          |     |          |\n        |  Arduino |     |  Arduino |     |  Arduino |\n        |          |     |          |     |          |\n        +----+-----+     +-+-------++     +-+--------+\n             |             |       |        |\n        +----+------+      | +---+ |        |  XXXXXXX\n        |Peripherals|      +---| +-+        | X X     X\n        +-----------+        +---+          +-+ X     XXX\n                                              X X     X\n                            Sensors            XXXXXXX\n                                              Actuators\n\n_In this example, the Raspberry Pi's could be any embedded Linux platform, and\nArduino's could be any embedded controller capable of interfacing with\nHardware._\n\nIn this design, the RPi would be installed with a standard image (Imagen) and\nwould autodetect hardware on the Arduino's using standard images that it would\ndeploy to the detected device.  Essentially, auto-configuring the physical\napplication using a _Plug \u0026 Play_ type interface.\n\nThe standard Imagen images will come with the Hashicorp suite of tools,\nallowing for discovery and membership between the RPi devices.  To read more\nabout the images, visit the [Imagen](https://github.com/RobotStudio/imagen)\nGitHub page.\n\nIn this setup, Choreo would _choreograph_ the entities, both: software and\nhardware, into a cohesive solution.  With a web interface on the Gateway, and\nthe backend configuration deployed across the network using Consul, the robot\ncan then automatically assemble and integrate with cloud-based AI solutions\nwith minimal input from the user.\n\n\n# Contributing\n\nIn order to contribute, for the time being, please create an issue with what\nyou would like to see.  It's still pretty early in this project's initiation,\nso please be patient with us as we try to get the ball rolling.  Pull requests\nare welcome, but not advised unless you've already reached out to us.\n\n# Contact Us\n\nPlease contact me at the email [bobby _AT_ robot.studio](), [follow\nRobot Studio on Twitter](https://twitter.com/sokstherobot), or submit an issue on the GitHub\nproject page for the associated project that you would like to speak about.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobotstudio%2Fchoreo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobotstudio%2Fchoreo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobotstudio%2Fchoreo/lists"}