はじめに
前回までは、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 へ転送
するのみとなります。
次回は上記課題を解決する記事を作成します。
コメント