CIR-KIT / fifth_robot_pkg

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

Navigation のためのパラメータ調整 #122

Closed tanacchi closed 6 years ago

tanacchi commented 6 years ago

後輩たちへ

Navigation Stack の全貌を理解した上で頑張ってもらいところだけど 時間がないので最悪パラメータ調整のハウツーだけで、いいです、今回は。


作業内容

gazebo 上で 「goal に対し安定した navigation ができる」ことを目標とします。

  1. シミュレーション環境を立ち上げる roslaunch fifth_robot_description navigation.launch

  2. rviz 上で 2D Nav Goal をマップ上に置き、動作を観察する

  3. シミュレーション環境をキルする

  4. fifth_robot_description 内の config/navigation/ ディレクトリ以下にあるパラメータファイル群をいじる

1 ~ 4 を繰り返す

変化があったら、その都度コミットし、 変化の詳細を書くこと

waypoint 関係に関しては Cartographer の SubmapTexture から geometry_msgs::Pose slice_pose が取得する方法を検討中 別の Issue で扱うことにします


パラメータ調整のための参考資料

amcl

ROSのナビゲーションamclについて理解を深めてみる 公式ドキュメント

move_base

ROSのナビゲーションmove_baseについて理解を深めてみる ROS move baseでdwa local plannerを使ってみる ROS Navigation Tuning Guide 公式ドキュメント

gmapping

gmapping 公式ドキュメント


理解のための参考資料

Navigation Stack を理解する ←おすすめ ROSの活用による屋外の歩行者空間に適応した自律移動ロボットの開発 navigationスタックを理解できそう CIR-KIT-withB 5号機ドキュメント2016 navigation 公式ドキュメント amcl 公式ドキュメント move_base 公式ドキュメント Setup and Configuration of the Navigation Stack on a Robot costmap_2d 公式ドキュメント Configuring Layered Costmaps costmap_2d staticmap costmap_2d obstacles base_local_planner 公式ドキュメント navigationTroubleshooting


ちなみにCartographer の時もそうだったけど これらは全てこれまでに自分が一通り読んで 再度読むべきと思ってブックマークに登録してたものです

tanacchi commented 6 years ago

思い出したけど amcl はLaserScan を読むから自己位置推定は2次元データに頼るしか無いけど constmap 生成は PointCloud2 も使えるから障害物回避は3次元データが使えるな

tanacchi commented 6 years ago

mcl_3dl という 3D データを用いた自己位置推定をしてくれる パッケージがあることが判明したので amcl での自律移動が完成したら挑戦してみたいと思います。 Cartographer を研究した甲斐がココで出るかもしれない

tanacchi commented 6 years ago

とりあえず amcl がまともに動いていないのでそこから

tanacchi commented 6 years ago

amcl 解決しました。

costmap の方は obstacle layer がうまく反映されていない様子

tanacchi commented 6 years ago

local_costmap が反映されるようになりました。 planning もうまく行ってるみたいです。

local_costmap_works

こんな感じの WARN が最初から吐かれ続けてて、途中で自己姿勢が破綻して死ぬ

[ WARN] [1536978662.922726679, 1300.000000000]: Costmap2DROS transform timeout. Current time: 1300.0000, global_pose stamp: 1299.6100, tolerance: 0.3000 [ WARN] [1536978662.922797335, 1300.000000000]: Could not get robot pose, cancelling reconfiguration

tanacchi commented 6 years ago

move_base が odom を読めていなかったのでリマップしました21b139 navigation 中に自己位置が発散するのは変わりないですが、 自力で復帰してくれるようになりました。

自己位置が発散するときに出されていたメッセージ↓

[ WARN] [1536980660.581022365, 1330.030000000]: Unable to get starting pose of robot, unable to create global plan [ WARN] [1536980660.669485799, 1330.110000000]: Map update loop missed its desired rate of 4.0000Hz... the loop actually took 0.2700 seconds [ WARN] [1536980660.675607970, 1330.120000000]: Control loop missed its desired rate of 10.0000Hz... the loop actually took 0.3300 seconds [ WARN] [1536980661.549016316, 1330.280000000]: Unable to get starting pose of robot, unable to create global plan [ WARN] [1536980661.717854315, 1330.450000000]: Control loop missed its desired rate of 10.0000Hz... the loop actually took 0.3300 seconds

とりあえず WARN が吐かれている部分を1つずつ潰していこうかと思います

tanacchi commented 6 years ago

gazobo 上のロボットモデルに合わせて footprint, obstacle_range, raytrace_range を再調整したら 発散も殆ど無くうまいこと自律移動できるようになりました。

障害物ギリギリのところを攻めていってるのでもうすこし余裕を持たせたい

tanacchi commented 6 years ago

上の方で言っていた WARN が吐かれる問題は解決できました。 ( transform_tolerance パラメータの位置が間違っていました。。。)

navigation 精度はかなり向上し、多少の障害物の追加には対応できる程度になりました。

しかしまだ navigation 中にいろいろ言われますねえ

[ WARN] [1536994673.061862824, 1308.860000000]: Control loop missed its desired rate of 10.0000Hz... the loop actually took 0.3400 seconds [ WARN] [1536994674.169948289, 1309.280000000]: Map update loop missed its desired rate of 4.0000Hz... the loop actually took 0.2900 seconds [ WARN] [1536994674.173181728, 1309.280000000]: Control loop missed its desired rate of 10.0000Hz... the loop actually took 0.4200 seconds [ERROR] [1536994675.589021925, 1309.780000000]: Extrapolation Error: Lookup would require extrapolation into the future. Requested time 1309.280000000 but the latest data is at time 1308.970000000, when looking up transform from frame [odom] to frame [map] [ERROR] [1536994675.591052334, 1309.790000000]: Global Frame: odom Plan Frame size 306: map [ WARN] [1536994675.591398551, 1309.790000000]: Could not transform the global plan to the frame of the controller

tanacchi commented 6 years ago

Global Planner の設定を追加すると WARN が激減しました。

[ WARN] [1537075729.544982814, 1399.790000000]: Map update loop missed its desired rate of 4.0000Hz... the loop actually took 0.2900 seconds [ WARN] [1537075729.546536883, 1399.800000000]: Control loop missed its desired rate of 10.0000Hz... the loop actually took 0.3400 seconds

残りはこのくらいか

壁のギリギリをすり抜けようとして段差に引っかかって死んでるので対処しましょう

tanacchi commented 6 years ago

上の WARN については シミュレータ動かしながらだし仕方ないということで妥協しようかな。。

そもそも planner 関連のパラメータファイルが読まれていない説が浮上した

tanacchi commented 6 years ago

読み込めていることが確認できました。

次にmcl_3dl の導入にも挑戦してみようかと思います

tanacchi commented 6 years ago

amcl での自己位置推定&自律移動はほぼ完成したので閉じます