
TurtleBot3 のシミュレーション環境でmy_robotを使ってみます。
(4/5)TurtleBot3のシミュレーション環境を使ってみる
この環境は自律走行シミュレーターとしては非常に使いやすいです。
この環境に自作ロボットを組み込む手っ取り早い方法として、Waffle モデルをmy_robotに置き換えることにします。
で、ナビゲーションをやってみます。
Goalを設定する方法は、Rvizの2D Nav Goal と、Python の外部コマンドで設定する方法の2種類です。
my_robotで作成したロボットのモデルは以下のフォルダーにあります(あるはずです)。
~/catkin_ws/src/my_robot/urdf/my_robot.urdf.xacro
TurtleBot3 のシミュレーション環境で使うWaffle モデルは以下のフォルダーにあります。
/opt/ros/melodic/share/turtlebot3_description/urdf/turtlebot3_waffle.urdf.xacro
元のモデルは改名保存しておいて、置き換えます。
これでWaffle としてmy_robotが使えます。
1:2D Nav Goal でナビゲーション
独自空間(my_room.world)でmy_robotを使ってみましょう。
以下のlaunchファイルについては(4/5)参照
hector slam で作った地図を使ってナビゲーションしてみます(gmappingの場合、2D Pose Estimation による初期位置補正が必要になりますが、hector は不要なので扱いやすいです)。
navigationを起動します。
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/maps/my_room_hector_map.yaml
メニュの「2D Nav Goal」を選択して、隣室中央でクリックしてGoalを設定してみました。
最適経路が策定されて自律走行を開始します。
2:ナビゲーションのGoal設定を外部コマンドでやってみる
上記のナビゲーションでは2D Nav Goal とマウスクリックでGoalを設定しましたが、ここではPythonで実行コマンドを作成してみます。
Pythonのコードを使ったコマンドをROSのパッケージにします。
ROSではGoalを指示するtopicは/move_base_simple/goalで、メッセージの型は以下のようになっています。
geometry_msgs/PoseStamped
コマンド用のROSパッケージの依存パッケージは以下の2つです。
rospy、geometry_msgs
パッケージ名をnav_goal、Pythonファイル名をgo2goal.pyとします。
ワークスペースに移動してパッケージを作成
Pythonを使うのでscriptsフォルダーを作って移動し、新規のファイルを開いておきます。
コードはこんな感じ。
Goalの座標値を引数で渡して、移動させます。
権限を与えておきます。
sudo chmod +x go2goal.py
source ~/catkin_ws/devel/setup.bash
ところで座標はどうなっているかというと…。
Gazeboの座標はこうなっていますが、ここが原点ではありません。
RvizのBot3の初期位置、ここが原点です。
で、移動先を指定しますが、x軸方向に2、y軸方向に−2移動するとします。
こういうコマンドを実行します。
右下の別ターミナルでコマンドを実行しています。これで命令がPublishされますが、実行までに少々タイムラグがあります(5秒ほど)。実行されると指定の位置に矢印が現れて最適経路が表示され、Bot3が移動を開始します。また実行が開始されればコマンドはCtrl + C で終了しても可です。
原点は初期位置で固定されているので、以下のようなコマンドの場合
rosrun nav_goal go2goal.py -1.0 0.0
ここに移動します。
これでロボットに対して「玄関へ行って」という音声コマンドも送れるようになります。
Leave a Reply