ROS 2でTurtleBot3のナビゲーションのサンプルを動かすまでのつまづき
Fri Apr 19 15:17:53 JST 2024 (modified: Sat Apr 20 08:40:23 JST 2024)
views: 1332, keywords:ROS 2
科研費で「位置情報の不足や誤りに強い自律移動ロボット用次世代ナビゲーションソフトウェア群」 を作ると大風呂敷を広げてしまったので泣きながら作業を開始しました。 んで、準備でTurtleBot3のシミュレータを動かそうとして、 ROS 1との違いでいくつかつまづいた点があったので備忘録を書いておきます。
ROS 2のインストールとかパッケージのインストールとかの方法は、また別のところを参考にお願いします。 ROS 2のバージョンはhumbleです。何を動かしたのか上の作文だとわかりにくいかもしれませんが、↓これですこれ。
いろいろつまづいた(そして今更だ)けどROS 2でうごいた pic.twitter.com/7326uLN646
— 上田隆一 (@ryuichiueda) April 19, 2024
地図を用意して、(つまづかなければ) この資料に書いてあるふたつのコマンドを実行すると立ち上がります。地図は私の作ったのを使えます(下に記述あり)。
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
して修正すべきファイルを探し、
grep使えないと死ぬやつ pic.twitter.com/xqMClfMtc5
— 上田隆一 (@ryuichiueda) April 19, 2024
当該部分を書き直しました。
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.yaml
とmap.pgm
を使うといいです。マップ(yamlファイルとpgmファイル)をダウンロードしたディレクトリで、ros2 launch turtlebot3_navigation2
の立ち上げ時にmap:=map.yaml
を指定すると使えます。
Gazebo立ち上がらん
初期設定に時間がかかるので気長に待ちましょう。
立ち上がったら
RVizでロボットの位置とゴールの位置を指定すると、ロボットが動き出します。
現場からは以上です。