Skip to content
Snippets Groups Projects

Turtlebot3 ROS2 template

Preparing ROS workspaces and environment variables

rosenv alias (example in ros.sh) which activates preinstalled ros-base, gazebo-ros-pkgs, and turtlebot3 workspaces. If ros.sh is installed in /etc/profile.d then ros.sh will be automatically loaded everytime you open a terminal. Then you can type rosenv to activate the ROS environment in a new terminal.

Setting up your ROS_DOMAIN_ID, e.g., if multiple users are working on the same server. You can use set_my_ros_domain_id.sh for this. Generate a random id with make set_my_ros_domain_id.sh

Setup

Open three terminal windows for:

  1. running your ROS node
  2. writing code
  3. launching & monitoring Gazebo

1st window - running your ROS node

git clone https://mygit.th-deg.de/gaydos/tb3-ros2-template && cd tb3-ros2-template 
make  # creates a ROS package, builds it and links `tb3.py` to the file in `src/.../tb3.py` (creates a shortcut)
. ./set_my_ros_domain_id.sh  # sets a random `ROS_DOMAIN_ID`. Useful when multiple users are working on the same server
. ./install/local_setup.sh  # activate current workspace (you can also use `. ./load_workspace.sh`)

Then you can run your ROS node:

ros2 run my_pkg tb3  # (you can also use `./run.sh`)

This should at least output:

waiting for messages...

If the robot is already brought up, then you should also get LaserScan messages:

F: 0.5624107122421265
R: 0.3894226849079132
...

2nd window - writing code

Open tb3.py with your your favorite text editor, e.g., vim, Visual Studio Code (Code OSS)

3rd window - launching & monitoring Gazebo

rosenv
gazebo --verbose WORLD_FILE  # the world file can be e.g., world.sdf

Should output:

Gazebo multi-robot simulator, ...
...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
...
[Msg] Loading world file [/home/...]
...

And if you open a world with TB3 or add it manually:

[INFO] [1608802634.071946263] [gazebo_ros_node]: ROS was initialized without arguments.
...

After TB3 is instantiated, you should see LaserScan values in the first window

Notes

  • In Gazebo, use CTRL+r on Gazebo to restart the simulation. This way you do not have to close and open Gazebo

  • use CTRL+C to kill a command line process, e.g., your ROS program or non-responsive Gazebo

  • if you get the following error:

    [Err] ... EXCEPTION: Unable to start server[bind: Address already in use]. There is probably another Gazebo process running.

    then choose another port for Gazebo, e.g.:

    $ GAZEBO_MASTER_URI=:12346 gazebo --verbose challenge_2.sdf
  • if you do not use the simulation, then close Gazebo to leave the processor resources for others. If the system is slow, htop may show you the reason. htop shows who the active processes belong to and processor usage.

  • you can kill a process with process id 12345 using kill 12345. The process id is shown in the PID column in htop.

  • make clean removes all generated files which may help in case of an error

  • tools/ folder contain convenience scripts, e.g.,

    • stop-tb3.sh: to stop the robot manually
    • tb3-teleop.sh: teleoperation using keyboard