## ロボットシミュレータGazeboを使う
###(1)
turtlebot3_gazeboパッケージ内のturtlebot3_empty_world.launch ファイルを使用してロボットシミュレーションを実行してください。
次に実行されたノードや使われているトピックを確認してください(特に、/odom と /cmd_vel)。例えば、以下ののコマンドを使用できます。
`rosnode list`、`rostopic list`、`rostopic echo <トピック名>`、`rostopic hz <トピック名>`、`rqt_graph`、など
###(2)
シミュレーション内のロボット(TurtleBot3)には速度と角速度を設定することができます。
速度命令のメッセージはトピック /cmd_vel に送ります。メッセージのフォーマットを自分で確認してください。
メッセージの以下の変数を設定すればロボット速度の設定を行えます。
- 速度 ⇒ linear の x
- 角速度 ⇒ angular の z
TurtleBot3の場合残りの変数は影響がありません。
特定の速度で移動するように手動でロボットにコマンドを送信してみてください。
```bash
rostopic pub /cmd_vel <メッセージの詳細内容>
```
なお、設定する速度が速すぎると、車輪がスリップし、シミュレーションが不正確になります。それを防ぐため、直線速度を0.25 m/s以下、角速度を0.5 rad/s以下にするのがお勧めです。
###(3)
teleop_twist_keyboardパッケージからのteleop_twist_keyboard.pyノードを実行して、キーボードを使ってロボットを操作してみましょう。
(このノードは /cmd_vel にメッセージを送信しています。)
## メッセージを購読するプログラムを書く
###(4)
ROSワークスペース(~/catkin\_ws/src) に新しいパッケージを作成しましょう。
パッケージの名称は robot1\_task\_名字 (例えば、robot1\_task\_yamada)にしてください。
###(5)
次のような新しいプログラムを作成してください。
a)ロボットの現在の位置に関するメッセージが送信されているトピック(/odom)を購読します。
b)ロボットの現在位置のx座標とy座標を出力します(rospy.loginfoを使用してください)。
プログラムを実行可能にして、テストを行ってください。上記(3)で説明したteleop_twist_keyboardプログラムを使ってロボットを動かし、x座標とy座標がどのように変化しているかを確認することができます。
## ローンチファイルを書く
###(6)
パッケージのフォルダ内に、launchファイル用のフォルダlaunchを作成し、次の内容のlaunchファイルを作成してください。
a)(1)で使ったturtlebot3_empty_world.launchファイルの中身をすべてコピーしてください。empty_world.launchが含まれているworld_name引数を変更し、シミュレーションで使用するワールドを変更しましょう。
どのワールドを使ってもかまいません。ただ、ロボットが移動できるワールドであることを確認してください。
(ワールドファイルはPCのいくつかの場所に入っています。たとえば、ターミナルで `locate .world` コマンドを実行してみてください。)
b)位置を出力するプログラムのノードを追加してください。
launchファイルを実行すれば、シミュレーションが開始し、コンソールでロボットの位置がプリントされているのを確認してください。
## メッセージを配信するプログラムを書く
###(7)
キーボードでロボットを操作するためにteleop_twist_keyboardプログラムを使う代わりに、そのような機能を提供するプログラムを自分で書いてみましょう。
キーボード入力を扱うためのpythonライブラリが多くあり、どれを使ってもかまわないが、pynputを使うことをお勧めします。pynputを使うには、まずそれをインストールする必要があります(ターミナルで`pip install pynput`を実行してください)。下記のページにあるドキュメントではキーボードから読み取る方法の説明があります(「Monitoring the keyboard」章の例から始めるといい)。
https://pypi.org/project/pynput/
(pynputの使い方はこのページに日本語で説明されています: https://chocottopro.com/?p=438 )
キーボードのキー入力を監視し、それをロボットの速度コマンドに変換し、/cmd_velトピックに配信するプログラムを書いてください。そのプログラムを動かして、キーボードでロボットを操作できることを確認してください。
(オプション課題: マウスを使ってロボットを操作するプログラムを書く)
## 提出するビデオで何を示せばいいのか?
※ 「Ctrl + Alt + Shift + R」押すことで録画が始まります。
※ ファイルは「/home/roboprog/ビデオ」にセーブされます。
※ すべての段階の結果がビデオにはっきりと表示されていることに注意してください!
- (6)で作ったlaunchファイルを実行し、シミュレーションが開始されるのを待ちます
- ロボットの現在位置が表示されているコンソールが見えるようにします
- 別のコンソールを開いて、上記の(2)と同じように手動で速度コマンドを送信します。最初のコンソールで、位置がどのように変化するかがわかるはずです。
- 上記(7)で書いたキーボードによるロボットの操作プログラムを実行し、キーボードでロボットを操作します
---
リマインダー:提出するのは
- 上記のビデオ(スクリーンキャスト)
- この課題で作ったパッケージ (robot1\_task\_名字 フォルダ)
が入った圧縮ファイルです。
---
← [実習その2](v1_2.html)
↑ [ホームページ](index.html)