レーザーセンサー付き移動ロボットの作成

概要

 ROSのGazeboを使ったシミュレーションでは、ロボットのモデルデータをURDFで作成します。
 URDFでロボットモデルの作成では、移動ロボットのモデルを作成して動かしましたが、今回は、レーザーセンサー付きのモデルを作成してみます。
 このページのパッケージのソースは、https://github.com/joe-ash/tbotにアップしてあります。

作成するロボットの仕様

 作成するロボットは、Turtlebot3のような、レーザーレンサー付きの差動2輪+補助輪型の移動ロボットとします。ロボットの上に箱型のレーザーセンサーを取り付けてあります。
 ロボットの形状は、Turtlebot3のBurgerと大きさや重さはほぼ同じで、幅 138mm、長さ 178mm、高さ 192mm、重さ 1kgとなります。平面図、正面図、側面図を描いてみました。x軸方向が前となっています。
 
 モデルの構造としては、下記のようになります。

base_footprint          基準位置(車軸の中心の地上面)
 +- base_link  box      ボディ(箱型車軸部)
 +- body_link  cylinder ボディ(円筒本体部)
 +- wheel_r    cylinder 右車輪
 +- wheel_l    cylinder 左車輪
 +- caster_0   sphere   補助輪
 +- lidar_0    box      レーザーセンサー

ロボットの作成

ビルド環境の作成

 URDFのビルド用の環境を作成します。

$ cd ~/catkin_ws/src
$ catkin_create_pkg tbot urdf xacro
$ cd tbot
$ mkdir urdf worlds launch config

ファイル構成

 環境ができたら、urdfフォルダとlaunchフォルダに各ファイルを設置します。

URDFの作成、確認

 以下のコマンドでXacroを起動し、URDFを作成し確認します。
 Kineticの場合は、--inorderオプションを追加しないとワーニングエラーになります。Xacroの文法は、よく変更があるため、バージョンが異なるとエラーになる可能性があります。

$ cd ~/catkin_ws/src/tbot/urdf
$ rosrun xacro xacro --check-order tbot.urdf.xacro
$ rosrun xacro xacro tbot.urdf.xacro > tbot.urdf
$ check_urdf tbot.urdf

 実行すると、tbot.urdfというURDFファイルができます。ファイルを見ると、Xacroによって、インクルードファイルの内容が展開されているのが分かります。

ロボットの表示

Gazeboで表示

 Gazeboを起動し、作成したロボットを表示します。

$ roslaunch tbot tbot.launch

 下記のような画面が表示されます。
 

キーボードでロボットを操作

 gazeboのプラグインに/cmd_velにTwistメッセージを送ればロボットを操作できる仕様になっています。
 別端末を開き、teleop_twist_keyboardを起動すると、作成したロボットを操作することができます。

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

 キー操作の方法は端末上に表示されますので、説明に従って操作してください。

TurtlebotのWorldファイルの参照

 周囲に壁などがある方が、レーザーセンサーの照射範囲が分かりやすいので、turtlebot3_gazeboパッケージのturtlebot3_worldというWorldデータを参照して表示するように設定します。

ファイル構成

Gazeboで表示

 launchファイルを使ってGazeboを起動し、作成したロボットを表示します。

$ roslaunch tbot tbot_turtle.launch

 下記のような画面が表示されます。
 
 

rvizでレーザーセンサーの値を表示

ファイル構成

rvizの設定と表示

 launchファイルを使ってGazeboとrvizを起動し、作成したロボットを表示します。

$ roslaunch tbot tbot_rviz.launch

 初回起動時は、rvizの初期設定を行っていませんので、エラーが表示され、何も表示されません。rvizの設定は、下記の方法で行います。

・Displaysの「Add」で「RobotModel」を追加
・Displaysの「Global Options」の「Fixed Frame」を「base_footprint」に設定
 モデルのルートリンクの値は「base_link」などモデル毎に異なる
・Displaysの「Add」で「LaserScan」を追加
・Displaysの「LaserScan」の「Topic」を「/scan」に設定
 レーザーセンサーが読み取った値が、赤色の点で表示される
・Displaysの「Add」で「Map」を追加
・Displaysの「Map」の「Topic」を「/map」に設定
 「Map」は、slamで地図作成する場合に必要
・Viewsの「Type」を「TopDownOrtho」に設定
・ViewsパネルとTimesパネルを非表示
・表示画面をロボットと地図が見易い状態に変更

 設定が終わったら「File」メニューの「Save Config」で設定ファイルに保存します。launchファイルは、設定ファイル(tbot/config/tbot.rviz)を参照して起動するように設定してありますので、次回起動時からは、保存時の画面で起動されます。
 rqt_graphで確認すると、下記のような画面になります。
 
 rqt_graphを見てみると、gazeboとrvizとpublisherの関係が分かります。rvizは、/scanトピックを購読しているのに表示されていませんが、HideのDebugのチェックを外すと表示されますが、Debug関連のノードも多数表示されますので、見難くなります。


Copyright (C) ASH Joe Masumura