Webカメラ付き移動ロボットの作成

概要

 ROSのGazeboを使ったシミュレーションでは、ロボットのモデルデータをURDFで作成します。
 レーザーセンサー付き移動ロボットの作成では、レーザーセンサー付き移動ロボットのモデルを作成して動かしましたが、今回は、Webカメラ付きのモデルを作成してみます。
 このページのパッケージのソースは、https://github.com/joe-ash/cbotにアップしてあります。ROSのバージョンは、MelodicとKineticで確認しています。私は、Gazeboのバージョンアップを行っているので、特に問題はありませんでしたが、Kineticの場合、Gazeboのバージョンアップを行っていないと動かなかったという情報もあります。

作成するロボットの仕様

 作成するロボットは、レーザーセンサー付き移動ロボットの作成のレーザーセンサーをWebカメラに変更したロボットで、外形は全く同じになります。
 モデルの構造としては、下記のようになります。

base_footprint          基準位置(車軸の中心の地上面)
 +- base_link  box      ボディ(箱型車軸部)
 +- body_link  cylinder ボディ(円筒本体部)
 +- wheel_r    cylinder 右車輪
 +- wheel_l    cylinder 左車輪
 +- caster_0   sphere   補助輪
 +- webcam_0    box     Webカメラ

ロボットの作成

ビルド環境の作成

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

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

ファイル構成

 環境ができたら、urdfフォルダとlaunchフォルダに各ファイルを設置します。ここでは、tbotと異なる箇所のみ掲載してありますので、実際に動かしてみたい方は、レーザーセンサー付き移動ロボットの作成を参照するか、GITからダウンロードしてください。

ロボットのカメラ画像の表示

Gazeboとrvizの起動

 launchファイルを起動し、Gazeboとrvizを起動します。

$ roslaunch cbot cbot_rviz.launch

rvizの設定と表示

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

・Displaysの「Add」で「RobotModel」を追加
・Displaysの「Add」で「Odometry」を追加
・Displaysの「Odometry」の「Topic」を「/odom」に設定
・Displaysの「Odometry」の「Keep」を「1」に設定
・Displaysの「Odometry」の「Covariance」のチェックを外す
・Displaysの「Global Options」の「Fixed Frame」を「odom」に設定
 ロボットが奇麗に表示される
・Displaysの「Add」で「By topic」の「カメラ名treeのcamera」を追加
 WebカメラのTopic(/image_raw)を表示するように設定
 左下のcameraパネルにWebカメラの画像が表示される
・ViewsパネルとTimesパネルを非表示
・表示画面をロボットと地図が見易い状態に変更

 設定が終わったら「File」メニューの「Save Config」で設定ファイルに保存します。launchファイルは、設定ファイル(cbot/config/cbot.rviz)を参照して起動するように設定してありますので、次回起動時からは、保存時の画面で起動されます。
 
 rqt_graphを見てみると、ノードとトピックの関係が分かります。rvizはデバッグ用のツールですので、HideのDebugのチェックを外さないと表示されません。
 

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

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

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

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


Copyright (C) ASH Joe Masumura