Skip to content

TeamSOBITS/sobit_navigation_stack

Repository files navigation

JP | EN

Contributors Forks Stargazers Issues

SOBIT Navigation Stack

目次
  1. 概要
  2. セットアップ
  3. Navigationの主な使い方
  4. 参考文献

概要

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

インストール方法

  1. ROSのsrcフォルダに移動します.
    $ cd ~/catkin_ws/src/
  2. 本レポジトリをcloneします.
    $ git clone https://github.com/TeamSOBITS/sobit_navigation_stack.git
  3. レポジトリの中へ移動します.
    $ cd sobit_navigation_stack
  4. 依存パッケージをインストールします.
    • 通常のインストール方法
      $ bash install.sh
    • Navigationを深く勉強したい人向け
      $ bash install.sh clone_mode
      Navigation関係のパッケージをgit cloneによりインストールすることで,プログラムコードを編集して改良することができる
      プログラムコードはパッケージ一覧のところにまとめてインストールされる
  5. パッケージをコンパイルします.
    $ cd ~/catkin_ws/
    $ catkin_make

(上に戻る)

Navigationの主な使い方

Navigationを使う上での基本的な流れ

  1. 地図生成
    • 目的地まで,障害物を回避した経路を生成するため,ロボットが事前に地図を知る必要がある
    • 地図の障害物のデータと,現在ロボットが取得しているデータから,ロボットが現在どこにいるのかを推測する
  2. 地点登録
    • 生成した地図の,どの位置からどの位置までの経路を生成するかのポイントとなる位置を登録する
  3. actionlibによって呼び出す
    • ロボットの現在の地点から登録した地点まで,地図上の障害物がない安全なエリアに経路生成をする
    • 到着まで時間がかかることから,結果だけでなく途中経過も発信することのできるactionlib通信を用いる

地図生成

  1. ロボットを起動する
    ロボット本体と,2D-LiDARを起動させる.
    詳しくは,それぞれのロボットのgit hub(PROEDUMINI)を確認.
    HSR(シミュレータ)の場合はsigverseやHSR本体のセンサデータを使えるように起動する.
  2. 地図生成を起動
    以下のコマンドで起動.
    • 実機ロボットの場合
      $ roslaunch sobit_mapping gmapping.launch
    • HSRの場合
      $ roslaunch sobit_mapping hsr_gmapping.launch
  3. 人間が操作できるようにteleop.launchを起動
    以下のコマンドで起動.
    • 実機ロボットの場合
      $ roslaunch sobit_mapping teleop.launch
    • HSRの場合
      $ roslaunch sobit_mapping hsr_teleop.launch
  4. ロボットを操作して,Navigationしたい環境の地図を保存
    起動したxtermターミナル(青いターミナル)で操作方法を確認しながら,Rvizの地図を見てロボットを操作する.
    地図ができたら,save_map_command.pyのターミナル(青いターミナル)でEnterボタンを押して地図を保存する.
    保存された地図画像(pgmファイル)と,その詳細情報が入ったymalデータは,mapに,「map_ + 保存した日時 + .yaml」のファイル名で保存される.

Note

これを人間がロボットを操作せずに,自律的に行えないのか?と思ったら自律地図生成の仕方をチェック.

Note

これは2D LiDARのみでの地図生成であるが,一脚テーブルのような立体的な障害物は2D LiDARでの検出ができない. そこでロボットの3D cameraを用いることで解決するカメラを用いた地図生成についてをチェック.

地点登録

  1. 生成した地図のパスをNavigationに書き換える
    生成した地図のパスを指定する.

    map_fileは,自分で生成した地図を指定する.
    例えば,example.pgmというマップの場合は,以下のように指定する.

    <arg name="map_file" default="$(find sobit_mapping)/map/example.yaml"/>

    ※ 拡張子が.ymalになることに注意.直接画像ファイルを指定するのではなく,地図のymalデータファイルを指定する.

  2. ロボットを起動する
    ロボット本体と,2D-LiDARを起動させる.
    詳しくは,それぞれのロボットのgit hub(PROEDUMINI)を確認.
    HSR(シミュレータ)の場合はsigverseやHSR本体のセンサデータを使えるように起動する.

  3. 地点登録を起動する
    実機の場合は/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
  4. 地点を登録する
    この機能の概要としてロボットのいる位置が登録されるので,ロボットを地点登録したい位置まで移動させる.
    ロボットの移動のさせ方は以下2通りがあるので好きな方を選ぶ.

    • Navigationの機能を用いる
      起動したRvizの2D Nav Goalをmapにクリックすることでロボットが移動する.
    • 地図生成したときのように人間が操作
      以下のコマンドで実行
      • 実機ロボットの場合
        $ roslaunch sobit_mapping teleop.launch
      • HSRの場合
        $ roslaunch sobit_mapping hsr_teleop.launch

    ロボットを登録させたい位置まで移動.
    そこで地点登録のターミナルに地点名を入力し,Enterを押して登録完了.

  5. 保存
    4を繰り返していくことで地点登録したい全ての地点を登録する.
    地点登録が終わったら,端末で「q」と入力して保存する.
    地点登録された情報が入ったymalデータは,mapに,「map_location_ + 保存した日時 + .yaml」のファイル名で保存される.

Note

ここではロボットを使っての地点登録方法を書いたが,RoboCupでは競技環境を使える時間に限りがある. そのため,競技環境が使えるときは,なるべく競技練習の時間に充てることが望ましい. そこで,地点登録をロボットを使わずにすることで時間を有効にすることができる. 詳しい使い方はロボットを用いずに地点登録をチェック.

Note

地点登録結果をRvizで見たり,追加したい場合はこちら

actionlibによって呼び出す(実際にNavigationする)

  1. map_fileを地図生成した地図に書き換える
    Navigationに地図を登録する.
  2. 地点登録した情報をrosparamに登録する
    /sobit_mapping/launch/load_location_file.launchのrosparamのfileを,自分で生成した地点登録ファイルに書き換える.
    例えば,map_location_example.ymalという地点登録ファイルの場合は,以下のように指定する.
    <rosparam command="load" file="$(find sobit_mapping)/map/map_location_example.yaml"/>
    書き換えたら,以下のコマンドでrosparamに登録する.
    $ roslaunch sobit_mapping load_location_file.launch
    このlaunchファイルはターミナルが終了します
  3. ロボットを起動する
    ロボット本体と,2D-LiDARを起動させる.
    詳しくは,それぞれのロボットのgit hub(PROEDUMINI)を確認.
    HSR(シミュレータ)の場合はsigverseやHSR本体のセンサデータを使えるように起動する.
  4. 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
  5. アクションクライアントを起動する
    これは基本的にプログラムから起動する.
    地点登録した地点名ならどこにでも移動することが可能.
    移動する例として,/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ページ をご覧ください.

(上に)

参考文献

(上に戻る)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •