トピック通信の復習

目的

トピック通信をより深く理解するために,コマンドラインツールを用いてノードやトピック等を確認します.なお,本講義ではロボットシミュレータstageを使用します.なお,トピック通信についてはこちらで学んでいることを前提として進めます.

ロボットシミュレータstageの起動

既にトピック通信をC++言語で実装する技術は身につけています.今回は使用するシミュレータを変更し,トピック通信を深く理解するために問題を解く形式で講義を進めます.問題を解くことができない場合には,ロボット理工学演習A(もしくはプロジェクト演習A)で学んだ内容を復習してください.

まずはロボットシミュレータstageを起動します.2次元平面上を走行するロボットをシミュレートするためにstageが開発されました.2次元平面の環境(地図)を設計可能,カメラやレーザ距離センサを搭載可能,多数のロボットを同時にシミュレーション可能という特徴を持っています.高機能なロボットシミュレータとしてgazeboがありますが,stageは比較的スペックの低いパソコンでも動作するため,センシングしながらロボットの走行を制御する勉強に最適です.

stageでは,環境地図やロボット等を定義したworldと呼ばれるファイルを使用します.今回はstage_rosというパッケージに含まれているworldファイルを使います.まずは,stage_rosがインストールされたディレクトリを確認します.パッケージが存在するディレクトリに移動するには,roscdというコマンドを使用すると便利です.下記のコマンドを実行してstage_rosがインストールされたディレクトリに移動しましょう.

$ roscd stage_ros
$ pwd
/opt/ros/noetic/share/stage_ros

パッケージ内に存在するworldフォルダに*.worldと*.pgmが存在することを確認しましょう.worldファイルにて環境地図とロボットを定義しています.また,worldファイルでは画像(pgmファイル)により表現した環境地図を読み込んでいます.stage_rosでは,下記の3種類のworldファイルを用意しています.

worldファイル名 ロボット台数 カメラの有無
willow-erratic.world 1 なし
willow-four-erratics.world 4 なし
willow-four-erratics-multisensor.world 4 あり

それでは,用意されているworldファイルを使用して,ロボットシミュレータstageを起動します.引数としてworldファイルを指定しますが,worldファイルのフルパスを入力するのは手間となるので,rospack findというパッケージのパスを返すコマンドを利用すると便利です.ここでは,最もシンプルなwillow-erratic.worldを使用します.

$ rospack find stage_ros
/opt/ros/noetic/share/stage_ros

$ rosrun stage_ros stageros $(rospack find stage_ros)/world/willow-erratic.world

起動すると上記のようなウィンドウが立ち上がります.

起動時には地図の右下を鳥瞰しているような視点となりますので,地図をドラッグしながら青色の四角形で表されるロボットを見つけてください.

stage自体は二次元平面上を走行するロボットをシミュレートするためのものですが,「Shift + R」で斜めからの視点(透視投影)に変えられます.

最もシンプルなwillow-erratic.worldで採用されているロボットには,距離を取得できるセンサ(超音波もしくは赤外線カメラ)が搭載されています.なお,このセンサは北陽電機株式会社のUTM-30LX(通称 TOP-URG)をモデルとしてます.stageシミュレータ画面の上部メニュー画面 => View => Dataにチェックを入れると,センサ情報が淡い緑色で可視化される.

課題

下記の課題を順番に解きなさい.

  1. willow-erratic.worldファイルを用いてシミュレータstageを起動し,立ち上がるノード名及び配信,購読しているトピックの一覧を取得しなさい.
  2. 購読可能なトピックを調べなさい.また,メッセージファイルにはどのような情報が記述されているか調べなさい.
  3. rostopic pubコマンドを使用して,ロボットを動かしなさい.
  4. teleop_twist_keyboardパッケージのteleop_twist_keyboard.pyを用いてロボットを操作しなさい.
  5. willow-four-erratics.worldファイルを用いてシミュレータstageを起動し,立ち上がるノード名及び配信,購読しているトピックの一覧を取得しなさい.また,willow-erratic.worldファイルを読み込んだ時と取得できる内容の違いを確認しなさい.
  6. rostopic pubコマンドを使用して,0番目のロボットを動かしなさい.
  7. teleop_twist_keyboardパッケージのteleop_twist_keyboard.pyを用いて0番目のロボットを操作しなさい.
  8. 0番目のロボットに円運動をさせるプログラムを作りなさい.
  9. 作成したプログラムを実行し,データ可視化ツールrvizで軌跡を可視化しなさい.軌跡の可視化にはOdometryを使用することとする.
  10. シミュレータstage,作成したプログラム,rvizを起動するlaunchファイルを作成しなさい.
参考文献