Commit abe96c59 authored by Nikolai Zollner's avatar Nikolai Zollner
Browse files

In Suedamerika gibt es keine guten Mechaniker, dafür Guatemala

parents
all: \
src/my_pkg \
set_my_ros_domain_id.sh
# generates a random ROS_DOMAIN_ID for simultaneous users on a machine
set_my_ros_domain_id.sh:
echo export ROS_DOMAIN_ID=$(shell seq 0 255 | shuf | head -1) > $@
src/my_pkg: | tb3.py
ros2 pkg create my_pkg \
--build-type ament_python \
--node-name tb3 \
--destination-directory src
ln -srf tb3.py src/my_pkg/my_pkg/tb3.py
colcon build --symlink-install
%/:
mkdir -p $@
clean:
$(RM) -r build install log src
$(RM) set_my_ros_domain_id.sh
# 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
```sh
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:
```sh
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
```sh
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
# generated from colcon_core/shell/template/command_prefix.sh.em
AMENT_PREFIX_PATH=/home/nz28671/py_pubsub/install/py_pubsub:/opt/ros/galactic-turtlebot3-quickstart:/opt/ros/galactic
CMAKE_PREFIX_PATH=/opt/ros/galactic-turtlebot3-quickstart:/opt/ros/galactic
COLCON=1
COLCON_PREFIX_PATH=/home/nz28671/py_pubsub/install:/opt/ros/galactic-turtlebot3-quickstart:/opt/ros/galactic
CONDA_EXE=/usr/bin/conda
CONDA_SHLVL=0
CUDA_PATH=/opt/cuda
CYCLONEDDS_URI=/share/cyclonedds-profile.xml
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/37383/bus
DISPLAY=localhost:16.0
GAZEBO_MASTER_URI=http://localhost:11345
GAZEBO_MODEL_DATABASE_URI=http://models.gazebosim.org
GAZEBO_MODEL_PATH=/usr/share/gazebo-11/models:/opt/ros/galactic/../galactic-turtlebot3-quickstart/share/turtlebot3_gazebo/models:
GAZEBO_PLUGIN_PATH=/usr/lib/gazebo-11/plugins:/opt/ros/galactic/../galactic-turtlebot3-quickstart/lib:
GAZEBO_RESOURCE_PATH=/usr/share/gazebo-11:/opt/ros/galactic/../galactic-turtlebot3-quickstart/share/turtlebot3_gazebo/worlds:
HG=/usr/bin/hg
HOME=/home/nz28671
LANG=en_US.UTF-8
LD_LIBRARY_PATH=/usr/lib/gazebo-11/plugins:/opt/ros/galactic-turtlebot3-quickstart/lib:/opt/ros/galactic/opt/yaml_cpp_vendor/lib:/opt/ros/galactic/opt/rviz_ogre_vendor/lib:/opt/ros/galactic/lib:/usr/lib/gazebo-11/plugins:
LOGNAME=nz28671
MAIL=/var/spool/mail/nz28671
MAKEFLAGS=
MAKELEVEL=1
MAKE_TERMERR=/dev/pts/14
MAKE_TERMOUT=/dev/pts/14
MFLAGS=
MKLROOT=/opt/intel/mkl
MOTD_SHOWN=pam
OGRE_RESOURCE_PATH=/usr/lib/OGRE
OLDPWD=/home/nz28671
PATH=/opt/ros/galactic-turtlebot3-quickstart/bin:/opt/ros/galactic/bin:/usr/condabin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/cuda/bin:/opt/cuda/nsight_compute:/opt/cuda/nsight_systems/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/share/
PKG_CONFIG_PATH=/opt/ros/galactic-turtlebot3-quickstart/lib/pkgconfig:/opt/ros/galactic/lib/pkgconfig
PWD=/home/nz28671/tb3-ros2-template/build/my_pkg
PYTHONPATH=/home/nz28671/py_pubsub/install/py_pubsub/lib/python3.10/site-packages:/opt/ros/galactic-turtlebot3-quickstart/lib/python3.10/site-packages:/opt/ros/galactic/lib/python3.10/site-packages
ROS_DISTRO=galactic
ROS_DOMAIN_ID=69
ROS_LOCALHOST_ONLY=0
ROS_PYTHON_VERSION=3
ROS_VERSION=2
SHELL=/bin/bash
SHLVL=1
SSH_CLIENT=10.1.65.84 56884 22
SSH_CONNECTION=10.1.65.84 56884 195.37.232.77 22
SSH_TTY=/dev/pts/14
TERM=xterm-256color
TURTLEBOT3_MODEL=waffle_pi
USER=nz28671
XDG_RUNTIME_DIR=/run/user/37383
XDG_SESSION_CLASS=user
XDG_SESSION_ID=170
XDG_SESSION_TYPE=tty
_=/usr/bin/env
/home/nz28671/tb3-ros2-template/src/my_pkg/my_pkg
\ No newline at end of file
Metadata-Version: 2.1
Name: my-pkg
Version: 0.0.0
Summary: TODO: Package description
Home-page: UNKNOWN
Maintainer: nz28671
Maintainer-email: nz28671@todo.todo
License: TODO: License declaration
Platform: UNKNOWN
UNKNOWN
package.xml
setup.cfg
setup.py
my_pkg/__init__.py
my_pkg/tb3.py
my_pkg.egg-info/PKG-INFO
my_pkg.egg-info/SOURCES.txt
my_pkg.egg-info/dependency_links.txt
my_pkg.egg-info/entry_points.txt
my_pkg.egg-info/requires.txt
my_pkg.egg-info/top_level.txt
my_pkg.egg-info/zip-safe
resource/my_pkg
\ No newline at end of file
[console_scripts]
tb3 = my_pkg.tb3:main
/home/nz28671/tb3-ros2-template/src/my_pkg/package.xml
\ No newline at end of file
/home/nz28671/tb3-ros2-template/src/my_pkg/resource/my_pkg
\ No newline at end of file
/home/nz28671/tb3-ros2-template/src/my_pkg/setup.cfg
\ No newline at end of file
/home/nz28671/tb3-ros2-template/src/my_pkg/setup.py
\ No newline at end of file
prepend-non-duplicate;PYTHONPATH;/home/nz28671/tb3-ros2-template/build/my_pkg
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment