CIR-KIT / fifth_robot_pkg

CIR-KIT5 の開発レポジトリ
BSD 3-Clause "New" or "Revised" License
10 stars 7 forks source link
gazebo navigation ros yp-spur

CIRKIT-5

CIRKIT所有ロボット5号機のリポジトリ

目次

  1. 特記事項
  2. 仕様と寸法
  3.  北陽電機製レーザ式二次元測域センサの使い方
  4. ソフト構成
  5. 最小構成の各ノード提携図
  6. 詳細
  7. インストールとセットアップ
  8. パラメタファイル
  9. マップ作成とラジコン操作
  10. bagfileの取り扱い
  11. GazeboSimulation
  12. GazeboSimulatedMap
  13. GazeboSimulatedNavigation
  14. よくある障害
  15. 新・起動方法 (2017/4/29 追記)
  16. 補遺
  17. 参考

起動(実機)

特記事項

仕様と寸法

北陽電機製レーザ式二次元測域センサの使い方

ipアドレスをスタティックに振り分ける必要があるために次を実行します. enp7s0 は環境によって変えてください.

rosrun fifth_robot_launcher openEth.sh enp7s0
# You should change enp7s0 to fit your machine. you can see it on `ifconfig`

これは ubuntu16.04 版についてなので, 14.04で走らせたいときは eth0 / wlan0 と言った名前の振り分けにしてください.

ソフト構成

最小構成の各ノード提携図

基礎的な部分は RO\S_wikiのmove_base(url)[http://wiki.ros.org/move_base] か Quittaの当該記事(url)[https://qiita.com/MoriKen/items/0b75ab291ab0d95c37c2]を参照してください Updated 10/8

走行モード runnning

地図モード mapmaking

詳細

最小構成では, ノード amcl が トピック map scan odometory によって事故位置を推定し, 何らかの形で与えられたGoalに向けて move_base が経路決定を行い, ドライバ yp-spurがその信号たるcmd_vel を解釈し実行, odom を報告

move_base 内の costmap はパラメータによって挙動が変わる(要調整) yp-spurも挙動が変わる(要調整)

goal/waypoint提供者は外部にあり, third_partyにある ros_waypoint_generatorgoal_senderがそれに当たります. 構成に合わせてlaunchに登録してください.

※更新の予定があります

インストールとセットアップ

モータはパラメタファイルによって修正済み

当該レポジトリを git clone する際に --recursive を付けてsubmoduleごと引っ張ってこれます。

catkin workspace のソース内(src)にクローンした場合はそのまま。 それ以外のところにクローンした場合はsrcディレクトリ上でcatkin_init_workspaceを行えばリポジトリをcatkin workspaceにできます。

まずは必要な packeage を確保してください.

初めに,筑波大学の公式から ssm, yp-spur を各自で自分のシステムにインストールしてください.

注意 yp_spur_ros_bridge はいりません. インストール先がwikiに乗ってないので自動で落とせるようにシェルってます

次に,third_party内のインストールシェルより joy, joy_teleop, navigation がaptでインストールできます.

必要に応じて tf urg_node などを更にapt(手作業)でインストールします.

ROS フル版なら入っています. Third_Party内のいらない奴がが喚くようなら消してください. (現状, driver_commonが不要ですがまた更新がかかった時のために残してあります)

そうすれば catkin_make が通るはずです.

起動(実機)

  1. 接続を確認します.(PC <-> spur, PC <-> PS3コン, PC <-> Hokuyo)
  2. ロボットの電源を入れます.
  3. ネットの接続を全て切断します.右上のアイコンを開いて切断を押してください.
  4. roslaunch fifth_robot_launcher connect.launch ethernet_device:=enp025 を実行します.
    ただし enp0s25 は環境によって変えます.   再接続する際はもう一度これを実行するだけでよいです。

ここまで実機に共通の工程です。

パラメタファイル

マシンによってちょいちょいモータの回転が悪いことはありますので, 適当に調整. fifth_robot_launcher内部のfifth_paramにある. 公式のガイダンスもあるが, RADIUSは右が0で左が1 標準のパラメータファイルは足が遅くなる, おそらく相当に安全側に寄せてある.

マップ作成とラジコン操作

roslaunch fifth_robot_launch teleop.launch

これで, path が適切に通っていればドライバ起動・通信開始・入力受付をやってくれます. 困ったことがあるときは 2 今は3 回生とかに質問くれてもいいですし, issue 飛ばしてくれることを期待します.

bagfileの取り扱い

rosが走ってる時に,

rosbag record --all

で, 記録. 満足したら Ctrl + C で中止. トピックは各個別に指定することもできますが, 面倒なので--allにしてます. ただ, ファイルサイズとトレードオフなので レーザ系のトピック + odom のみでいいと思います.

一旦 terminal を落として, 別のところで core を立ち上げて, terminal 1 にて

rosparam set use_sim_time true

terminal 1 にて

rosrun gmapping slam_gmapping 

現在, マルチエコー機能が使えてないので, ここで読むtopic については scan でよろしい. ただ, マルチエコーを有効とするUTM-30-LX-EWなどを用いるときは scanを読み替えて

scan:=<読み替え先のtopic名,同一でも可能>

とする.

terminal 2 にて

rosbag play --clock <さっきのbag>

終了したところで,\n terminal 1 を 決して閉じず\n terminal 2 にて

 rosrun map_server map_saver -f <map_name>

これでmapあがり.

gazebosimulation

Gazebo について言うなら fifth_robot_description/launch にある fifth_robot_gazebo.launch が roslaunch でたち上がります.

ros_control越しにnavigationとかと提携するのは まだです できます.

fifth_robot_2dnavなどをアップデートして使ってください

gazebosimulatedMap

上に記したマップ作成との差異は, teleopのかわりにgazeboを立ち上げることのみです.

sample

この通りコントローラが出てくるはずです. controll系のパッケージが不足します. fifth_robot_description内部のinstall_simulator.shで必要な奴らをインストール

基本的に上で紹介した方法と同一で実行できるようになりました. ただ, map を作る前に gazebo を落としてコアを立ち上げ直してください.

タイムスタンプがおかしくなって, Detected jump back in time. Clearing TF buffer.とか言い出す例がありますが, ズレは微小で原因が不明(処理落ち?)ですしmap作成に問題がありませんでした. これは無視してください.

mapを作ったらnavigationできます. Willowで作った地図をここにおいておきます. 結構綺麗なものが出来上がります. map

重くなるのでマップデータやbagファイルをmasterやらに置かないでください. 現場で_絶対に_後悔します

gazebosimulatedNavigation

実機なしでもできるシミュレーション. navigation の運用練習やパラメータ調整を迅速化できるので是非身につけてください.

以下wikiと同一

てっとり早いtutorialには, /fifth_robot_description/launch にある実体から

roslaunch fifth_robot_descriotion test.launch

重いですが willow_garage が立ち上がる.

roslaunch fifth_robot_description gazebo_nav.launch laser_topic:=scan

ここはgazeboのレーザードライバが/scanに吐き出しているところを実機となるだけ共通で扱うためにそうしています. 実機では /most_intense をとっています( MultiEcho モード )

rviz

ちょっとばかり設定が込み入っています

当該パッケージにおける Navigation の構成は amcl による自己位置推定( 2D_Pose_Estimate )と move_base によるものですから, 初期位置を与える必要があります.

Fixed_Frame を /map に固定しなければ amcl が作動しません. 上ベインに標準で出ている 2D Pose Estimate をGazebo上の位置と勘案して設定します(rvizのビジュアル上でマウスを使いD&Dでにゅっとやります)

gazebo_nav_tuto1

壁のscanとmapが一致するのが目安となります. ※現実でやる時もmap上で勘案して設定します

gazebo_nav_tuto2

左側ベインのPoseをAddし, トピック( /move_base_simple/goal または /move_base/current_goal )を指定 Unreliable オプションを指定(チェックボックス)した上で, 上ベインに標準で出ている 2D Nav Goal を設定すると走り出します. 緑色で表示されているのはpathで, global_planning の結果が表示されています.

現在, local_plannningも表示されはしますがこれでは短すぎ, コストマップを更新する前に障害物に突っ込んでしまいます.

コストマップは標準の状態ではパブリッシュされません. ROS-wikiの記述によると nav_msgs/Gridcells の local_costmap/inflated_obstacles トピックに障害物評価が表示されるそうなので, (要検証) 確認調整をおねがいします.

gazebo_nav_tuto2

goalについたら矢印の方に向いて止まります. その際, pointcloudが収束(ある程度矢印の向きが揃う)までフラフラしますが, これはデフォルトのパラメータ調整が不適なためです.

よくある障害

新・起動方法(2017/4/29追記)

接続

sudo -s
roslaunch fifth_robot_launcher connec.launch ethernet_device:=<device>

<device> の部分は ifconfigで取得してください. 再接続の際はこれをキルしてもう一度実行するだけで良いです。

ラジコン操作

Joyスティックとの通信準備 ロボットとの接続を確認後、  

roslaunch fifth_robot_launcher telop.launch

上で enable_lrf:=falseと指定するとLRFなしで起動します。

新・操作方法(2018/5/21)

mapmaking

地図作成

rosbagを利用する場合

Joyスティックとの通信準備   ロボットとの接続を確認後、  

roslaunch fifth_robot_launcher telop.launch

別ターミナルで、

rosbag record --all

*面倒なので --all にしてます。

走り終わったら、rosbagをキルして、

roslaunch fifth_robot_launcher generate_map scan_topic:=<topic_name>

<topic_name>はLaserScanのトピック名を指定してください。
別ターミナルで、

rosbag play --clock [先ほど録った.bagファイル]

再生し終わったら、

rosrun map_server map_saver -f [地図ファイルの名前]

改訂版 ただしdevelopブランチ内の当該作業スペースに限る( 2018/6/19 )

ターミナル1:

roslaunch fifth_robot_description teleop_keyboard.launch

ターミナル2:

rosbag record –all

気が済んだらターミナル2で Ctrl + C をして終了 その後、ターミナル1も Ctrl + C で終了 ターミナル2:

roslaunch fifth_robot_description generate_map_gazebo.launch  
scan_topic:=front_scan

ターミナル3:

rosbag play –clock <bag ファイル >
rosrun map_server map_saver -f < マップ名 >

リアルタイムで地図作成する場合

接続を確認後

roslaunch fifth_robot_launcher telop.launch

別ターミナルで、

roslaunch fifth_robot_launcher generate_map.launch scan_topic:=<topic_name>

<topic_name>はLaserScanのトピック名を指定してください。

走り終わったら、

rosrun map_server map_saver -f [地図ファイルの名前]

Waypoint 生成

接続を確認後、

roslaunch fifth_robot_launcher generate_waipoint.launch map:=[map_file.yaml]

別ターミナルで、

rosbag play [bag_file.bag]

bagファイル再生後、

rosrun ros_waypoint_generator ros_waypoint_generator

改訂版 ただしdevelopブランチ内の当該作業スペースに限る( 2018/6/19 )

ターミナル1:

roslaunch fifth_robot_description generate_waypoint_gazebo.launch

ターミナル2:

rosrun map_server map_server [map_file.yaml(絶対パスで)]

ターミナル3:

rosbag play --clock [bag_file.bag]

ターミナル3:

rosrun ros_waypoint_generator ros_waypoint_saver

Planner Test

waypointなしで move_baseを走らせる。navigationの動作テストに使います。
接続を確認後、

roslaunch fifth_robot_launcher planner_test.launch map:=<map_file.yaml>

Navigation

roslaunch fifth_robot_launcher navigation.launch map:=<map_file.yaml> waypoint:=<waypoint.csv>

補遺

navigation stack を理解する MoriKen様の非常に有益なアルゴリズムから理解できるページ
https://qiita.com/MoriKen/items/0b75ab291ab0d95c37c2

Using rviz with the Navigation Stack navigation周りは可視化する要素が多くややこしいので必要
http://wiki.ros.org/navigation/Tutorials/Using%20rviz%20with%20the%20Navigation%20Stack

Basic Navigation Tuning Guide かなり有益. 挙動の実用的な調整に非常によい. ここからたどるリンクもよい
http://wiki.ros.org/navigation/Tutorials/Navigation%20Tuning%20Guide

Navigation関連の議論と質問はこちら
https://github.com/CIR-KIT/fifth_robot_pkg/issues/79