Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
82bd132
clean and add humble harmonic simulation
rafa-martin Aug 25, 2025
a93d073
add documentation
rafa-martin Aug 25, 2025
6290aec
update doc
rafa-martin Aug 25, 2025
a32d00b
add debs for controllers
rafa-martin Aug 25, 2025
cbb310c
added bridge dynamic and refactor harmonic
albertmg2023 Aug 27, 2025
875d8ed
add hook
albertmg2023 Aug 28, 2025
27248f8
update doc
albertmg2023 Aug 28, 2025
6b706f0
added controller configs
albertmg2023 Aug 28, 2025
9a9ddc5
update doc
albertmg2023 Aug 28, 2025
5ab5571
add rbficus, rbsummit_steel, rbwatcher
albertmg2023 Aug 29, 2025
a9cbfca
add: repositories
rafa-martin Sep 1, 2025
82a49df
fix: Rename robot rbficus as rbfiqus
RomanRobotnik Sep 11, 2025
93c333c
feat: Update readme to add rbwatcher and rbfiqus & examples
RomanRobotnik Sep 11, 2025
3e1f5ef
feat: Add joint trajectory controller for RB-WATCHER PTZ camera
RomanRobotnik Sep 11, 2025
72c03b6
feat: Add top PTZ camera to robot spawn launch configuration
RomanRobotnik Sep 11, 2025
5fbde83
Enhance robot spawner 2 extract controllers from control.yaml
RomanRobotnik Sep 11, 2025
bb95546
Update README to remove 'has_arm' no needed anymore
RomanRobotnik Sep 11, 2025
9aa1a58
Bump to version 1.0.0
RomanRobotnik Sep 11, 2025
8568c3a
Update robotnik_gazebo_ignition/launch/spawn_robot.launch.py
rafa-martin Sep 11, 2025
208f318
feat: Create new add_depth_camera funtion into robot spawner
RomanRobotnik Sep 12, 2025
4a48e65
Fix: rbtheron/ros2_control.yaml left motor limits
RomanRobotnik Sep 12, 2025
442bf61
Update repo packages versions for jazzy
RomanRobotnik Sep 12, 2025
bdcaedd
Update repo packages versions for humble
RomanRobotnik Sep 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ target=/tmp/common.repo.yml,ro \
# Generate deb packages
RUN generate_debs.sh

RUN cp /home/robot/robot_ws/src/robotnik_simulation/debs/*.deb /home/robot/robot_ws/debs
RUN cp /home/robot/robot_ws/src/robotnik_simulation/debs/ros-${ROS_DISTRO}-*.deb /home/robot/robot_ws/debs
WORKDIR /home/robot/robot_ws/debs
# Generate Packages.gz
RUN dpkg-scanpackages . | gzip -9c > Packages.gz
Expand Down
40 changes: 27 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@


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

<br />
<div align="center">
Expand Down Expand Up @@ -145,7 +145,7 @@ Then continue with the installation of packages.
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/*.deb
sudo apt-get install -y ./debs/ros-${ROS_DISTRO}-*.deb
```

Install missing dependencies with rosdep:
Expand Down Expand Up @@ -208,7 +208,6 @@ Once you have the simulation running, you can spawn the robot in the world. For
| x | 0.0 | position x in the Gazebo world to spawn the robot |
| y | 0.0 | position y in the Gazebo world to spawn the robot |
| z | 0.0 | position z in the Gazebo world to spawn the robot |
| has_arm | false | If the robot has arm or not to initilize joint_trajectory_controller |

With 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 it.

Expand All @@ -219,25 +218,35 @@ Available robots
- rbsummit
- rbkairos
- rbrobout
- rbwatcher
- rbfiqus

Available robot_model

- rbkairos_plus
- rbrobout_plus

Example:
Examples:
```sh
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbvogui
```

In case that your robot has a variation (check robots folder in robotnik_description package), you can select it by the argument **robot_model**.
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbtheron

Example:
```sh
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbkairos robot_model:=rbkairos_plus has_arm:=true
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbsummit

ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbkairos robot_model:=rbkairos

ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbrobout robot_model:=rbrobout

ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbwatcher robot_model:=rbwatcher

ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbfiqus robot_model:=rbfiqus
```

Then, the arguments _x_, _y_ and _z_ selects the position respect the world frame to spawn the robot.
Additionally, the arguments _x_, _y_ and _z_ selects the position respect the world frame to spawn the robot.

In case that your robot has a variation (check robots folder in robotnik_description package), you can select it by the argument **robot_model**.


#### Control the robot

Expand Down Expand Up @@ -276,7 +285,12 @@ There are two mobile bases with a manipulator that can be used:
To use them launch the spawn of the robot as follows:

```sh
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbkairos robot_model:=rbkairos_plus has_arm:=true
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbkairos robot_model:=rbkairos_plus
```


```sh
ros2 launch robotnik_gazebo_ignition spawn_robot.launch.py robot:=rbrobout robot_model:=rbrobout_plus
```

The arm has a joint_trajectory_controller configured that can be used with rqt_joint_trajectory_controller:
Expand All @@ -290,7 +304,7 @@ ros2 run rqt_joint_trajectory_controller rqt_joint_trajectory_controller --ros-a

#### Enjoy!

![rbvogui_gif](img/RBVogui_Docking.gif)
![rbvogui_gif](docs/assets/img/RBVogui_Docking.gif)

<p align="right">(<a href="#readme-top">back to top</a>)</p>

Expand Down Expand Up @@ -387,4 +401,4 @@ Project Link: [https://github.com/RobotnikAutomation](https://github.com/Robotni
[license-url]: https://github.com/RobotnikAutomation/robot_simulation/blob/master/LICENSE.txt
[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]: img/ignition_simulation_view.png
[product-screenshot]: docs/assets/img/ignition_simulation_view.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
86 changes: 86 additions & 0 deletions docs/gazebo-harmonic-humble.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Gazebo Harmonic - ROS2 Humble

This document provides a guide to using Robotnik Simulation with:
- Gazebo Harmonic
- ROS2 Humble.

This combination is tested and working follow the instructions below to set up your environment.

1. Install the required packages:

```bash
sudo apt-get update
sudo apt-get install curl lsb-release gnupg
```

2. Install Gazebo Harmonic

```bash
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
sudo apt-get update
sudo apt-get install gz-harmonic
```

3. Install Connect with ROS2

> **WARNING**: The package `ros-humble-ros-gzharmonic` conflicts with `ros-humble-ros-gz*`. Remove those packages before installing.

```bash
sudo apt-get remove ros-humble-ros-gz*
sudo apt-get install ros-humble-ros-gzharmonic
```

4. Clone source

```yaml
# dependencies.repos
gz_ros2_control:
type: git
url: https://github.com/ros-controls/gz_ros2_control.git
version: 0.7.16
visualization_tutorials:
type: git
url: https://github.com/ros-visualization/visualization_tutorials.git
version: b43b3f6a867b1d799af3edba673c56d37178e847 # ros2
robotnik_common:
type: git
url: https://github.com/RobotnikAutomation/robotnik_common.git
version: 1.2.0
robotnik_description:
type: git
url: https://github.com/RobotnikAutomation/robotnik_description.git
version: bacd4a4d3b2f021cdc5c4ac4f56585d15c54eaff # Waiting for upstream release
robotnik_interfaces:
type: git
url: https://github.com/RobotnikAutomation/robotnik_interfaces.git
version: 1.1.0
robotnik_sensors:
type: git
url: https://github.com/RobotnikAutomation/robotnik_sensors.git
version: faaab6e1db429a6708c65d7311b148bba592fd1a # humble-devel
robotnik_simulation:
type: git
url: https://github.com/RobotnikAutomation/robotnik_simulation.git
version: jazzy-devel # Latest version
```

```bash
vcs import --input-file dependencies.repos src
```

5. Install dependencies

```bash
sudo apt-get update
cd robotnik_simulation
sudo apt-get install -y ./debs/ros-${ROS_DISTRO}-*.deb
rosdep install --from-paths src --ignore-src -r -y
```

6. Compile workspace

```bash
export GZ_VERSION=harmonic
colcon build --symlink-install
```
22 changes: 4 additions & 18 deletions robotnik_gazebo_ignition/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,21 @@
cmake_minimum_required(VERSION 3.8)
project(robotnik_gazebo_ignition)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

ament_environment_hooks("${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.sh.in")

if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
# comment the line when a copyright and license is added to all source files
set(ament_cmake_copyright_FOUND TRUE)
# the following line skips cpplint (only works in a git repo)
# comment the line when this package is in a git repo and when
# a copyright and license is added to all source files
set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()

# Install launch files
install(DIRECTORY
launch
config
worlds
install(
DIRECTORY config launch worlds
DESTINATION share/${PROJECT_NAME}/
)


ament_package()
75 changes: 75 additions & 0 deletions robotnik_gazebo_ignition/config/profile/rb1/ros2_control.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
/**:
robotnik_base_control:
ros__parameters:
publish_rate: 50

# General Params
profile: base
debug: true
open_loop: true

# Timeouts
joint_command_timeout: 0.1
cmd_vel_timeout: 2.0

# Odom
odom_frame_id: $(var frame_prefix)odom
base_frame_id: $(var frame_prefix)base_footprint
set_odometry_service: ~/set_odometry

# Kinematics Params
wheel_radius: 0.0703 # radius: 0.0703
track_width: 0.5032
wheel_base: 0.0
max_steering_position_error: 0.3

# Topics
cmd_vel_topic: ~/cmd_vel_unstamped
odom_topic: ~/odom
imu_topic: imu/data
emergency_topic: robotnik_base_hw/emergency_stop
joint_control_topic: ~/joint_control_command

# RBTheron Controller Params

#Cartesian and wheels limits
base:
linear:
x:
velocity:
min: -1.2
max: 1.2
acceleration:
min: -100.0
max: 100.0
angular:
z:
velocity:
min: -1.5
max: 1.5
acceleration:
min: -30.0
max: 30.0

right:
traction:
joint_name: $(var frame_prefix)right_wheel_joint
limits:
velocity:
min: -27.7
max: 27.7
acceleration:
min: -10.0
max: 10.0

left:
traction:
joint_name: $(var frame_prefix)left_wheel_joint
limits:
velocity:
min: -270.7
max: 270.7
acceleration:
min: -10.0
max: 10.0
Loading