# 複数のマシンでROSを実行する
ROSを使用すると、ノードを同時に複数のマシンで実行することができます
- ROSマスターを**1つだけ**を開始します。つまり、1台のマシンでのみ`roscore`を実行します。
- すべてのマシンは、同じROSマスターを使用するように設定する必要があります。
## アドレスの設定
- ROSマスターが実行されているマシンのアドレスは、環境変数`ROS_MASTER_URI`で定義します
```bash
export ROS_MASTER_URI=http://<ROSマスターのPCのIPアドレスまたはホスト名>:11311
```
- `ROS_HOSTNAME`を設定するのも良いでしょう。この変数は、使用しているマシンのアドレスに設定します。
```bash
export ROS_HOSTNAME=<ローカルPCのIPアドレスまたはホスト名>
```
これらのコマンドは、全てのターミナルで実行する必要があります。
使いやすさのためコマンドを .bashrc に入れることもできます。
---
すべてのマシンが上記のように設定されたら、これ以上何もする必要はありません。
- すべてのROSツールが機能します(`rostopic`、`rviz`など)
- ノード間のすべての通信は、1台のマシンで作業する場合と同様に使えます
- *コードや設定を変更する必要は一切ありません*!
### 例
2台のマシン間の通信
- マシン1 (例えば、IPが192.168.128.1の場合):
```bash
roscore #このマシンでROSマスターを実行します
```
```bash
export ROS_MASTER_URI=http://192.168.128.1:11311
export ROS_HOSTNAME=192.168.128.1
rosrun rospy_tutorials listener.py
```
- マシン2 (例えば、IPが192.168.128.2の場合):
```bash
export ROS_MASTER_URI=http://192.168.128.1:11311
export ROS_HOSTNAME=192.168.128.2 # !!!
rosrun rospy_tutorials talker.py
```
---
# TurtleBot3ロボットの操作
---
## 通信設定
-`ROS_MASTER_URI`と`ROS_HOSTNAME`の設定が必要です。
**注意**:上の図と違って、実習ではロボットでROSマスターを実行します。したがって、両方のマシンで`ROS_MASTER_URI=http://IP_OF_TURTLEBOT:11311`と設定します!
---
## ロボットの起動
ロボットで実行:
```bash
roslaunch turtlebot3_bringup turtlebot3_robot.launch
```
- モーターコントローラーとの通信、レーザースキャナーの測定の読み取りなどのノードを実行します。
リモートコンピューターで実行:
```bash
roslaunch turtlebot3_bringup turtlebot3_remote.launch
```
- `robot_state_publisher`を起動して、必要なすべての座標系をTFに公開します。
その後、リモートコンピュータでロボットを操作できます。例えば、`rviz`を使用して、ロボットのデータが表示できます。
---
→ [課題(シミュレーション)](v3_task.html)
← [実習その1](v3_1.html)
↑ [ホームページ](index.html)