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:
- running your ROS node
- writing code
- 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 thePID
column inhtop
. -
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
-