SOBIT PRO,SOBIT EDU,SOBIT MINI,HSR(Simulation)のための自律移動パッケージ.
Navigationのオープンソースの概要はこちらをチェック.
また自律移動の仕組みについても,ROSのオープンソースを参照.
(上に戻る)
本レポジトリのセットアップ方法について説明します.
必要な外部ソフトや正常動作を確認した環境について説明してください.
System | Version |
---|---|
Ubuntu | 20.04 (Focal Fossa) |
ROS | Noetic Ninjemys |
Python | 3.0~ |
Simulator(使用する場合) | Sigverse ROS |
- ROSの
src
フォルダに移動します.$ cd ~/catkin_ws/src/
- 本レポジトリをcloneします.
$ git clone https://github.com/TeamSOBITS/sobit_navigation_stack.git
- レポジトリの中へ移動します.
$ cd sobit_navigation_stack
- 依存パッケージをインストールします.
- 通常のインストール方法
$ bash install.sh
- Navigationを深く勉強したい人向け
Navigation関係のパッケージをgit cloneによりインストールすることで,プログラムコードを編集して改良することができる
$ bash install.sh clone_mode
プログラムコードはパッケージ一覧のところにまとめてインストールされる
- 通常のインストール方法
- パッケージをコンパイルします.
$ cd ~/catkin_ws/ $ catkin_make
(上に戻る)
Navigationを使う上での基本的な流れ
- 地図生成
- 目的地まで,障害物を回避した経路を生成するため,ロボットが事前に地図を知る必要がある
- 地図の障害物のデータと,現在ロボットが取得しているデータから,ロボットが現在どこにいるのかを推測する
- 地点登録
- 生成した地図の,どの位置からどの位置までの経路を生成するかのポイントとなる位置を登録する
- actionlibによって呼び出す
- ロボットの現在の地点から登録した地点まで,地図上の障害物がない安全なエリアに経路生成をする
- 到着まで時間がかかることから,結果だけでなく途中経過も発信することのできるactionlib通信を用いる
- ロボットを起動する
ロボット本体と,2D-LiDARを起動させる.
詳しくは,それぞれのロボットのgit hub(PRO,EDU,MINI)を確認.
HSR(シミュレータ)の場合はsigverseやHSR本体のセンサデータを使えるように起動する. - 地図生成を起動
以下のコマンドで起動.- 実機ロボットの場合
$ roslaunch sobit_mapping gmapping.launch
- HSRの場合
$ roslaunch sobit_mapping hsr_gmapping.launch
- 実機ロボットの場合
- 人間が操作できるようにteleop.launchを起動
以下のコマンドで起動.- 実機ロボットの場合
$ roslaunch sobit_mapping teleop.launch
- HSRの場合
$ roslaunch sobit_mapping hsr_teleop.launch
- 実機ロボットの場合
- ロボットを操作して,Navigationしたい環境の地図を保存
起動したxtermターミナル(青いターミナル)で操作方法を確認しながら,Rvizの地図を見てロボットを操作する.
地図ができたら,save_map_command.pyのターミナル(青いターミナル)でEnterボタンを押して地図を保存する.
保存された地図画像(pgmファイル)と,その詳細情報が入ったymalデータは,mapに,「map_ + 保存した日時 + .yaml」のファイル名で保存される.
Note
これを人間がロボットを操作せずに,自律的に行えないのか?と思ったら自律地図生成の仕方をチェック.
Note
これは2D LiDARのみでの地図生成であるが,一脚テーブルのような立体的な障害物は2D LiDARでの検出ができない. そこでロボットの3D cameraを用いることで解決するカメラを用いた地図生成についてをチェック.
-
生成した地図のパスをNavigationに書き換える
生成した地図のパスを指定する.- 実機で地点登録
/sobit_mapping/launch/create_location_file.launchのmap_fileを書き換える. - HSRで地点登録
/sobit_mapping/launch/hsr_create_location_file.launchのmap_fileを書き換える.
map_fileは,自分で生成した地図を指定する.
例えば,example.pgmというマップの場合は,以下のように指定する.<arg name="map_file" default="$(find sobit_mapping)/map/example.yaml"/>
※ 拡張子が.ymalになることに注意.直接画像ファイルを指定するのではなく,地図のymalデータファイルを指定する.
- 実機で地点登録
-
ロボットを起動する
ロボット本体と,2D-LiDARを起動させる.
詳しくは,それぞれのロボットのgit hub(PRO,EDU,MINI)を確認.
HSR(シミュレータ)の場合はsigverseやHSR本体のセンサデータを使えるように起動する. -
地点登録を起動する
実機の場合は/sobit_mapping/launch/create_location_file.launch,HSRの場合は/sobit_mapping/launch/hsr_create_location_file.launchのuse_robotをtrueにする.
以下のコマンドで起動する.- 実機で地点登録
$ roslaunch sobit_mapping create_location_file.launch
- HSRで地点登録
$ roslaunch sobit_mapping hsr_create_location_file.launch
- 実機で地点登録
-
地点を登録する
この機能の概要としてロボットのいる位置が登録されるので,ロボットを地点登録したい位置まで移動させる.
ロボットの移動のさせ方は以下2通りがあるので好きな方を選ぶ.- Navigationの機能を用いる
起動したRvizの2D Nav Goalをmapにクリックすることでロボットが移動する. - 地図生成したときのように人間が操作
以下のコマンドで実行- 実機ロボットの場合
$ roslaunch sobit_mapping teleop.launch
- HSRの場合
$ roslaunch sobit_mapping hsr_teleop.launch
- 実機ロボットの場合
ロボットを登録させたい位置まで移動.
そこで地点登録のターミナルに地点名を入力し,Enterを押して登録完了. - Navigationの機能を用いる
-
保存
4を繰り返していくことで地点登録したい全ての地点を登録する.
地点登録が終わったら,端末で「q」と入力して保存する.
地点登録された情報が入ったymalデータは,mapに,「map_location_ + 保存した日時 + .yaml」のファイル名で保存される.
Note
ここではロボットを使っての地点登録方法を書いたが,RoboCupでは競技環境を使える時間に限りがある. そのため,競技環境が使えるときは,なるべく競技練習の時間に充てることが望ましい. そこで,地点登録をロボットを使わずにすることで時間を有効にすることができる. 詳しい使い方はロボットを用いずに地点登録をチェック.
Note
地点登録結果をRvizで見たり,追加したい場合はこちら.
- map_fileを地図生成した地図に書き換える
Navigationに地図を登録する.- SOBIT PROでナビゲーション /sobit_navigation/launch/sobit_pro_navigation.launchのmap_fileを地点登録のときと同様に書き換える.
- SOBIT EDU,SOBIT MINIでナビゲーション /sobit_navigation/launch/sobit_turtlebot/sobit_turtlebot_navigation.launchのmap_fileを地点登録のときと同様に書き換える.
- HSRでナビゲーション /sobit_navigation/launch/hsr/hsr_navigation.launchのmap_fileを地点登録のときと同様に書き換える. ここで書くのは,地図データです.地点登録のファイルと間違わないようにしてください.
- 地点登録した情報をrosparamに登録する
/sobit_mapping/launch/load_location_file.launchのrosparamのfileを,自分で生成した地点登録ファイルに書き換える.
例えば,map_location_example.ymalという地点登録ファイルの場合は,以下のように指定する.書き換えたら,以下のコマンドでrosparamに登録する.<rosparam command="load" file="$(find sobit_mapping)/map/map_location_example.yaml"/>
このlaunchファイルはターミナルが終了します$ roslaunch sobit_mapping load_location_file.launch
- ロボットを起動する
ロボット本体と,2D-LiDARを起動させる.
詳しくは,それぞれのロボットのgit hub(PRO,EDU,MINI)を確認.
HSR(シミュレータ)の場合はsigverseやHSR本体のセンサデータを使えるように起動する. - Navigationを起動する
以下のコマンドでNavigationを起動する.- SOBIT PROでナビゲーション
$ roslaunch sobit_navigation sobit_pro_navigation.launch
- SOBIT EDU,SOBIT MINIでナビゲーション
$ roslaunch sobit_navigation sobit_turtlebot_navigation.launch
- HSRでナビゲーション
$ roslaunch sobit_navigation hsr_navigation.launch
- SOBIT PROでナビゲーション
- アクションクライアントを起動する
これは基本的にプログラムから起動する.
地点登録した地点名ならどこにでも移動することが可能.
移動する例として,/sobit_navigation_library/example/move_location_example.pyを起動.
このexampleコードでは,"table"という地点名の位置まで移動する.
以下のコマンドで実行.$ rosrun sobit_navigation_library move_location_example.py
Note
この呼び出したmove_location_example.pyや,C++での呼び出し方(move_location_example.cpp)を使用したい場合,またいろいろなNavigationのツールについても,詳しくはこちらをチェック.
Note
ここで紹介したNavigtionは,基本的な使い方とテスト動作について書いた. ロボットに自律的な移動をしてもらうには,細かいシチュエーションごとに様々な課題があり,これまでSOBITSではいくつかの工夫が考えられてきた. そこで様々な工夫がされたものについては,こちらを参照して下さい.
(上に戻る)
現時点のバッグや新規機能の依頼を確認するためにIssueページ をご覧ください.
(上に)
(上に戻る)