README.md 3.18 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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