diff --git a/README.md b/README.md index 3bdb9a4..21c98cc 100644 --- a/README.md +++ b/README.md @@ -1,292 +1,77 @@ - - - - [![Contributors][contributors-shield]][contributors-url] [![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] -[![Unlicense License][license-shield]][license-url] +[![License][license-shield]][license-url] [![LinkedIn][linkedin-shield]][linkedin-url] +

+ Robotnik logo +

- -![Logo Robotnik](./docs/assets/img/LOGO%20BLANCO-ROJO.png) - -
-
-======= - -

robot_simulation

- -

- Simulation of Robotnik Automation robots in ROS2! -
- Explore the docs ยป -
-
- View Demo - · - Report Bug - · - Request Feature -

-
- - - - -
- Table of Contents -
    -
  1. - About The Project -
  2. -
  3. - Getting Started - -
  4. -
  5. - Usage - -
  6. -
  7. - Custom Simulation - -
  8. -
  9. Roadmap
  10. -
  11. Contributing
  12. -
  13. License
  14. -
  15. Contact
  16. -
-
- - - - -## About The Project - -[![Simulation View][product-screenshot]](https://github.com/RobotnikAutomation/robot_simulation) - -This package will combine the different Robotnik packages in ROS2 to simulate the robots in the different available platforms, as Gazebo Sim 8.9.0, etc. - -This README will guide you to the simulation usage and the custom simulations that you can build for your own projects. - - - -

(back to top)

- - -## Getting Started - -This package works with the different packages that Robotnik developed for the robots. You will need to install some of these packages first. - -### Prerequisites - -#### - Gazebo Sim 8.9.0 -#### - ROS2 Jazzy - -First, be sure that you have all the [Gazebo packages](https://gazebosim.org/docs/harmonic/install_ubuntu/) installed for ROS2. - - -```sh -sudo apt install ros-jazzy-ros-gz -``` - -### Installation - -Then, let's procede with the installation of the Robotnik packages. -First, create the workspace to work with: - -``` -mkdir -p ~/ros2_ws/src -cd ~/ros2_ws/src/ -``` -Then continue with the installation of packages. - -1. [robotnik_description](https://github.com/RobotnikAutomation/robotnik_description/tree/jazzy-devel) -2. [robotnik_sensors](https://github.com/RobotnikAutomation/robotnik_sensors/tree/jazzy-devel) -3. [robotnik_common](https://github.com/RobotnikAutomation/robotnik_common) -4. [robotnik_interfaces](https://github.com/RobotnikAutomation/robotnik_interfaces) -5. [ur_description](https://github.com/RobotnikAutomation/Universal_Robots_ROS2_Description/tree/fix/gazebo-control-jazzy#) -6. [robotnik_simulation](https://github.com/RobotnikAutomation/robotnik_simulation.git#) - - ```sh - git clone https://github.com/RobotnikAutomation/robotnik_description.git -b jazzy-devel - - git clone https://github.com/RobotnikAutomation/robotnik_sensors.git -b jazzy-devel - - git clone https://github.com/RobotnikAutomation/robotnik_common.git -b ros2-devel - - git clone https://github.com/RobotnikAutomation/robotnik_interfaces.git -b jazzy-devel - - git clone https://github.com/RobotnikAutomation/Universal_Robots_ROS2_Description.git -b fix/gazebo-control-jazzy - - git clone https://github.com/RobotnikAutomation/robotnik_simulation.git -b jazzy-devel - - ``` - -Install precompiled debs for simulation. Please, change directory to the root of the repository and run the following command: +

-```sh -sudo apt-get install -y ./debs/ros-${ROS_DISTRO}-*.deb -``` +## Overview +Simulation-based environments and launch assets for Robotnik platforms on ROS 2. -Install missing dependencies with rosdep: -```sh -cd ~/ros2_ws -rosdep update -rosdep install --from-paths src --ignore-src -r -y -``` +

+ RBVogui Docking Simulation +

-Finally, compile workspace: -``` -source /opt/ros/jazzy/setup.bash -cd ~/ros2_ws && colcon build -source install/setup.bash -``` +## Supported Robots +| Robot | Robot Model | Kinematics | Photos | +|-------|-------------|------------|-------| +| [RB-Watcher](https://robotnik.eu/robotnik-robots/rb-watcher/) | rbwatcher | `skid-steering` | RB-Watcher | +| [RB-Summit-XL](https://robotnik.eu/products/mobile-robots/rb-summit/) | rbsummit | `skid-steering` | RB-Summit-XL | +| [RB-Vogui](https://robotnik.eu/robotnik-robots/rb-vogui/) | rbvogui, rbvogui_plus | `omni-directional`, `ackermann` | RB-Vogui | +| [RB-Vogui-XL](https://robotnik.eu/robotnik-robots/rb-vogui-xl/) | rbvogui_xl | `omni-directional`, `ackermann` | RB-Vogui-XL | +| [RB-Fiqus](https://robotnik.eu/robotnik-robots/rb-fiqus/) | rbfiqus | `omni-directional`, `ackermann` | RB-Fiqus | +| [RB-Kairos](https://robotnik.eu/robotnik-robots/rb-kairos/) | rbkairos, rbkairos_plus | `omni-directional` | RB-Kairos | +| [RB-Robout](https://robotnik.eu/robotnik-robots/rb-robout/) | rbrobout, rbrobout_plus | `omni-directional` | RB-Robout | +| [RB-1](https://robotnik.eu/robotnik-robots/rb-1/) | rb1 | `differential` | RB-1 | +| [RB-Theron](https://robotnik.eu/robotnik-robots/rb-theron/) | rbtheron, rbtheron_plus | `differential` | RB-Theron | -

(back to top)

-## Docker -If you want to use Docker, you can use the docker-compose file that is in the root of the repository. This will create a container with all the dependencies installed and ready to use. +## Available Simulators -To start the containers, run the following command: +| Simulator | Package | Instructions | +|-----------|---------|--------------| +| Gazebo Logo | `robotnik_gazebo_ignition` | [README](robotnik_gazebo_ignition/README.md) | -```sh -docker compose up -``` -This will build a robotnik_simulator image the first time you run it. After that, it will use the cached image. - -### Setup -You can configure the simulation based on docker images editing the environment in the env/robot.env file. You will need to uncomment the specific variables related to desired robot to simulate and comment or delete the others. - -Make sure that the environment variables (ROBOT, ROBOT_MODEL, HAS_ARM) are set correctly before running the containers. - -

(back to top)

- - -## Usage - -See each package for more details. - -- [robotnik_gazebo_ignition](robotnik_gazebo_ignition/README.md) - - -#### Enjoy! - -![rbvogui_gif](docs/assets/img/RBVogui_Docking.gif) - -

(back to top)

- - - -## Custom Simulation - -In case that the robot model that you want to simulate is not in robotnik_description package, or the world, or you want to use a different controller, you will have to create your own simulaiton files. - -This will guide you to create your custom simulation. - -### Custom Robot Model - -1. First, create your own package for the project. -2. In this package, create your URDF file. You can base in the [template file](robotnik_pkgs/robotnik_description/robots/robot_template.urdf.xacro) that are in robotnik_description package. -3. In the README of [robotnik_description](robotnik_pkgs/robotnik_description/README.md) there is a brief descripiton on how to create a robot. -4. On this file you can modify and add all the sensors, arms and any other component. -5. Then, launch the spawn_robot with the argument _robot_xacro_path_. - -### Custom Control - -In case that you want to modify the velocity, topics, frames and everything related to the control, you can find the files in [robotnik_gazebo_ignition/config folder](robotnik_gazebo_ignition/config/). -There is a file for each robot that you can modify. - -### Custom world - -To launch a custom file, you can use the _world_path_ argument that it's in the spawn_world launch. See Launch Gazebo. - - -## Roadmap - -- [x] Add Gazebo Ignition -- [ ] Add more worlds -- [ ] Add multi robot support - -See the [open issues](https://github.com/RobotnikAutomation/robot_simulation/issues) for a full list of proposed features (and known issues). - -

(back to top)

- - - - ## Contributing -Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. +Contributions are welcome. -If 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". -Don't forget to give the project a star! Thanks again! +1. Fork the repository +2. Create a feature branch: `git checkout -b feature/jazzy/AmazingFeature` +3. Commit: `git commit -m "Add AmazingFeature"` +4. Push: `git push origin feature/AmazingFeature` +5. Open a PR and describe your changes -1. Fork the Project -2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -4. Push to the Branch (`git push origin feature/AmazingFeature`) -5. Open a Pull Request -### Top contributors: +Special thanks to all contributors! - - contrib.rocks image + + Contributors graph -

(back to top)

- - - - ## License -Distributed under the Unlicense License. See `LICENSE.txt` for more information. - -

(back to top)

- - - - -## Contact - -Project Link: [https://github.com/RobotnikAutomation](https://github.com/RobotnikAutomation) - -

(back to top)

+Distributed under **BSD-3**. See [`LICENSE`][license-url]. + - - -[contributors-shield]: https://img.shields.io/github/contributors/RobotnikAutomation/robot_simulation.svg?style=for-the-badge -[contributors-url]: https://github.com/RobotnikAutomation/robot_simulation/graphs/contributors -[forks-shield]: https://img.shields.io/github/forks/RobotnikAutomation/robot_simulation.svg?style=for-the-badge -[forks-url]: https://github.com/RobotnikAutomation/robot_simulation/network/members -[stars-shield]: https://img.shields.io/github/stars/RobotnikAutomation/robot_simulation.svg?style=for-the-badge -[stars-url]: https://github.com/RobotnikAutomation/robot_simulation/stargazers -[issues-shield]: https://img.shields.io/github/issues/RobotnikAutomation/robot_simulation.svg?style=for-the-badge -[issues-url]: https://github.com/RobotnikAutomation/robot_simulation/issues -[license-shield]: https://img.shields.io/github/license/RobotnikAutomation/robot_simulation.svg?style=for-the-badge -[license-url]: https://github.com/RobotnikAutomation/robot_simulation/blob/master/LICENSE.txt +[contributors-shield]: https://img.shields.io/github/contributors/RobotnikAutomation/robotnik_simulation.svg?style=for-the-badge +[contributors-url]: https://github.com/RobotnikAutomation/robotnik_simulation/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/RobotnikAutomation/robotnik_simulation.svg?style=for-the-badge +[forks-url]: https://github.com/RobotnikAutomation/robotnik_simulation/network/members +[stars-shield]: https://img.shields.io/github/stars/RobotnikAutomation/robotnik_simulation.svg?style=for-the-badge +[stars-url]: https://github.com/RobotnikAutomation/robotnik_simulation/stargazers +[issues-shield]: https://img.shields.io/github/issues/RobotnikAutomation/robotnik_simulation.svg?style=for-the-badge +[issues-url]: https://github.com/RobotnikAutomation/robotnik_simulation/issues +[license-shield]: https://img.shields.io/github/license/RobotnikAutomation/robotnik_simulation.svg?style=for-the-badge +[license-url]: LICENSE [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 [linkedin-url]: https://www.linkedin.com/company/robotnik-automation/ [product-screenshot]: docs/assets/img/ignition_simulation_view.png diff --git a/img/LOGO BLANCO-ROJO.png b/docs/assets/img/LOGO BLANCO-ROJO.png similarity index 100% rename from img/LOGO BLANCO-ROJO.png rename to docs/assets/img/LOGO BLANCO-ROJO.png diff --git a/img/RBVogui_Docking.gif b/docs/assets/img/RBVogui_Docking.gif similarity index 100% rename from img/RBVogui_Docking.gif rename to docs/assets/img/RBVogui_Docking.gif diff --git a/docs/assets/img/gazebo-logo.png b/docs/assets/img/gazebo-logo.png new file mode 100644 index 0000000..bfdb835 Binary files /dev/null and b/docs/assets/img/gazebo-logo.png differ diff --git a/img/ignition_simulation_view.png b/docs/assets/img/ignition_simulation_view.png similarity index 100% rename from img/ignition_simulation_view.png rename to docs/assets/img/ignition_simulation_view.png diff --git a/docs/assets/img/rb-watcher_gazebo.png b/docs/assets/img/rb-watcher_gazebo.png new file mode 100644 index 0000000..aca5d6a Binary files /dev/null and b/docs/assets/img/rb-watcher_gazebo.png differ diff --git a/docs/assets/img/robotnik-logo.png b/docs/assets/img/robotnik-logo.png new file mode 100644 index 0000000..8ab83e4 Binary files /dev/null and b/docs/assets/img/robotnik-logo.png differ diff --git a/img/robotnik_simulation_structure.png b/docs/assets/img/robotnik_simulation_structure.png similarity index 100% rename from img/robotnik_simulation_structure.png rename to docs/assets/img/robotnik_simulation_structure.png diff --git a/img/simulation_view.png b/docs/assets/img/simulation_view.png similarity index 100% rename from img/simulation_view.png rename to docs/assets/img/simulation_view.png diff --git a/docs/assets/robots/rb-1.png b/docs/assets/robots/rb-1.png new file mode 100644 index 0000000..eb7df8f Binary files /dev/null and b/docs/assets/robots/rb-1.png differ diff --git a/docs/assets/robots/rb-fiqus.png b/docs/assets/robots/rb-fiqus.png new file mode 100644 index 0000000..79633c7 Binary files /dev/null and b/docs/assets/robots/rb-fiqus.png differ diff --git a/docs/assets/robots/rb-kairos-plus.png b/docs/assets/robots/rb-kairos-plus.png new file mode 100644 index 0000000..78aa785 Binary files /dev/null and b/docs/assets/robots/rb-kairos-plus.png differ diff --git a/docs/assets/robots/rb-kairos.png b/docs/assets/robots/rb-kairos.png new file mode 100644 index 0000000..558b157 Binary files /dev/null and b/docs/assets/robots/rb-kairos.png differ diff --git a/docs/assets/robots/rb-robout-plus.png b/docs/assets/robots/rb-robout-plus.png new file mode 100644 index 0000000..3f1fbc1 Binary files /dev/null and b/docs/assets/robots/rb-robout-plus.png differ diff --git a/docs/assets/robots/rb-robout.png b/docs/assets/robots/rb-robout.png new file mode 100644 index 0000000..b01db45 Binary files /dev/null and b/docs/assets/robots/rb-robout.png differ diff --git a/docs/assets/robots/rb-summit-xl.png b/docs/assets/robots/rb-summit-xl.png new file mode 100644 index 0000000..f52474e Binary files /dev/null and b/docs/assets/robots/rb-summit-xl.png differ diff --git a/docs/assets/robots/rb-theron.png b/docs/assets/robots/rb-theron.png new file mode 100644 index 0000000..fef9ffd Binary files /dev/null and b/docs/assets/robots/rb-theron.png differ diff --git a/docs/assets/robots/rb-vogui-plus.png b/docs/assets/robots/rb-vogui-plus.png new file mode 100644 index 0000000..f9c485b Binary files /dev/null and b/docs/assets/robots/rb-vogui-plus.png differ diff --git a/docs/assets/robots/rb-vogui-xl.png b/docs/assets/robots/rb-vogui-xl.png new file mode 100644 index 0000000..f22a91a Binary files /dev/null and b/docs/assets/robots/rb-vogui-xl.png differ diff --git a/docs/assets/robots/rb-vogui.png b/docs/assets/robots/rb-vogui.png new file mode 100644 index 0000000..b52790f Binary files /dev/null and b/docs/assets/robots/rb-vogui.png differ diff --git a/docs/assets/robots/rb-watcher.png b/docs/assets/robots/rb-watcher.png new file mode 100644 index 0000000..eb5775e Binary files /dev/null and b/docs/assets/robots/rb-watcher.png differ diff --git a/docs/assets/world/demo.png b/docs/assets/world/demo.png new file mode 100644 index 0000000..dbfa6e1 Binary files /dev/null and b/docs/assets/world/demo.png differ diff --git a/docs/assets/world/empty.png b/docs/assets/world/empty.png new file mode 100644 index 0000000..7d7fcb3 Binary files /dev/null and b/docs/assets/world/empty.png differ diff --git a/docs/assets/world/ionic.png b/docs/assets/world/ionic.png new file mode 100644 index 0000000..6e39751 Binary files /dev/null and b/docs/assets/world/ionic.png differ diff --git a/docs/assets/world/lightweight_scene.png b/docs/assets/world/lightweight_scene.png new file mode 100644 index 0000000..283d9bd Binary files /dev/null and b/docs/assets/world/lightweight_scene.png differ diff --git a/robotnik_gazebo_ignition/README.md b/robotnik_gazebo_ignition/README.md index 34cb60f..cf8b08a 100644 --- a/robotnik_gazebo_ignition/README.md +++ b/robotnik_gazebo_ignition/README.md @@ -1,57 +1,153 @@ # Robotnik Gazebo Ignition +Robotnik Gazebo Ignition Simulation View + This package provides Gazebo Ignition plugins and resources for Robotnik robots. -## Launch Gazebo +## ๐Ÿ“ฅ Installation + +1. Setup sources and keys for Gazebo packages: +```sh +sudo apt update +sudo apt-get install curl lsb-release gnupg +sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null +``` + +2. Install Gazebo Harmonic. +```sh +sudo apt-get update +sudo apt-get install gz-harmonic +``` + +3. Install ROS 2 Jazzy and ROS-GZ bridge. +```sh +sudo apt install ros-jazzy-ros-gz +``` + +4. Set up workspace and install dependencies: + +```sh +# Workspace +mkdir -p ~/ros2_ws/src +cd ~/ros2_ws + +# Robotnik and related packages (ROS 2 Jazzy) +vcs import --input https://raw.githubusercontent.com/RobotnikAutomation/robotnik_simulation/jazzy-devel/robotnik_simulation.jazzy.repos src/ + +# Install prebuilt simulation debs from this repo (run at repo root) +cd ~/ros2_ws/src/robotnik/robotnik_simulation +sudo apt-get install -y ./debs/ros-${ROS_DISTRO}-*.deb + +# Resolve dependencies +source /opt/ros/jazzy/setup.bash +cd ~/ros2_ws +rosdep update +rosdep install --from-paths src --ignore-src -r -y +``` -Fist step to use this simulation is launch world where the robot will be spawned. For example, to launch the `empty` world, use the following command: +5. Build the workspace: +```sh +cd ~/ros2_ws +colcon build --symlink-install +source install/setup.bash +``` + +## ๐Ÿš€ Usage + +To use the simulation, you need to spawn a world and then spawn at least one robot. Continue reading for instructions. + +### ๐Ÿ—บ๏ธ Spawn World + +First step to use this simulation is launch world where the robot will be spawned. For example, to launch the `empty` world, use the following command: + +#### Basic ```bash +# Basic ros2 launch robotnik_gazebo_ignition spawn_world.launch.py world:=empty + +# With GUI disabled +ros2 launch robotnik_gazebo_ignition spawn_world.launch.py world:=empty gui:=false ``` -Available worlds are located in the `worlds` folder of this package. You can replace `empty` with the name of any other world file (without the `.world` extension) to launch a different world. +#### Advanced +```bash +# Generic pattern +ros2 launch robotnik_gazebo_ignition spawn_world.launch.py world:= gui:= +``` -Also, you can enable or disable the Gazebo GUI by setting the `gui:=true` or `gui:=false` parameter. By default, the GUI is enabled. +#### Parameters +| Name | Required | Purpose | Example | +|---|---|---|---| +| `world` | no | Name of the world file (without the `.world` extension) | `empty` | +| `world_path` | no | Full path to a custom world file (overrides `world` parameter) | `/path/to/custom_world.sdf` | +| `gui` | no | Enable or disable Gazebo GUI | `true` or `false` | -## Spawn Robot +#### Supported Worlds + +| Name | Description | Thumbnail | +|------|-------------|-----------| +| `empty` | An empty world with a flat ground plane | empty_world | +| `demo` | A demo world with obstacles and ramps for testing robot navigation | demo_world | +| `ionic` | Demo world from Gazebo to show ionic simulation features | ionic_world | +| `lightweight_scene` | A lightweight scene for performance testing | lightweight_scene_world | + + +### ๐Ÿค– Spawn Robot Use the launch file to insert a robot into the Gazebo (Ignition) world. -### Basic +#### Basic ```bash +# Basic RB-Watcher ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbwatcher -``` -### Advanced -```bash # Specific ID and pose ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot_id:=robot_a robot:=rbwatcher robot_model:=rbwatcher x:=0.0 y:=0.0 z:=0.0 run_rviz:=true ``` +#### Advanced ```bash # Generic pattern ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot_id:= robot:= robot_model:= x:= y:= z:= ``` -### Parameters +#### Parameters | Name | Required | Purpose | Example | |---|---|---|---| | `robot_id` | no | Instance name for the spawned robot | `robot_a` | -| `robot` | yes | Robot **type** to spawn | `rbwatcher` | -| `robot_model` | no | Specific **model** within the type | `rbwatcher` | +| `robot` | yes | Robot **type** to spawn, see `supported_robots` | `rbwatcher` | +| `robot_model` | no | Specific **model** within the type, see `supported_robots` | `rbwatcher` | | `x` `y` `z` | no | Spawn position in meters | `0.0 0.0 0.0` | | `run_rviz` | no | Launch RViz2 with a predefined configuration | `true` or `false` | -### Types vs. models +#### Supported Robots + +| robot | robot_model options | Notes | +| -------------- | ----------------------- | --- | +| rbwatcher | rbwatcher | Supported | +| rb1 | rb1 | Limited | +| rbfiqus | rbfiqus | Limited | +| rbkairos | rbkairos, rbkairos_plus | Limited | +| rbrobout | rbrobout, rbrobout_plus | Limited | +| rbsummit | rbsummit | Limited | +| rbsummit_steel | rbsummit_steel | Limited | +| rbtheron | rbtheron, rbtheron_plus | Limited | +| rbvogui | rbvogui, rbvogui_plus | Limited | +| rbvogui_xl | rbvogui_xl | Limited | + +Note: "not well tested" means that the robot has been integrated but may require further validation and adjustments to ensure optimal performance in the simulation environment. + +#### Types vs. models Description package is [robotnik_description](https://github.com/RobotnikAutomation/robotnik_description), which contains all robot types and models. The distinction is: - **Robot type**: Category such as `rbwatcher`, `summit_xl`. See the package `robots/` folder for available types. [List of supported robots](https://github.com/RobotnikAutomation/robotnik_description/tree/jazzy-devel/robots). - **Robot model**: Concrete variant inside a type. If omitted, the default model for that type is used. See the package `robots//models/` folder for available models. [Example models for rbwatcher](https://github.com/RobotnikAutomation/robotnik_description/tree/jazzy-devel/robots/rbwatcher). -### Notes -- Use a unique `robot_id` when spawning multiple robots. +#### Notes +- Use a unique `robot_id` when spawning multiple robots in the same world to avoid name conflicts in topics and frames. -## Control the Robot +## ๐ŸŽฎ Control the Robot After spawning the robot, you can control it using command velocity messages. The two main topics for controlling the robot are: - `//robotnik_base_control/cmd_vel`: This topic is used to send velocity commands to the robot. The messages should be of type `geometry_msgs/msg/TwistStamped`. @@ -69,3 +165,39 @@ ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=/rob Make sure to replace `/robot/robotnik_base_control/cmd_vel` with the appropriate topic name based on the `robot_id` you used when spawning the robot. Also, you can use RViz plugin on the bottom right to control the robot by clicking on the arrows. + +## ๐ŸŽ‰ Enjoy + +Example of RBVogui executing docking procedure in Gazebo Ignition. Currently, only for demonstration purposes, no docking controller is provided. + +![rbvogui_gif](../docs/assets/img/RBVogui_Docking.gif) + +## Customization + +### Edit robot model + +Specific robot models can be customized by creating your own URDF/XACRO files based on the existing ones in the `robotnik_description` package. + +1. Copy the existing robot folder from `robotnik_description/robots//` to a new folder, e.g., `robotnik_description/robots/my_robot/`. +2. Modify the URDF/XACRO files in the new folder to add or change components as needed. +3. Update any necessary configuration files for sensors, arms, or other components. +4. Spawn the customized robot using the `robot_xacro_path` parameter: + +```sh +ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot_xacro_path:= +``` + +### Custom control configuration + +Inside the simulation package `robotnik_gazebo_ignition/config/profile`, you can find different control profiles for various Robotnik robots. You can adjust topics, frames, velocities, and controllers there. + +## ๐Ÿณ Docker +๐Ÿšง Work in progress. ๐Ÿšง + +Use the compose file in the repo root to run a preconfigured simulator container. + +```sh +docker compose up +``` + +> **Note**: The first time will take a while as it builds the image. Subsequent runs will be faster.