{"id":23458180,"url":"https://github.com/RobotnikAutomation/robotnik_simulation","last_synced_at":"2025-10-30T21:31:28.443Z","repository":{"id":268906150,"uuid":"905807875","full_name":"RobotnikAutomation/robot_simulation","owner":"RobotnikAutomation","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-03T17:53:07.000Z","size":1388,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-03T18:47:10.432Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/RobotnikAutomation.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":"2024-12-19T15:04:05.000Z","updated_at":"2025-02-03T17:57:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"9332f3f5-5303-4972-b550-b857e7e9d2b6","html_url":"https://github.com/RobotnikAutomation/robot_simulation","commit_stats":null,"previous_names":["robotnikautomation/robot_simulation"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotnikAutomation%2Frobot_simulation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotnikAutomation%2Frobot_simulation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotnikAutomation%2Frobot_simulation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobotnikAutomation%2Frobot_simulation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RobotnikAutomation","download_url":"https://codeload.github.com/RobotnikAutomation/robot_simulation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239066608,"owners_count":19575904,"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":[],"created_at":"2024-12-24T05:17:10.775Z","updated_at":"2025-10-30T21:31:23.184Z","avatar_url":"https://github.com/RobotnikAutomation.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca id=\"readme-top\"\u003e\u003c/a\u003e\n\n\n\u003c!-- PROJECT SHIELDS --\u003e\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\u003c!-- [![Unlicense License][license-shield]][license-url] --\u003e\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/RobotnikAutomation/robot_simulation\"\u003e\n    \u003cimg src=\"img/LOGO BLANCO-ROJO.png\" alt=\"Logo\"\u003e\n  \u003c/a\u003e\n=======\n\n  \u003ch3 align=\"center\"\u003erobot_simulation\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Simulation of Robotnik Automation robots in ROS2!\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/RobotnikAutomation/robot_simulation\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"#enjoy\"\u003eView Demo\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/RobotnikAutomation/robot_simulation/issues/new?labels=bug\u0026template=bug-report---.md\"\u003eReport Bug\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/RobotnikAutomation/robot_simulation/issues/new?labels=enhancement\u0026template=feature-request---.md\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n            \u003ca href=\"#gazebo-classic\"\u003eGazebo Classic\u003c/a\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"#launch-gazebo\"\u003eLaunch Gazebo\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#spawn-robot\"\u003eSpawn Robot\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#control-the-robot\"\u003eControl the Robot\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003ca href=\"#custom-simulation\"\u003eCustom Simulation\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#custom-robot-model\"\u003eCustom Robot Model\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#custom-world\"\u003eCustom World\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#custom-control\"\u003eCustom Control\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\n[![Simulation View][product-screenshot]](https://github.com/RobotnikAutomation/robot_simulation)\n\nThis package will combine the different Robotnik packages in ROS2 to simulate the robots in the different available platforms, as Gazebo Classic, Gazebo Ignition, etc.\n\nThis README will guide you to the simulation usage and the custom simulations that you can build for your own projects.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\nThis package works with the different packages that Robotnik developed for the robots. You will need to install some of these packages first.\n\n### Prerequisites\n\nFirst, be sure that you have all the [Gazebo packages](https://classic.gazebosim.org/tutorials?tut=ros2_installing) installed for ROS2.\n\n```sh\nsudo apt install ros-humble-gazebo-ros-pkgs\n```\n\n### Installation\n\nThen, let's procede with the installation of the Robotnik packages.\n\n1. Init the submodules of this repository\n    ```sh\n    git submodule init \u0026\u0026 git submodule update\n    ```\n\n2. Install robotnik_controller dependencies\n   ```sh\n   sudo dpkg -i debs/*.deb\n   ```\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- USAGE EXAMPLES --\u003e\n## Usage\n\n### Gazebo Classic\n\n#### Launch Gazebo\n\nInit the Gazebo world by launching:\n\n```sh\nros2 launch robotnik_gazebo_classic spawn_world.launch.py\n```\n\nThere are some arguments that allows you to change the world, in case that you want to use a custom world.\n\n\n| Arguments  | Default    | Description                                                                                                 |\n|------------|------------|-------------------------------------------------------------------------------------------------------------|\n| world      | demo       | This arguments selects a world in  [ worlds ](robotnik_gazebo_classic/worlds/)  folder. |\n| world_path | demo.world | In the case that you have your own world to simulate, introduce the path to the world file.                 |.\n\nExample:\n```sh\nros2 launch robotnik_gazebo_classic spawn_world.launch.py world:=maze\n```\n\n\n#### Spawn Robot\n\nOnce you have the simulation running, you can spawn the robot in the world. For that, there is a launch file that starts all the nodes.\n\n```sh\nros2 launch robotnik_gazebo_classic spawn_robot.launch.py\n```\n| Arguments        | Default                      | Description                                                                                    |\n|------------------|------------------------------|------------------------------------------------------------------------------------------------|\n| namespace        | robot                        | namespace that will be in the nodes and topics and differenciate one robot entity from another |\n| robot            | rbkairos                     | robot type desired to be spawned                                                               |\n| robot_model      | _value of robot argument_              | robot_model variation of the robot type. For using this argument, robot has to be fulfilled    |\n| robot_xacro_path | rbkairos/rbkairos.urdf.xacro | path to a xacro model if it is not included in the robot_description package        |\n| x                | 0.0                          | position x in the Gazebo world to spawn the robot                                              |\n| y                | 0.0                          | position y in the Gazebo world to spawn the robot                                              |\n| z                | 0.0                          | position z in the Gazebo world to spawn the robot                                              |\n\nWith the arguments described above, the launcher creates the robot that you want in Gazebo. As default, it will spawn a RBKairos robot, but you can changed by:\n\n- rbvogui\n- rbtheron\n- rbsummit\n- rbkairos\n\nExample:\n```sh\nros2 launch robotnik_gazebo_classic spawn_robot.launch.py robot:=rbvogui\n```\n\nIn case that your robot has a variation (check [robots](robotnik_pkgs/robot_description/robots/) folder in robot_description package), you can select it by the argument **robot_model**.\n\nExample:\n```sh\nros2 launch robotnik_gazebo_classic spawn_robot.launch.py robot:=rbkairos robot_model:=rbkairos_ur\n```\n\nThen, the arguments _x_, _y_ and _z_ selects the position respect the world frame to spawn the robot.\n\n#### Control the robot\n\nAll the controllers for the robots work with a Twist topic called /namespace/robotnik_base_controller/cmd_vel, the default topic is:\n\n```sh\n/robot/robotnik_base_controller/cmd_vel\n```\n\nThis topic will move the robot acsording to the velocity demanded but it can be also controller by joint commands, using the topic:\n\n```sh\n/robot/robotnik_base_controller/joint_control_command\n```\n\nThis topic is from type sensor_msgs/msg/JointState.\n\nI recommend to use teleop_twist_keyboard to control by cmd_vel:\n\n```sh\nros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-arg cmd_vel:=/robot/robotnik_base_controller/cmd_vel\n```\n#### Enjoy!\n\n![rbvogui_gif](img/RBVogui_Docking.gif)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- CUSTOMIZATION --\u003e\n## Custom Simulation\n\nIn case that the robot model that you want to simulate is not in robot_description package, or the world, or you want to use a different controller, you will have to create your own simulaiton files.\n\nThis will guide you to create your custom simulation.\n\n### Custom Robot Model\n\n1. First, create your own package for the project.\n2. In this package, create your URDF file. You can base in the [template file](robotnik_pkgs/robot_description/robots/robot_template.urdf.xacro) that are in robot_description package.\n3. In the README of [robot_description](robotnik_pkgs/robot_description/README.md) there is a brief descripiton on how to create a robot.\n4. On this file you can modify and add all the sensors, arms and any other component.\n5. Then, launch the spawn_robot with the argument _robot_xacro_path_.\n\n### Custom Control\n\nIn case that you want to modify the velocity, topics, frames and everything related to the control, you can find the files in [robotnik_gazebo_classic/config folder](robotnik_gazebo_classic/config/).\nThere is a file for each robot that you can modify.\n\n### Custom world\n\nTo launch a custom file, you can use the _world_path_ argument that it's in the spawn_world launch. See \u003ca href=\"#launch-gazebo\"\u003eLaunch Gazebo\u003c/a\u003e.\n\n\u003c!-- ROADMAP --\u003e\n## Roadmap\n\n- [x] Add Gazebo Classic\n- [ ] Add Gazebo Ignition\n- [ ] Add more worlds\n- [ ] Add multi robot support\n\nSee the [open issues](https://github.com/RobotnikAutomation/robot_simulation/issues) for a full list of proposed features (and known issues).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n### Top contributors:\n\n\u003ca href=\"https://github.com/RobotnikAutomation/robot_simulation/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=RobotnikAutomation/robot_simulation\" alt=\"contrib.rocks image\" /\u003e\n\u003c/a\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the Unlicense License. See `LICENSE.txt` for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nProject Link: [https://github.com/RobotnikAutomation](https://github.com/RobotnikAutomation)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/RobotnikAutomation/robot_simulation.svg?style=for-the-badge\n[contributors-url]: https://github.com/RobotnikAutomation/robot_simulation/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/RobotnikAutomation/robot_simulation.svg?style=for-the-badge\n[forks-url]: https://github.com/RobotnikAutomation/robot_simulation/network/members\n[stars-shield]: https://img.shields.io/github/stars/RobotnikAutomation/robot_simulation.svg?style=for-the-badge\n[stars-url]: https://github.com/RobotnikAutomation/robot_simulation/stargazers\n[issues-shield]: https://img.shields.io/github/issues/RobotnikAutomation/robot_simulation.svg?style=for-the-badge\n[issues-url]: https://github.com/RobotnikAutomation/robot_simulation/issues\n[license-shield]: https://img.shields.io/github/license/RobotnikAutomation/robot_simulation.svg?style=for-the-badge\n[license-url]: https://github.com/RobotnikAutomation/robot_simulation/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://www.linkedin.com/company/robotnik-automation/\n[product-screenshot]: img/simulation_view.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRobotnikAutomation%2Frobotnik_simulation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRobotnikAutomation%2Frobotnik_simulation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRobotnikAutomation%2Frobotnik_simulation/lists"}