ROS 2でTurtleBot3のナビゲーションのサンプルを動かすまでのつまづき

Fri Apr 19 15:17:53 JST 2024 (modified: Sat Apr 20 08:40:23 JST 2024)
views: 878, keywords:ROS 2

 科研費で「位置情報の不足や誤りに強い自律移動ロボット用次世代ナビゲーションソフトウェア群」 を作ると大風呂敷を広げてしまったので泣きながら作業を開始しました。 んで、準備でTurtleBot3のシミュレータを動かそうとして、 ROS 1との違いでいくつかつまづいた点があったので備忘録を書いておきます。

 ROS 2のインストールとかパッケージのインストールとかの方法は、また別のところを参考にお願いします。 ROS 2のバージョンはhumbleです。何を動かしたのか上の作文だとわかりにくいかもしれませんが、↓これですこれ。

地図を用意して、(つまづかなければ) この資料に書いてあるふたつのコマンドを実行すると立ち上がります。地図は私の作ったのを使えます(下に記述あり)。

ROS 2でのカンチョーのしかた

 まず、ROS 1でたまに必要だったフレームの設定のこのコマンド(自分は「カンチョー」と呼んでる)

$ rosrun tf static_transform_publisher 0 0 0 0 0 0 1 map my_frame 10

がROS 2でも必要になったので、調べたけど分からなくて死にました。が、roboticskeyで聞いたらとしぞーさんにおしえていただけました。ありがとうございました。

機種の指定

 これは久々にやると忘れるやつですが、~/.bashrc

export TURTLEBOT3_MODEL=burger #burgerのところに使いたい機種を書く

と1行書いて、source ~/.bashrcしましょう。

amclがnav2_amcl::MotionModel does not existと言う

 カンチョーしてもまだ動かなかったのでログを真面目に読んだらこんなエラーが出てました。

[component_container_isolated-1] [ERROR] [1713503168.774420684] [amcl]: Original error: According to the loaded plugin descriptions the class differential with base class type nav2_amcl::MotionModel does not exist. Declared types are nav2_amcl::DifferentialMotionModel nav2_amcl::OmniMotionModel

 で、調べたらここにしれっと解決法が書いてありました。

 ということで、次のように/opt/grepして修正すべきファイルを探し、

当該部分を書き直しました。


   ueda@uedaP1g6:/opt$ vi ros/humble/share/turtlebot3_navigation2/param/burger.yaml 
   ・・・
    29     robot_model_type: "nav2_amcl::DifferentialMotionModel"  ←この行を加える
    30       # robot_model_type: "differential"                    ←この行は#でコメントアウト

マップ作るのめんどくさい

 ROS 1のやつで大丈夫でした。私の作ったのがここにあります。冒頭のスクショの亀型の環境ならmap.yamlmap.pgmを使うといいです。マップ(yamlファイルとpgmファイル)をダウンロードしたディレクトリで、ros2 launch turtlebot3_navigation2の立ち上げ時にmap:=map.yamlを指定すると使えます。

Gazebo立ち上がらん

初期設定に時間がかかるので気長に待ちましょう。

立ち上がったら

 RVizでロボットの位置とゴールの位置を指定すると、ロボットが動き出します。

 現場からは以上です。

ノート   このエントリーをはてなブックマークに追加 
 

prev:kanataさんの黒い画面の本(新入生、新社会人向き) next:C++で作ったROS 1のパッケージをROS 2に移植するときのつまづきポイント ―その1(2があるかどうかは不明)

やり散らかし一覧

記事いろいろ