{"id":18457748,"url":"https://github.com/vertueux/smov","last_synced_at":"2025-04-08T05:33:40.732Z","repository":{"id":59855064,"uuid":"524624129","full_name":"vertueux/smov","owner":"vertueux","description":"4 legged extensible open source robot that uses ROS2. Built on top of a Spot Micro.","archived":false,"fork":false,"pushed_at":"2024-07-12T11:59:29.000Z","size":114243,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-23T06:51:08.222Z","etag":null,"topics":["collaborate","learn","raspberry-pi","robot","robotics","ros","ros2","spotmicro","ubuntu"],"latest_commit_sha":null,"homepage":"https://discord.gg/dHSsQbrBZv","language":"C++","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/vertueux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2022-08-14T09:19:28.000Z","updated_at":"2025-02-19T20:35:17.000Z","dependencies_parsed_at":"2023-01-19T17:32:52.984Z","dependency_job_id":"835919de-834f-4b7a-b1b0-1c29ae4a517b","html_url":"https://github.com/vertueux/smov","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/vertueux%2Fsmov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertueux%2Fsmov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertueux%2Fsmov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertueux%2Fsmov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vertueux","download_url":"https://codeload.github.com/vertueux/smov/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247785914,"owners_count":20995641,"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":["collaborate","learn","raspberry-pi","robot","robotics","ros","ros2","spotmicro","ubuntu"],"created_at":"2024-11-06T08:15:35.867Z","updated_at":"2025-04-08T05:33:35.719Z","avatar_url":"https://github.com/vertueux.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# smov ![SMOV Discord](https://img.shields.io/badge/Discord-server?style=social\u0026logo=discord\u0026label=SMOV\u0026link=https%3A%2F%2Fdiscord.gg%2F4m2SgCmWMr)\n\nROS2 packages for a 4 legged robot dog.\n\nhttps://github.com/user-attachments/assets/2a5840eb-2274-431f-872b-dec887a2a64b\n\n\u003e This video shows a use of the `walking_gait` package, which lets you control the robot using a keyboard (to stand up, move forward, stop and possibly turn).\n\n* Click [here](assets/videos) to see more videos of the robot in action.\n\nSMOV can be seen as a starting point for entering the Spot Micro environment using [ROS2](https://www.ros.org/). This is a sort of layer that allows developers to build on top of it, as most packages only deal with controlling the board, LCD and servos, leaving a small SDK to allow the user to do what they want with their robot (motion, etc...).\n\nJoin the [Discord server](https://discord.com/invite/4m2SgCmWMr) to stay tuned.\n\n## Features\n\nControl of the robot is centralised in a single executable, the States package. This package, when running, listens to any message sent by a third-party package and applies it to the actual robot. In other words, this modular architecture makes it easy to control the robot and run any application.\n\nThe user can easily create another package, use the minimal SDK to control the servos through another executable, and choose what he wants his robot to do, without having to worry about numerical values, LCD control, etc...\nYou can create your own package to control the robot according to your needs. You might even be able to publish it and share it with your colleagues and other four-legged robot creators.\n\nYou can take a look at [the example](#example) and [demos](https://github.com/vertueux/smov_demos) to get a better idea.\n\n## Documentation\n\nYou can find the SMOV documentation in the [documentation/](documentation/) subdirectory.\n\nCheck out [documentation/README.md](documentation/README.md) for a quick overview.\n\nThe documentation is divided into several sections:\n\n* [Collect all the things](documentation/collect_all_the_things.md)\n* [Install ROS2](documentation/install_ros2.md)\n* [Install libraries](documentation/install_libraries.md)\n* [Configure ports](documentation/configure_ports.md)\n* [Build the project](documentation/build_the_project.md)\n* [Calibrate servos](documentation/calibrate_servos.md)\n* [Build a Spot Micro](documentation/build_a_spot_micro.md)\n* [Test demos](documentation/test_demos.md)\n* [Create your own State package](documentation/create_your_own_state_package.md)\n\n## Compatibility\n\nThis package is designed and tested to be compatible with ROS2 Humble and ROS2 Foxy running on a [Raspberry Pi](https://www.raspberrypi.com/). However, the project should be able to run on any platform that ROS2 supports.\n\u003e **Note**: x86_64 systems may not be supported as this project has been designed to run on a Raspberry Pi.\n\n| Platform | Hardware                                                                                                                                                                                                | Software                                                       | Notes                                                                                                                                                                                                                                                                                                                                                       |\n| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |\n| Raspberry Pi   | Pi 3 Model B+\u003cbr/\u003e Pi 4 Model B\u003cbr/\u003e | [Ubuntu 22.04 LTS](https://ubuntu.com/download/raspberry-pi)\u003cbr/\u003e [Ubuntu 20.04 LTS](https://ubuntu.com/download/raspberry-pi) | For the time being, the project is only being tested on the Raspberry Pi 3 Model B+ and the Raspberry Pi 4 Model B, but it should be possible to run it on other Raspberry Pis. |\n\n## Example\n\nHere's a simple example showing how the minimal SDK work, inspired by the [State template](https://github.com/vertueux/smov_state):\n\n```cpp\n#include \u003csmov/base.h\u003e\n#include \u003ctemplate/template.h\u003e\n\nvoid State::on_start() {\n  smov::delay(2000); // Delay of 2 seconds (2000ms).\n\n  // Set all servos to 60° angle.\n  for (int i = 0; i \u003c SERVO_MAX_SIZE; i++) {\n    front_servos.value[i] = 60.0f; \n    back_servos.value[i] = 60.0f;\n  }\n\n  // Then publishing to the States package to apply them to the real robot.\n  front_state_publisher-\u003epublish(front_servos);\n  back_state_publisher-\u003epublish(back_servos);\n\n  // You can end the program manually.\n  end_program();\n}\n// This is called every 500ms (But you can change the timeout at DECLARE_STATE_NODE_CLASS).\nvoid State::on_loop() {}\n\n// This is called when the program gets shutdown.\nvoid State::on_quit() {}\n\n// This macro creates the node and the main() input, which spins the node.\nDECLARE_STATE_NODE_CLASS(\"template_state\", State, 500ms)\n```\n\n## Contributing\n\nThere are many ways in which you can participate in this project, for example:\n\n* Submit bugs and feature requests\n* Review source code changes\n* Review the [documentation](documentation/README.md) and make pull requests for anything from typos to additional and new content\n\nTo be able to contribute, you need to take a look at [CONTRIBUTING.md](CONTRIBUTING.md) to find out the conditions.\n\n## Code of Conduct\n\nThis project has adopted a Code of Conduct adapted from the [Contributor Covenant](https://www.contributor-covenant.org) to maintain cohesion. Please read the [full text](CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated.\n\n## Links and References\n\n* The I²C PWM Board repository:\n  * [Click here](https://github.com/vertueux/i2c_pwm_board)\n* SMOV Demos repository:\n  * [Click here](https://github.com/vertueux/smov_demos)\n* SMOV State Template repository:\n  * [Click here](https://github.com/vertueux/smov_state)\n* Spot Micro AI's website:\n  * [Click here](https://spotmicroai.readthedocs.io/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvertueux%2Fsmov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvertueux%2Fsmov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvertueux%2Fsmov/lists"}