SLAMで作成したMapでNavigation2 -自律移動編- (ROS2-Foxy)

ROS2
スポンサーリンク

スポンサーリンク

はじめに

前回までは、2回にわたって Navigation2 の設定変更を行いました。

今回は、ついに、Navigation2 で自律移動をさせます。
この記事で一つの区切りとなります。その次は4 ~ 6 軸ロボットの説明をしていきます。

もしくは、Maze Solving と呼ばれる迷路のスタート ~ ゴールを解決できるようなシミュレーションも考えています。

※追加の Python プログラムが必要なことが分かったので、次の記事が完結編となります…。

前提条件

前提条件は、以下の通りです。

  • map 作成が完了している
  • Navigation2, launchファイル, rviz設定ファイル作成が完了している

特に、rviz 設定ファイルは初めてコードから作成していますので、確実に完了してください。
コピペで問題ありません。

setup.py の編集

最後の準備です。
今まで作成した設定ファイルを、setup.py に登録することで ros2_first_test のパッケージに登録する必要があります。

(os.path.join('share', package_name, 'launch'), glob('launch/*.py')),
(os.path.join('share', package_name, 'urdf'), glob('urdf/*')),
(os.path.join('share', package_name, 'rviz'), glob('rviz/*')),
(os.path.join('share', package_name, 'config'), glob('config/*')),
(os.path.join('share', package_name, 'world'), glob('world/*')),
↓
(os.path.join('share', package_name, 'launch'), glob('launch/*.py')),
(os.path.join('share', package_name, 'urdf'), glob('urdf/*')),
(os.path.join('share', package_name, 'rviz'), glob('rviz/*')),
(os.path.join('share', package_name, 'config'), glob('config/*')),
(os.path.join('share', package_name, 'world'), glob('world/*')),
(os.path.join('share', package_name, 'map'), glob('map/*')),

上記のように変更してください。
map フォルダをパッケージに登録しました。

Navigation2 の起動

それでは、前回作成した first_navigation.launch.py を起動していきます。

cd ~/ros_ws
colcon build --packages-select ros2_first_test
source ~/.bashrc
ros2 launch ros2_first_test first_navigation.launch.py

上記を実行すると、Gazebo と Rviz2 が起動します。

前回作成した Map が Rviz2 上に表示されています。
しかし、Rviz2 上ではエラーが発生しています。

エラーをよく見ると、”Mapトピックがありません” というエラーになっていると思います。
Map を作成したときは slam-toolbox を用いて slam-toolbox が Map トピックを管理してくれていました。

今回の launch ファイルには登録していないので、Map トピックが出力されていません。
ここで、amcl の設定ファイルを思い出してほしいのですが、 global_frame: “map” を記載したと思います。

amcl の起動には条件があります。

・初期位置を指定

する必要があります。

Rviz2 上でロボットの初期位置を指定

ここまでの間に、時間が経過していると lidar_topic がタイムアウトしてしまうので、もし動かなければ再度 launch してください。

赤枠をクリックしてロボットの位置をクリックして、向きを指定してください。
すると、以下のような出力が得られます。

遂にそれっぽくなりました。

一連の流れを GIF にしたのでご確認ください。

ゴール位置を指定して、自律走行

まずは、初期位置推定が終わった段階で、 Navigation2 Goal を押して、ゴール位置を指定してください。

また、一連の流れを GIF にしました。

画像上の赤い線が、Path-Planning で出力された経路です。
本当はここから動くはずなのですが、なぜか動きません。

原因を確認してみましょう。新しいターミナルを起動して topic を検索してください。

ros2 topic list

/cmd_vel トピックがパブリッシュされています…。
以前作成した、translate_cmdvel.py は first_robot/cmd_vel をサブスクライブしているので、動くわけがありません。(僕は少しの間、気が付きませんでした)

大変申し訳ないのですが、次回に回します。

おわりに

今回は、Navigation2 パッケージを用いて

  • amcl パッケージで自己位置推定
  • Path-Planning で経路計画

を実行しました。

残す課題は

  • /cmd_vel を /first_robot/cmd_vel へ転送

するのみとなります。

次回は上記課題を解決する記事を作成します。

コメント

タイトルとURLをコピーしました