はじめに
TurtleBot3をROS2で動かした際の忘備録(2)です
本ページはgazeboを使ったシミュレーションです.実機については下記別記事参照
https://qiita.com/pez/items/1d3d15b3911d5dab1702
【下記の状態からを想定しています】
・ホストPCにVirtualBox+Ubuntuが導入済み(下記別記事参照)
https://qiita.com/pez/items/a3ef1855f7e1e0ed3dfd
・ホストPCにROS(ROS2 Foxy)がインストール済み(下記別記事参照)
https://qiita.com/pez/items/1df36628524ff40a3d93
・TurtleBot3のシミュレーション関連のパッケージのみ未導入
環境
ホストPC (Panasonic Let's Note CF-FV)
・OS: Windows11 Pro (64bit)
・VirtualBox: 6.1.38 (Ubuntu20.04.5, GUI環境)
・ROS: ROS2 Foxy
ロボット
・TurtleBot3 waffle pi (Raspberry Pi 3B+)
または
・TurtleBot3 burger (Raspberry Pi 3B+)
シミュレーション関連パッケージ導入
ワークスペース作成
$ cd
$ mkdir -p ~/turtlebot3_ws/src/
TurtleBot3(シミュレーション)関連パッケージのインストール
※ソースコードからビルド
$ cd ~/turtlebot3_ws/src
$ git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/turtlebot3_ws
$ colcon build --symlink-install
設定反映
$ cd ~/turtlebot3_ws
$ source install/setup.bash
シミュレーションを実行してみる
※立ち上がるまで時間がかかる場合があります
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
このコマンドの「turtlebot3_world.launch」の部分を下記のように変えると
それぞれロボットの周囲にデフォルトで用意される環境が変わります
・turtlebot3_empty_world.launch.py
地面だけあって他に何もない空間
・turtlebot3_house.launch.py
家の中を模擬したような空間(注:非常に重い,ノートパソコンでは辛いかも)
gazeboが起動できたらキーボードからの操作を試してみる
※別のターミナルを立ち上げて実行
$ ros2 run turtlebot3_teleop teleop_keyboard
または
$ ros2 run teleop_twist_keyboard teleop_twist
SLAMのシミュレーション
※gazeboシミュレーターの中にturtlebot3が立ち上がってる状態で行います
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
立ち上がったらキーボード操作(teleop_keybord)などを使って動かしてみましょう
周辺地図の作成ができたら成功です
地図の保存
$ ros2 run nav2_map_server map_saver_cli -f ~/map
※mapの部分は任意の名前でOK,「~/」を入れるとホームディレクトリ直下に保存される
ナビゲーションのシミュレーション
※SLAMで地図が保存された後を想定しています
ナビゲーションノードを立ち上げる
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml
※map.yaml の部分はmapを保存した時の「自分でつけた名前」.yaml とする.
操作方法
1.「2D Pose Estimate」ボタンをクリック
2. 現在ロボットのいる位置をクリックして緑色の矢印をロボットが向いている方向に合わせる
3.「Navigation2 Goal」ボタンをクリック
4. ロボットを移動させたい位置をクリックして緑色の矢印を最終的にロボットに向かせたい方向に合わせる
ロボットが目的地に動いたら成功
備考
このナビゲーション,動かないことが結構あるようです.下記に気を付けるとうまく動く可能性が高まる気がします.
・現在のロボットのいる位置と方向はなるべく正確に合わせる(操作方法の2)
・操作方法の2と3の間に Teleop などでゆっくりロボットを動かしてみる
・操作方法の4の前に Teleop などロボットに動作指令を送るノードは全て落としておく
・目的地はあまり遠くに設定しない