Movatterモバイル変換


[0]ホーム

URL:


Yoshitaka HARA, profile picture
Uploaded byYoshitaka HARA
43,612 views

ROS を用いた自律移動ロボットのシステム構築

学術研究に役立った場合は、以下の論文を参考文献として引用して頂ければ幸いです。原 祥尭: "ROSを用いた自律走行", 日本ロボット学会誌, vol. 35, no. 4, pp. 286--290, 2017.https://www.jstage.jst.go.jp/article/jrsj/35/4/35_35_286/_article/-char/ja日本ロボット学会 第99回/第131回ロボット工学セミナー「ロボットの作り方 ~移動ロボットの基本と ROS によるナビゲーション実習~」講演資料

ROSを用いた自律移動ロボットのシステム構築千葉工業大学 未来ロボット技術研究センター原 祥尭(HARA, Yoshitaka)ロボット工学セミナー 2016-06-26
つくばチャレンジでの自律走行の様子1ロボット工学セミナー 2016-06-26https://youtu.be/FzouCV4_Jnw
開発したロボットの外観と搭載センサ2ロボット工学セミナー 2016-06-262D-LIDAR #5, #6(水平、左右)2D-LIDAR #2, #3, #4(ピッチ・ロール傾斜)2D-LIDAR #1(水平、前方)IMUモータエンコーダ3D-LIDARGNSS(参照値用)単眼カメラ1.5 m
自律走行システムの構成図3ロボット工学セミナー 2016-06-26Linux PCLIDARHandlerIMUOccupancyGrid MapLIDARHandlerIMUHandlerObstacleDetectorTransformBroadcasterGyroOdometerBehaviorPlannerLocalizerPath-MotionPlannerVehicleControllerMotorControllerWaypointRouteSoundPlayerCostmapBuilderLIDARLIDARMotorMotorDeviceProcessFileData FlowTargetDetector
Contents 4ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
自律走行に使用できるデバイスとパッケージ5ロボット工学セミナー 2016-06-26 センサ http://wiki.ros.org/Sensors 移動ロボット台車 http://wiki.ros.org/Robots T-frog i-Cart mini(T-frog モータコントローラ):約28万円http://t-frog.com/ Doog TEC-1(T-frog モータコントローラ):約8万円http://www.doog-inc.com/ T-frog モータコントローラ ROS 対応パッケージ ypspur_ros:公式パッケージ(東北大 渡辺先生)https://github.com/openspur/ypspur_ros ypspur_ros_bridge:旧パッケージ(筑波大 ロボ研)http://www.roboken.iit.tsukuba.ac.jp/platform/gitweb/ open-rdc icart_mini:Gazebo 対応(千葉工大 林原研)https://github.com/open-rdc/icart ROS で使える3次元シミュレータROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自律走行に関するパッケージとその機能6ロボット工学セミナー 2016-06-26 slam_gmapping SLAM、地図生成 navigation 自己位置推定 占有格子地図生成、障害物情報の管理 大域的経路計画 局所的動作計画(障害物回避)自律走行に必要な機能をひととおり提供、C++で実装されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自律走行を行う際のワークフロー7ロボット工学セミナー 2016-06-261. ロボットを手動走行させて環境のセンサデータを取得、bag ファイルとして保存2. bag ファイルを再生し、slam_gmapping パッケージを使用してオフラインで地図生成(オンラインも可能)3. 生成した地図に基づき、navigation パッケージを使用して自律走行ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
slam_gmapping パッケージの構成8ロボット工学セミナー 2016-06-26 gmapping:SLAM、地図生成の実行(ROSラッパー) openslam_gmapping:OpenSLAM で公開されている Rao-BlackwellizedParticle Filter による Grid-based SLAM(FastSLAM 2.0 での Grid Mapping)slam_gmappinggmappingopenslam_gmappingメタパッケージパッケージ(実行ファイル)パッケージ(ソースのみ)凡例ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
OpenSLAM とは9ロボット工学セミナー 2016-06-26 SLAM の各種アルゴリズムをオープンソースで公開する Web サイト EKF, RBPF, Graph-based SLAM, ICPマッチングなど複数の手法の実装あり 研究者が各手法を比較するために公開 ライブラリではないROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
navigation パッケージの構成10ロボット工学セミナー 2016-06-26 map_server:既存地図の配信 amcl:自己位置推定 move_base:移動タスクの実行 costmap_2d:コストマップの生成 nav_core:行動インタフェース定義 navfn:大域的経路計画 base_local_planner:局所的動作計画 *_recovery:スタックした場合の復帰動作navigationmove_basemap_server amclnav_corenavfn base_local_plannerclear_costmap_recoveryrotate_recoverycostmap_2dメタパッケージパッケージ(実行ファイル)パッケージ(ソースのみ)凡例ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
nav_core によるパッケージの入れ替え11ロボット工学セミナー 2016-06-26 ヘッダファイルでのインタフェース定義のみ(純粋仮想関数) 大域的経路計画:BaseGlobalPlanner 局所的動作計画:BaseLocalPlanner スタック復帰動作:RecoveryBehavior 実装は move_base のパラメータで実行時に変更可能 ROS の pluginlib という機能で実現されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
入れ替え可能なパッケージとそのアルゴリズム12ロボット工学セミナー 2016-06-26 大域的経路計画(BaseGlobalPlanner) navfn:ダイクストラ法 global_planner:A*/ダイクストラ法 carrot_planner:ゴールに向かって直進 局所的動作計画(BaseLocalPlanner) base_local_planner:Dynamic Window Approach dwa_local_planner:Dynamic Window Approach の別実装 スタック復帰動作(RecoveryBehavior) clear_costmap_recovery:コストマップをクリア rotate_recovery:ロボットが旋回して障害物を測定 move_slow_and_clear:コストマップをクリア、移動速度を制限ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
標準で使用されるアルゴリズムのまとめ13ロボット工学セミナー 2016-06-26 SLAM、地図生成(gmapping)Rao-Blackwellized Particle Filter による Grid-based SLAM(FastSLAM 2.0 での Grid Mapping) 自己位置推定(amcl)Adaptive/Augmented Monte Carlo Localization 経路計画(move_base)Global Dynamic Window Approach 大域的経路計画(navfn)Navigation Function に基づくダイクストラ法 局所的動作計画(base_local_planner)Dynamic Window ApproachROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 14ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
自己位置推定、地図生成、SLAM とは15ロボット工学セミナー 2016-06-26自己位置推定(Localization)地図生成(Mapping withKnown Poses)SLAM(SimultaneousLocalizationand Mapping)内界センサデータ外界センサデータ地図ロボット位置ロボット位置(既知)外界センサデータ地図内界センサデータ外界センサデータロボット位置地図ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自己位置推定と SLAM の手法16ロボット工学セミナー 2016-06-26スキャンマッチング系 Bayes Filter 系Graph-BasedSLAM 系性質 逐次最適化、オンラインフィルタリング、オンライン全体最適化、オフライン手法の概要点群を最適化計算で位置合わせ事前確率と尤度を確率的に融合ロボット位置やランドマーク位置(地図)を表すグラフを最適化詳細マッチング 大域マッチング初期位置あり、ユークリッド空間で対応付け初期位置なし、特徴量空間で対応付け手法の例 ICP、NDT などSpin Image、FPFH、PPF、SHOT などEKF、HF、PF、RBPF などポーズ調整、バンドル調整、完全 SLAM以下のパッケージは一部の手法を提供しているに過ぎない amcl:Particle Filter (PF) による Monte Carlo Localization gmapping:Rao-Blackwellized Particle Filter (RBPF)SLAM の性能は屋外環境に対して不充分な場合も多いROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
最尤推定、最大事後確率推定、ベイズ推定17ロボット工学セミナー 2016-06-26自己位置:xt確率密度:p(xt)尤度 p(zt|xt,ut)(スキャンなど:zt)ベイズ推定事後確率の分布を推定最大事後確率推定事後確率のモードを推定最尤推定尤度のみのモードを推定事前確率 p(xt|ut)(オドメトリなど:ut)事後確率 p(xt|ut,zt)事後確率=尤度×事前確率ベイズの定理による自己位置推定の概念図Bayes Filter は、ベイズの定理に基づくベイズ推定によって自己位置の事後確率分布を求めるROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Bayes Filter による自己位置推定18ロボット工学セミナー 2016-06-26 ロボットの自己位置の確率分布を求める 地図は事前に与えられている地図:m スキャン計測:zt自己位置(時刻t-1):xt-1真の自己位置(時刻t):xtオドメトリによる自己位置(時刻t):T(ut)xt-1平面図オドメトリ動作(移動量):ut対応付けROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
確率的自己位置推定の隠れマルコフモデル19ロボット工学セミナー 2016-06-26xt-1 xtut-1 utzt-1 ztm自己位置推定のグラフィカルモデルmap: mxt+1ut+1zt+1robot pose: x(hidden variable)motion: u(e.g. odometry)measurement: z(e.g. laser scan)自己位置の時系列を1次マルコフ過程と仮定ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Bayes Filter の定式化20ロボット工学セミナー 2016-06-26 漸化式で時系列の確率過程を表現 Extended Kalman Filter、Histogram Filter などはすべて Bayes Filter の理論に基づいた実装時刻tの自己位置xtの事後確率尤度(計測モデル)事前確率x:ロボット位置 m:地図u:制御動作(オドメトリなど) z:環境計測(レーザスキャンなど)動作モデル 時刻t-1の自己位置xt-1ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Bayes Filter の数学的導出21ロボット工学セミナー 2016-06-26時刻tの自己位置xtの事後確率尤度(計測モデル)事前確率動作モデル 時刻t-1の自己位置xt-1ベイズの定理条件付き独立性(過去には非依存) 全確率の定理条件付き独立性(1次マルコフ性)条件付き独立性漸化式として定式化ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
ベイズの定理の適用22ロボット工学セミナー 2016-06-26 ベイズの定理 条件付きベイズの定理 自己位置推定に適用 x:ロボット位置m:地図u:制御動作(オドメトリ)z:環境計測(レーザスキャン)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
マルコフ性の仮定と条件付き独立性の適用23ロボット工学セミナー 2016-06-261次マルコフ性を仮定 現在の状態は、1時刻前の状態にだけ依存 それ以前の状態や他のデータとは独立現在の環境計測ztは、現在の状態である自己位置xtと地図mにのみ依存現在の状態である自己位置xtは、1時刻前の状態xt-1とそれ以後の制御動作utにのみ依存ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
全確率の定理の適用24ロボット工学セミナー 2016-06-26 全確率の定理 条件付き全確率の定理 自己位置推定に適用隠れ変数xt-1を導入x:ロボット位置m:地図u:制御動作(オドメトリ)z:環境計測(レーザスキャン)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 25ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
Particle Filter の定式化26ロボット工学セミナー 2016-06-26 Bayes Filter の一種だが、定式化は若干異なる 各パーティクルは、時刻tの自己位置だけでなく、時刻1から時刻tの走行軌跡を保持する 動作モデルによる事前確率の計算に積分なし時刻1からtの走行軌跡xt:tの事後確率尤度(計測モデル)事前確率動作モデル 時刻1からt-1の走行軌跡x1:t-1ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Particle Filter の数学的導出27ロボット工学セミナー 2016-06-26時刻1からtの走行軌跡xt:tの事後確率尤度(計測モデル)事前確率動作モデル 時刻1からt-1の走行軌跡x1:t-1ベイズの定理条件付き独立性(過去には非依存) 乗法定理条件付き独立性(1次マルコフ性)条件付き独立性漸化式として定式化ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
乗法定理の適用(Particle Filter の場合)28ロボット工学セミナー 2016-06-26 乗法定理(条件付き確率) 条件付き乗法定理(3変数での条件付き確率) 自己位置推定に適用x:ロボット位置m:地図u:制御動作(オドメトリ)z:環境計測(レーザスキャン)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Adaptive Monte Carlo Localization29ロボット工学セミナー 2016-06-26 Particle Filter による2次元3自由度での確率的自己位置推定(Monte Carlo Localization) オドメトリ動作モデル ビーム計測モデル/尤度場計測モデル KLD-Sampling による Adaptive MCL推定位置の不確かさに応じて、パーティクル数を適応的に調整 Augmented MCL真値周辺のパーティクルの喪失に対処するために、ランダムパーティクルを挿入ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Adaptive Monte Carlo Localization30ロボット工学セミナー 2016-06-26処理イメージ(平面図)時刻:t-1パーティクルによって表されるロボット位置の複数仮説1. 予測:ロボット位置時刻:t動作モデルにより時刻 t のロボット位置を予測ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Adaptive Monte Carlo Localization31ロボット工学セミナー 2016-06-26ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ処理イメージ(平面図)スキャンと占有格子地図の重なり度合いを評価2. 尤度計算:占有格子地図:現時刻のスキャン計測:尤度事前に与えられた1つの地図に対して、各パーティクルのスキャンを評価計測モデルにより尤度を計算
Adaptive Monte Carlo Localization32ロボット工学セミナー 2016-06-263. リサンプリング処理イメージ(平面図):尤度 尤度の高いパーティクルは自身のコピーを多く残す 尤度の低いパーティクルは消滅 KLD-Sampling により、推定位置の不確かさに応じてパーティクル数を調整ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 33ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
Rao-Blackwellized Particle Filter の定式化34ロボット工学セミナー 2016-06-26ロボット走行軌跡 x1:tParticle Filter で推定地図 mBinary Bayes Filter で推定ロボット走行軌跡と地図の同時確率ロボット走行軌跡と地図を求める完全 SLAM、独立性の仮定により因子分解して解くx:ロボット位置 m:地図u:制御動作(オドメトリなど) z:環境計測(レーザスキャンなど)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
提案分布における最適化計算の利用35ロボット工学セミナー 2016-06-26:ロボット位置真値スキャンマッチングで真値に近付ける真値多数のパーティクルによる提案分布(高精度だが計算コスト大)少数のパーティクルと最適化計算による提案分布(FastSLAM 2.0)最適化計算で失敗の危険ありROS gmapping もこの枠組計算コストはパーティクル数に依存するので、少数のパーティクルそれぞれで最適化計算を併用ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Rao-Blackwellized Particle Filter SLAM36ロボット工学セミナー 2016-06-26処理イメージ(平面図)時刻:t-1パーティクルによって表されるロボット位置の複数仮説1. 予測:ロボット位置時刻:t動作モデルにより時刻 t のロボット位置を予測ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Rao-Blackwellized Particle Filter SLAM37ロボット工学セミナー 2016-06-26ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ処理イメージ(平面図)スキャンを占有格子地図にGreedy Scan Matching(FastSLAM 2.0)2. 尤度計算:占有格子地図:現時刻のスキャン計測:尤度Rao-Blackwellization により各パーティクルごとに地図を持っている計測モデルにより尤度を計算
Rao-Blackwellized Particle Filter SLAM38ロボット工学セミナー 2016-06-263. リサンプリング処理イメージ(平面図):尤度 尤度の高いパーティクルは自身のコピーを多く残す 尤度の低いパーティクルは消滅ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Rao-Blackwellized Particle Filter SLAM39ロボット工学セミナー 2016-06-264. 地図生成処理イメージ(平面図)Rao-Blackwellization により各パーティクルごとにそれぞれの地図を生成する:占有格子地図:現時刻のスキャン計測レーザのレイキャスティングによりBinary Bayes Filter で占有格子地図を生成ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 40ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
自律走行時のデータの流れ41ロボット工学セミナー 2016-06-26http://wiki.ros.org/move_baseROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
costmap_2d によるコストマップの生成42ロボット工学セミナー 2016-06-26 レーザスキャンまたは3次元点群のデータを用いて、2次元/3次元の占有格子地図を生成 レイキャスティングにより、占有/フリー/未知の3状態で障害物情報を管理 占有格子地図の障害物をロボットの内接円半径の大きさで膨張させ、x, y の2自由度コンフィグレーション空間として2次元コストマップを生成 グローバルコストマップとローカルコストマップの2種類を生成ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
costmap_2d によるコストマップの生成43ロボット工学セミナー 2016-06-26http://wiki.ros.org/costmap_2dROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
コストマップを生成する枠組み44ロボット工学セミナー 2016-06-26 ROS Hydro 以降、costmap_2d の構成が変更http://wiki.ros.org/costmap_2dhttp://wiki.ros.org/costmap_2d/hydrohttp://wiki.ros.org/hydro/Migration#Navigation_-_Costmap2D LayeredCostmap という仕組みが導入された Static Map Layer:SLAM で生成した静的地図 Obstacle Map Layer:検出した障害物の蓄積と消去(ObstacleCostmapPlugin / VoxelCostmapPlugin) Inflation Layer:障害物を膨張したコンフィグレーション空間 ROS の pluginlib という機能で実現されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自律走行時のデータの流れ45ロボット工学セミナー 2016-06-26http://wiki.ros.org/move_baseROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
navfn の大域的経路計画46ロボット工学セミナー 2016-06-26 Navigation Function と呼ばれるポテンシャル場で評価 ゴールまでの距離と障害物からの距離をコストとする グローバルコストマップに基づいて処理 格子地図に対して、ダイクストラ法でポテンシャル場の最小コストとなる経路を探索 各セルのポテンシャル場のコストを計算しながらダイクストラ法で探索し、ゴールまでのグローバルパスを計画 ロボットの方向は考慮しない(円形と仮定) 方向によっては障害物と衝突する経路が計画されるROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
navfn による大域的経路計画の例47ロボット工学セミナー 2016-06-26グローバルパススタート5 mゴールROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ占有格子地図
navfn による大域的経路計画の例48ロボット工学セミナー 2016-06-26グローバルパススタート5 mグローバルコストマップゴール障害物から離れた経路を計画ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
ダイクストラ法とA*の違い49ロボット工学セミナー 2016-06-26 ダイクストラ法幅優先探索をコストを評価するように拡張した、最良優先探索と呼ばれる手法の一種 A*(A-Star)ヒューリスティック関数でコストの予測値を追加した、ダイクストラ法の改良版https://en.wikipedia.org/wiki/Dijkstra's_algorithmhttps://en.wikipedia.org/wiki/A*_search_algorithmROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自律走行時のデータの流れ50ロボット工学セミナー 2016-06-26http://wiki.ros.org/move_baseROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
base_local_planner の局所的動作計画51ロボット工学セミナー 2016-06-26 大域的経路計画によるグローバルパスに追従しつつ、障害物を回避する動作(速度)を計画 Dynamic Window Approach を使用 ロボットのキネマティクス(運動モデル)を考慮した軌跡 現在の速度に基づき、ダイナミクスを考慮して実行可能な複数のローカルパス候補を生成 評価関数により、グローバルパスに近く、かつ障害物から離れたローカルパスの動作を選択 ローカルコストマップに基づいて処理ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Dynamic Window Approach52ロボット工学セミナー 2016-06-26平面図ロボット位置ローカルパス候補グローバルパス障害物並進速度 v回転角速度ω最大速度範囲Dynamic Window現在速度ローカルパス候補キネマティクスとダイナミクスを考慮してローカルパス候補の軌跡を生成、離散化してコストを評価速度の決定ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
DynamicWindowApproachのコスト評価関数53ロボット工学セミナー 2016-06-26軌跡コスト =経路距離スケール × ローカルパス端点とグローバルパスの距離+ ゴール距離スケール × ローカルパス端点とゴールの距離+ 障害物スケール × ローカルパス上での最大障害物コスト上記の ROS の実装は、オリジナル論文の評価関数とは異なる平面図ロボット位置ローカルパス候補グローバルパス障害物ゴールコストマップ 距離は各セルごとに事前計算 ローカルパスの振動を抑制するため、一定距離は逆符号の速度を無効化ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自律走行時のデータの流れ54ロボット工学セミナー 2016-06-26http://wiki.ros.org/move_baseROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
スタックした場合の復帰動作の状態遷移55ロボット工学セミナー 2016-06-26http://wiki.ros.org/move_baseROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 56ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
ROS に関する情報源57ロボット工学セミナー 2016-06-26 ROS.org(パッケージリスト、ニュースなど)http://www.ros.org/ ROS Wiki(共同編集文章)http://wiki.ros.org/ ROS Answers(質問掲示板)http://answers.ros.org/ ROS Index(パッケージ情報、2015年ローンチ、ベータ版)http://rosindex.github.io/ GitHub Organizations(ソースコード、Issue Trackers)https://github.com/ros-planninghttps://github.com/ros-perception など C++ / Python API(Doxygen / Sphinx 生成文章)http://docs.ros.org/api/ 以下の各ディレクトリ メーリングリストhttp://lists.ros.org/lurker/list/ros-users.en.html情報が実装と一致しない場合も多い(特に日本語ページは古い)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
ROS Index(パッケージ情報を集約)58ロボット工学セミナー 2016-06-26README や package.xml からの自動生成文章GitHub などへのリンクROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
GitHub Organizations(コード、Issues)59ロボット工学セミナー 2016-06-26パッケージの種類ごとに組織されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
ROS C++/Python API (Doxygen/Sphinx)60ロボット工学セミナー 2016-06-26ソースコードのコメントからの自動生成文章ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
自律走行の実現に役立つチュートリアルページ61ロボット工学セミナー 2016-06-26 ROS 概要http://wiki.ros.org/ROS/StartGuide ROS 基本チュートリアル(プロセス間通信、開発ツールなど)http://wiki.ros.org/ROS/Tutorialshttp://wiki.ros.org/roscpp_tutorials/Tutorials tf チュートリアル(座標変換)http://wiki.ros.org/tf/Tutorialshttp://wiki.ros.org/tf2/Tutorials navigation チュートリアル(自律走行)http://wiki.ros.org/navigation/Tutorials/RobotSetuphttp://wiki.ros.org/navigation/Tutorials/Navigation%20Tuning%20Guide slam_gmapping チュートリアル(SLAM、地図生成)http://wiki.ros.org/slam_gmapping/Tutorials/MappingFromLoggedData rviz チュートリアル(ビューア)http://wiki.ros.org/rviz/Tutorialshttp://wiki.ros.org/navigation/Tutorials/Using%20rviz%20with%20the%20Navigation%20StackROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 62ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
ROS パッケージの様々な使い方63ロボット工学セミナー 2016-06-26 ROS API で既存パッケージを launch するだけ ROS が想定している基本的な使い方 メッセージ型は比較的良く整理されている C++/Python API で使用(ライブラリとして使用) アルゴリズムの中身を個別に使える ライブラリとしては整理が不充分なパッケージも多い 既存パッケージの中身を改造 ソースコードが整理されておらず、苦労する場合もある 新規パッケージを作成 標準的なメッセージ型に従えば、既存パッケージと連携可パラメータ調整にはアルゴリズムの理解が必要ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
slam_gmapping, navigation にない機能64ロボット工学セミナー 2016-06-26 3次元空間の SLAM、地図生成 Graph-based SLAM PF による3次元6自由度での自己位置推定(EKF は robot_pose_ekf パッケージで可能) 3次元点群を用いた SLAM/自己位置推定 x, y, yaw の3自由度コンフィグレーション空間 3次元6自由度での経路計画 3次元点群を用いた段差などの障害物の検出 移動障害物の検出と追跡ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
ROS のビルドシステム65ロボット工学セミナー 2016-06-26 rosbuild(2012年以前の古いシステム) catkin(catkin_make コマンド、全パッケージ同時ビルド)http://wiki.ros.org/catkinワークスペース src/ 直下にトップレベル CMakeLists.txt ありWS初期化 $ catkin_init_workspaceパッケージ生成 $ catkin_create_pkg <pkg_name>ビルド $ catkin_make catkin_tools(catkin コマンド、各パッケージ個別ビルド)catkin_make_isolated の後継、2015年ローンチ、ベータ版http://catkin-tools.readthedocs.io/ワークスペース src/ 直下にトップレベル CMakeLists.txt なしWS初期化 $ catkin initパッケージ生成 $ catkin create <pkg_name>ビルド $ catkin buildROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
catkin ワークスペースの構成に関する Tips66ロボット工学セミナー 2016-06-26 ファイルツリーは階層的なディレクトリでも良いcatkin_ws/ (catkin ワークスペース)src/ (src ディレクトリ)stack_dir/ (複数パッケージを集約)pkg_a/ (パッケージa)pkg_b/ (パッケージb) 複数のワークスペースをオーバーレイできるhttp://wiki.ros.org/catkin/Tutorials/workspace_overlaying 同名のパッケージをオーバーレイ可能 初回の catkin_make コマンド実行時に読み込んでいた設定が新しく生成される setup.bash に引き継がれる setup.bash は最後に読み込んだもので上書きされる既存パッケージの改造に便利ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Subscriber に登録できるコールバックの型67ロボット工学セミナー 2016-06-26boost::function でサポートされた型を登録可能http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers 通常の関数 メンバ関数(クラスのメソッド)http://wiki.ros.org/roscpp_tutorials/Tutorials/UsingClassMethodsAsCallbacks 関数ポインタ 関数オブジェクト(ファンクタ) boost::bind コールバック関数に引数を渡す場合に使用 C++11 の bind には ROS が未対応ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Subscriber へのコールバック関数の登録方法68ロボット工学セミナー 2016-06-26 通常の関数、引数なし 通常の関数、引数あり← boost::bind 使用 メンバ関数、引数なし(クラスのオブジェクト/ポインタ経由で登録) メンバ関数、引数あり← boost::bind 使用(クラスのオブジェクト/ポインタ経由で登録) メンバ関数、クラス内 Subscriber、引数なし メンバ関数、クラス内 Subscriber、引数あり← boost::bind 使用推奨ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
通常の関数、引数なし69ロボット工学セミナー 2016-06-26void cbFunc(const std_msgs::String::ConstPtr &msg) {// コールバック処理}int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;ros::Subscriber sub= nh.subscribe("topic_name", 100, cbFunc);ros::spin();return 0;}Subscriber のテンプレート型は基本的には省略可能ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
通常の関数、引数あり(値渡し)70ロボット工学セミナー 2016-06-26void cbFuncCopy(const std_msgs::String::ConstPtr &msg, int num) {// コールバック処理}int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;int num = 1234;ros::Subscriber sub= nh.subscribe<std_msgs::String>("topic_name", 100,boost::bind(cbFuncCopy, _1, num));ros::spin();return 0;}bind の場合は Subscriber のテンプレート型を省略できないC++11 の bind は未対応ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
通常の関数、引数あり(参照渡し)71ロボット工学セミナー 2016-06-26void cbFuncRef(const std_msgs::String::ConstPtr &msg,std::vector<int> &obj) {// コールバック処理}int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;std::vector<int> obj;ros::Subscriber sub= nh.subscribe<std_msgs::String>("topic_name", 100,boost::bind(cbFuncRef, _1, std::ref(obj)));ros::spin();return 0;}参照渡しは ref() / cref() が必要(C++11 と boost のどちらも OK)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
メンバ関数、引数なし(クラスのオブジェクト)72ロボット工学セミナー 2016-06-26class Foo {public:void cbMethod(const std_msgs::String::ConstPtr &msg) {// コールバック処理}};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;Foo foo_obj;ros::Subscriber sub= nh.subscribe("topic_name", 100, &Foo::cbMethod, &foo_obj);ros::spin();return 0;}ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
メンバ関数、引数なし(クラスのポインタ経由)73ロボット工学セミナー 2016-06-26class Foo {public:void cbMethod(const std_msgs::String::ConstPtr &msg) {// コールバック処理}};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;auto foo_ptr = boost::make_shared<Foo>();ros::Subscriber sub= nh.subscribe("topic_name", 100, &Foo::cbMethod, foo_ptr);ros::spin();return 0;}C++11のshared_ptr やunique_ptr は未対応ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
メンバ関数、引数あり74ロボット工学セミナー 2016-06-26class Foo {public:void cbMethodArg(const std_msgs::String::ConstPtr &msg,std::vector<int> &obj) {// コールバック処理}};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;Foo foo_obj;std::vector<int> obj;ros::Subscriber sub= nh.subscribe<std_msgs::String>("topic_name", 100,boost::bind(&Foo::cbMethodArg, &foo_obj, _1, std::ref(obj)));ros::spin();return 0;}ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
メンバ関数、クラス内 Subscriber、引数なし75ロボット工学セミナー 2016-06-26class BarNode {public:BarNode() {sub_ = nh_.subscribe("topic_name", 100, &BarNode::cbMethod, this);}private:void cbMethod(const std_msgs::String::ConstPtr &msg) {// コールバック処理}ros::NodeHandle nh_;ros::Subscriber sub_;};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");BarNode bar_obj;ros::spin();return 0;}ROS ノードクラス推奨ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
メンバ関数、クラス内 Subscriber、引数あり76ロボット工学セミナー 2016-06-26class BarNode {public:BarNode() {std::vector<int> obj;sub_ = nh_.subscribe<std_msgs::String>("topic_name", 100,boost::bind(&BarNode::cbMethodArg, this, _1, obj));}private:void cbMethodArg(const std_msgs::String::ConstPtr &msg,std::vector<int> obj) {// コールバック処理}ros::NodeHandle nh_;ros::Subscriber sub_;};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");BarNode bar_obj;ros::spin();return 0;}ROS ノードクラス参照渡しの場合はobj が既に無効なので注意ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
CMake を開ける統合開発環境 Qt Creator77ロボット工学セミナー 2016-06-26ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Qt Creator のインストール方法78ロボット工学セミナー 2016-06-26 apt パッケージが古く日本語表示の問題(四角□になる)などの場合、公式パッケージをインストール1. “Qt Creator x.x.x for Linux/X11 64-bit” をダウンロードhttp://www.qt.io/download-open-source/http://download.qt.io/official_releases/qtcreator/2. インストーラに実行権限を付ける$ chmod u+x qt-creator-opensource-linux-x86_64-x.x.x.run3. GUI インストーラを実行(/opt/qtcreator-x.x.x/ 以下にインストールされる)$ sudo ./qt-creator-opensource-linux-x86_64-x.x.x.run ~/.bashrc に以下を追記(公式パッケージにパスを通す)export PATH=/opt/qtcreator-x.x.x/bin:${PATH}以前のバージョンROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
ROS での Qt Creator の利用方法79ロボット工学セミナー 2016-06-26ROS 環境変数を読み込んだシェルでの起動が必要http://wiki.ros.org/IDEs#QtCreator コマンドラインから起動$ qtcreator >/dev/null 2>&1 & Qt Creator のランチャ(アイコン)をシェル起動に修正 desktop ファイルの Exec 行の先頭に "bash -i -c" を追加Exec=bash -i -c /opt/qtcreator-x.x.x/bin/qtcreator apt パッケージでインストールした場合の desktop ファイル/usr/share/applications/qtcreator.desktop 公式パッケージでインストールした場合の desktop ファイル/usr/share/applications/QtProject-qtcreator.desktopコンソール出力を破棄バックグラウンドで起動ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
画面分割できるターミナル Terminator80ロボット工学セミナー 2016-06-26screen / tmux のような画面分割を簡単に利用可能ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
Contents 81ロボット工学セミナー 2016-06-261. 自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
まとめ82ロボット工学セミナー 2016-06-26 slam_gmapping, navigation の構成、アルゴリズム 自己位置推定:Adaptive Monte Carlo Localization SLAM、地図生成:Rao-Blackwellized Particle FilterSLAM(FastSLAM 2.0 での Grid Mapping) 大域的経路計画:Navigation Function とダイクストラ法 局所的動作計画:Dynamic Window Approach ROS に関する情報の調べ方(ROS Index を活用) ROS での開発に関する知見 catkin_make コマンド/catkin コマンド(新しいビルドシステム) Subscriber へのコールバック関数の登録方法 Qt Creator:CMake を開ける統合開発環境 Terminator:画面分割できるターミナルROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
参考文献83ロボット工学セミナー 2016-06-26 ROS Wikihttp://wiki.ros.org/ 友納 正裕: “移動ロボットのための確率的な自己位置推定と地図構築”, 日本ロボット学会誌, vol.29, no.5, pp. 423-426, 2011. 友納 正裕: “移動ロボットの自己位置推定と地図構築の基礎”,第47回ロボット工学セミナー, 2008. Sebastian Thrun, Wolfram Burgard, and Dieter Fox:“Probabilistic Robotics”, The MIT Press, 2005.(邦訳)上田 隆一: “確率ロボティクス”, マイナビ, 2007. 坪内 孝司: “移動体の位置認識”, 計測自動制御学会 編,ビークル, コロナ社, 2003. Dieter Fox, Wolfram Burgard, and Sebastian Thrun: “TheDynamic Window Approach to Collision Avoidance”,IEEE Robotics & Automation Mag., vol.4, no.1, pp. 23-33, 1997.ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ

Recommended

PDF
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
PDF
オープンソース SLAM の分類
PDF
Cartographer を用いた 3D SLAM
PDF
SLAM入門 第2章 SLAMの基礎
PDF
Visual slam
PDF
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
PDF
20190307 visualslam summary
PDF
tf,tf2完全理解
PDF
ロボティクスにおける SLAM 手法と実用化例
PDF
Cartographer と Autoware を用いた自律走行
PPTX
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
PDF
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
PDF
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
 
PDF
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 
PPTX
ORB-SLAMの手法解説
PDF
Jetson活用セミナー ROS2自律走行実現に向けて
PDF
ROSによる今後のロボティクスのあり方
PPTX
確率ロボティクス第11回
PPTX
確率ロボティクス第二回
PDF
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
PDF
SLAMチュートリアル大会資料(ORB-SLAM)
PDF
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
PPTX
SLAM勉強会(3) LSD-SLAM
PDF
ORB-SLAMを動かしてみた
PDF
LiDAR-SLAM チュートリアル資料
PDF
Sift特徴量について
PDF
20180424 orb slam
PDF
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
PPTX
SLAM勉強会(PTAM)
PDF
第2回cv勉強会@九州 LSD-SLAM

More Related Content

PDF
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
PDF
オープンソース SLAM の分類
PDF
Cartographer を用いた 3D SLAM
PDF
SLAM入門 第2章 SLAMの基礎
PDF
Visual slam
PDF
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
PDF
20190307 visualslam summary
PDF
tf,tf2完全理解
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
オープンソース SLAM の分類
Cartographer を用いた 3D SLAM
SLAM入門 第2章 SLAMの基礎
Visual slam
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
20190307 visualslam summary
tf,tf2完全理解

What's hot

PDF
ロボティクスにおける SLAM 手法と実用化例
PDF
Cartographer と Autoware を用いた自律走行
PPTX
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
PDF
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
PDF
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
 
PDF
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 
PPTX
ORB-SLAMの手法解説
PDF
Jetson活用セミナー ROS2自律走行実現に向けて
PDF
ROSによる今後のロボティクスのあり方
PPTX
確率ロボティクス第11回
PPTX
確率ロボティクス第二回
PDF
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
PDF
SLAMチュートリアル大会資料(ORB-SLAM)
PDF
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
PPTX
SLAM勉強会(3) LSD-SLAM
PDF
ORB-SLAMを動かしてみた
PDF
LiDAR-SLAM チュートリアル資料
PDF
Sift特徴量について
PDF
20180424 orb slam
PDF
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
ロボティクスにおける SLAM 手法と実用化例
Cartographer と Autoware を用いた自律走行
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 
ORB-SLAMの手法解説
Jetson活用セミナー ROS2自律走行実現に向けて
ROSによる今後のロボティクスのあり方
確率ロボティクス第11回
確率ロボティクス第二回
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
SLAMチュートリアル大会資料(ORB-SLAM)
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
SLAM勉強会(3) LSD-SLAM
ORB-SLAMを動かしてみた
LiDAR-SLAM チュートリアル資料
Sift特徴量について
20180424 orb slam
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション

Viewers also liked

PPTX
SLAM勉強会(PTAM)
PDF
第2回cv勉強会@九州 LSD-SLAM
PDF
2008-12-07_PTAM_Kansai.AR
PPTX
Google Tangoで 現実世界を感じてみよう
PPT
AWSのEC2の複数インスタンスからファイルを共有する方法
PPTX
Tsukuba exploration rover 制御周り仕様書
PDF
[20171027 三木会] 地図用データを高速処理!オープンソースGPUデータベースMapDの魅力に迫る!!<GPU紹介など編> by 株式会社インサイ...
SLAM勉強会(PTAM)
第2回cv勉強会@九州 LSD-SLAM
2008-12-07_PTAM_Kansai.AR
Google Tangoで 現実世界を感じてみよう
AWSのEC2の複数インスタンスからファイルを共有する方法
Tsukuba exploration rover 制御周り仕様書
[20171027 三木会] 地図用データを高速処理!オープンソースGPUデータベースMapDの魅力に迫る!!<GPU紹介など編> by 株式会社インサイ...

Similar to ROS を用いた自律移動ロボットのシステム構築

PPTX
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
PDF
Open3DでSLAM入門 PyCon Kyushu 2018
PPTX
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
PPTX
ディープラーニングとROSで作る自動運転ロボット
PDF
The history of SLAM (Simultaneous Localization And Mapping)
ODP
オープンキャンパススライド2017
PDF
5.総合演習(2)
PPTX
Robot frontier lesson3 2018
PDF
Slam実習
PDF
G空間情報シンポ 20161122 v1.1
PDF
粒子フィルターによる自動運転
PDF
【つくばチャレンジ2020 LT2大会】KARAKAZE産学隊2020
PDF
Robotpaper.Challenge 2019-08
PDF
201111 05
PDF
NEDO特別講座_画像処理・AI技術活用コース_後編
PDF
Robotpaper.Challenge 2019-09 ver2
PPTX
[DL輪読会]Differentiable Mapping Networks: Learning Structured Map Representatio...
PPTX
CCSE2019 TIS - 自律移動サービスロボットの地図とデータモデルの共通化への取り組み
PPTX
SetoROS_0512
PPTX
Robot frontier lesson3
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
Open3DでSLAM入門 PyCon Kyushu 2018
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
ディープラーニングとROSで作る自動運転ロボット
The history of SLAM (Simultaneous Localization And Mapping)
オープンキャンパススライド2017
5.総合演習(2)
Robot frontier lesson3 2018
Slam実習
G空間情報シンポ 20161122 v1.1
粒子フィルターによる自動運転
【つくばチャレンジ2020 LT2大会】KARAKAZE産学隊2020
Robotpaper.Challenge 2019-08
201111 05
NEDO特別講座_画像処理・AI技術活用コース_後編
Robotpaper.Challenge 2019-09 ver2
[DL輪読会]Differentiable Mapping Networks: Learning Structured Map Representatio...
CCSE2019 TIS - 自律移動サービスロボットの地図とデータモデルの共通化への取り組み
SetoROS_0512
Robot frontier lesson3

ROS を用いた自律移動ロボットのシステム構築

  • 1.
  • 2.
  • 3.
    開発したロボットの外観と搭載センサ2ロボット工学セミナー 2016-06-262D-LIDAR #5,#6(水平、左右)2D-LIDAR #2, #3, #4(ピッチ・ロール傾斜)2D-LIDAR #1(水平、前方)IMUモータエンコーダ3D-LIDARGNSS(参照値用)単眼カメラ1.5 m
  • 4.
    自律走行システムの構成図3ロボット工学セミナー 2016-06-26Linux PCLIDARHandlerIMUOccupancyGridMapLIDARHandlerIMUHandlerObstacleDetectorTransformBroadcasterGyroOdometerBehaviorPlannerLocalizerPath-MotionPlannerVehicleControllerMotorControllerWaypointRouteSoundPlayerCostmapBuilderLIDARLIDARMotorMotorDeviceProcessFileData FlowTargetDetector
  • 5.
    Contents 4ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 6.
    自律走行に使用できるデバイスとパッケージ5ロボット工学セミナー 2016-06-26 センサhttp://wiki.ros.org/Sensors 移動ロボット台車 http://wiki.ros.org/Robots T-frog i-Cart mini(T-frog モータコントローラ):約28万円http://t-frog.com/ Doog TEC-1(T-frog モータコントローラ):約8万円http://www.doog-inc.com/ T-frog モータコントローラ ROS 対応パッケージ ypspur_ros:公式パッケージ(東北大 渡辺先生)https://github.com/openspur/ypspur_ros ypspur_ros_bridge:旧パッケージ(筑波大 ロボ研)http://www.roboken.iit.tsukuba.ac.jp/platform/gitweb/ open-rdc icart_mini:Gazebo 対応(千葉工大 林原研)https://github.com/open-rdc/icart ROS で使える3次元シミュレータROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 7.
    自律走行に関するパッケージとその機能6ロボット工学セミナー 2016-06-26 slam_gmappingSLAM、地図生成 navigation 自己位置推定 占有格子地図生成、障害物情報の管理 大域的経路計画 局所的動作計画(障害物回避)自律走行に必要な機能をひととおり提供、C++で実装されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 8.
    自律走行を行う際のワークフロー7ロボット工学セミナー 2016-06-261. ロボットを手動走行させて環境のセンサデータを取得、bagファイルとして保存2. bag ファイルを再生し、slam_gmapping パッケージを使用してオフラインで地図生成(オンラインも可能)3. 生成した地図に基づき、navigation パッケージを使用して自律走行ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 9.
    slam_gmapping パッケージの構成8ロボット工学セミナー 2016-06-26gmapping:SLAM、地図生成の実行(ROSラッパー) openslam_gmapping:OpenSLAM で公開されている Rao-BlackwellizedParticle Filter による Grid-based SLAM(FastSLAM 2.0 での Grid Mapping)slam_gmappinggmappingopenslam_gmappingメタパッケージパッケージ(実行ファイル)パッケージ(ソースのみ)凡例ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 10.
    OpenSLAM とは9ロボット工学セミナー 2016-06-26SLAM の各種アルゴリズムをオープンソースで公開する Web サイト EKF, RBPF, Graph-based SLAM, ICPマッチングなど複数の手法の実装あり 研究者が各手法を比較するために公開 ライブラリではないROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 11.
    navigation パッケージの構成10ロボット工学セミナー 2016-06-26map_server:既存地図の配信 amcl:自己位置推定 move_base:移動タスクの実行 costmap_2d:コストマップの生成 nav_core:行動インタフェース定義 navfn:大域的経路計画 base_local_planner:局所的動作計画 *_recovery:スタックした場合の復帰動作navigationmove_basemap_server amclnav_corenavfn base_local_plannerclear_costmap_recoveryrotate_recoverycostmap_2dメタパッケージパッケージ(実行ファイル)パッケージ(ソースのみ)凡例ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 12.
    nav_core によるパッケージの入れ替え11ロボット工学セミナー 2016-06-26ヘッダファイルでのインタフェース定義のみ(純粋仮想関数) 大域的経路計画:BaseGlobalPlanner 局所的動作計画:BaseLocalPlanner スタック復帰動作:RecoveryBehavior 実装は move_base のパラメータで実行時に変更可能 ROS の pluginlib という機能で実現されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 13.
    入れ替え可能なパッケージとそのアルゴリズム12ロボット工学セミナー 2016-06-26 大域的経路計画(BaseGlobalPlanner)navfn:ダイクストラ法 global_planner:A*/ダイクストラ法 carrot_planner:ゴールに向かって直進 局所的動作計画(BaseLocalPlanner) base_local_planner:Dynamic Window Approach dwa_local_planner:Dynamic Window Approach の別実装 スタック復帰動作(RecoveryBehavior) clear_costmap_recovery:コストマップをクリア rotate_recovery:ロボットが旋回して障害物を測定 move_slow_and_clear:コストマップをクリア、移動速度を制限ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 14.
    標準で使用されるアルゴリズムのまとめ13ロボット工学セミナー 2016-06-26 SLAM、地図生成(gmapping)Rao-BlackwellizedParticle Filter による Grid-based SLAM(FastSLAM 2.0 での Grid Mapping) 自己位置推定(amcl)Adaptive/Augmented Monte Carlo Localization 経路計画(move_base)Global Dynamic Window Approach 大域的経路計画(navfn)Navigation Function に基づくダイクストラ法 局所的動作計画(base_local_planner)Dynamic Window ApproachROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 15.
    Contents 14ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 16.
    自己位置推定、地図生成、SLAM とは15ロボット工学セミナー 2016-06-26自己位置推定(Localization)地図生成(MappingwithKnown Poses)SLAM(SimultaneousLocalizationand Mapping)内界センサデータ外界センサデータ地図ロボット位置ロボット位置(既知)外界センサデータ地図内界センサデータ外界センサデータロボット位置地図ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 17.
    自己位置推定と SLAM の手法16ロボット工学セミナー2016-06-26スキャンマッチング系 Bayes Filter 系Graph-BasedSLAM 系性質 逐次最適化、オンラインフィルタリング、オンライン全体最適化、オフライン手法の概要点群を最適化計算で位置合わせ事前確率と尤度を確率的に融合ロボット位置やランドマーク位置(地図)を表すグラフを最適化詳細マッチング 大域マッチング初期位置あり、ユークリッド空間で対応付け初期位置なし、特徴量空間で対応付け手法の例 ICP、NDT などSpin Image、FPFH、PPF、SHOT などEKF、HF、PF、RBPF などポーズ調整、バンドル調整、完全 SLAM以下のパッケージは一部の手法を提供しているに過ぎない amcl:Particle Filter (PF) による Monte Carlo Localization gmapping:Rao-Blackwellized Particle Filter (RBPF)SLAM の性能は屋外環境に対して不充分な場合も多いROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 18.
    最尤推定、最大事後確率推定、ベイズ推定17ロボット工学セミナー 2016-06-26自己位置:xt確率密度:p(xt)尤度 p(zt|xt,ut)(スキャンなど:zt)ベイズ推定事後確率の分布を推定最大事後確率推定事後確率のモードを推定最尤推定尤度のみのモードを推定事前確率p(xt|ut)(オドメトリなど:ut)事後確率 p(xt|ut,zt)事後確率=尤度×事前確率ベイズの定理による自己位置推定の概念図Bayes Filter は、ベイズの定理に基づくベイズ推定によって自己位置の事後確率分布を求めるROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 19.
    Bayes Filter による自己位置推定18ロボット工学セミナー2016-06-26 ロボットの自己位置の確率分布を求める 地図は事前に与えられている地図:m スキャン計測:zt自己位置(時刻t-1):xt-1真の自己位置(時刻t):xtオドメトリによる自己位置(時刻t):T(ut)xt-1平面図オドメトリ動作(移動量):ut対応付けROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 20.
    確率的自己位置推定の隠れマルコフモデル19ロボット工学セミナー 2016-06-26xt-1 xtut-1utzt-1 ztm自己位置推定のグラフィカルモデルmap: mxt+1ut+1zt+1robot pose: x(hidden variable)motion: u(e.g. odometry)measurement: z(e.g. laser scan)自己位置の時系列を1次マルコフ過程と仮定ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 21.
    Bayes Filter の定式化20ロボット工学セミナー2016-06-26 漸化式で時系列の確率過程を表現 Extended Kalman Filter、Histogram Filter などはすべて Bayes Filter の理論に基づいた実装時刻tの自己位置xtの事後確率尤度(計測モデル)事前確率x:ロボット位置 m:地図u:制御動作(オドメトリなど) z:環境計測(レーザスキャンなど)動作モデル 時刻t-1の自己位置xt-1ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 22.
    Bayes Filter の数学的導出21ロボット工学セミナー2016-06-26時刻tの自己位置xtの事後確率尤度(計測モデル)事前確率動作モデル 時刻t-1の自己位置xt-1ベイズの定理条件付き独立性(過去には非依存) 全確率の定理条件付き独立性(1次マルコフ性)条件付き独立性漸化式として定式化ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 23.
    ベイズの定理の適用22ロボット工学セミナー 2016-06-26 ベイズの定理条件付きベイズの定理 自己位置推定に適用 x:ロボット位置m:地図u:制御動作(オドメトリ)z:環境計測(レーザスキャン)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 24.
    マルコフ性の仮定と条件付き独立性の適用23ロボット工学セミナー 2016-06-261次マルコフ性を仮定 現在の状態は、1時刻前の状態にだけ依存それ以前の状態や他のデータとは独立現在の環境計測ztは、現在の状態である自己位置xtと地図mにのみ依存現在の状態である自己位置xtは、1時刻前の状態xt-1とそれ以後の制御動作utにのみ依存ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 25.
    全確率の定理の適用24ロボット工学セミナー 2016-06-26 全確率の定理条件付き全確率の定理 自己位置推定に適用隠れ変数xt-1を導入x:ロボット位置m:地図u:制御動作(オドメトリ)z:環境計測(レーザスキャン)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 26.
    Contents 25ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 27.
    Particle Filter の定式化26ロボット工学セミナー2016-06-26 Bayes Filter の一種だが、定式化は若干異なる 各パーティクルは、時刻tの自己位置だけでなく、時刻1から時刻tの走行軌跡を保持する 動作モデルによる事前確率の計算に積分なし時刻1からtの走行軌跡xt:tの事後確率尤度(計測モデル)事前確率動作モデル 時刻1からt-1の走行軌跡x1:t-1ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 28.
    Particle Filter の数学的導出27ロボット工学セミナー2016-06-26時刻1からtの走行軌跡xt:tの事後確率尤度(計測モデル)事前確率動作モデル 時刻1からt-1の走行軌跡x1:t-1ベイズの定理条件付き独立性(過去には非依存) 乗法定理条件付き独立性(1次マルコフ性)条件付き独立性漸化式として定式化ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 29.
    乗法定理の適用(Particle Filter の場合)28ロボット工学セミナー2016-06-26 乗法定理(条件付き確率) 条件付き乗法定理(3変数での条件付き確率) 自己位置推定に適用x:ロボット位置m:地図u:制御動作(オドメトリ)z:環境計測(レーザスキャン)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 30.
    Adaptive Monte CarloLocalization29ロボット工学セミナー 2016-06-26 Particle Filter による2次元3自由度での確率的自己位置推定(Monte Carlo Localization) オドメトリ動作モデル ビーム計測モデル/尤度場計測モデル KLD-Sampling による Adaptive MCL推定位置の不確かさに応じて、パーティクル数を適応的に調整 Augmented MCL真値周辺のパーティクルの喪失に対処するために、ランダムパーティクルを挿入ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 31.
    Adaptive Monte CarloLocalization30ロボット工学セミナー 2016-06-26処理イメージ(平面図)時刻:t-1パーティクルによって表されるロボット位置の複数仮説1. 予測:ロボット位置時刻:t動作モデルにより時刻 t のロボット位置を予測ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 32.
    Adaptive Monte CarloLocalization31ロボット工学セミナー 2016-06-26ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ処理イメージ(平面図)スキャンと占有格子地図の重なり度合いを評価2. 尤度計算:占有格子地図:現時刻のスキャン計測:尤度事前に与えられた1つの地図に対して、各パーティクルのスキャンを評価計測モデルにより尤度を計算
  • 33.
    Adaptive Monte CarloLocalization32ロボット工学セミナー 2016-06-263. リサンプリング処理イメージ(平面図):尤度 尤度の高いパーティクルは自身のコピーを多く残す 尤度の低いパーティクルは消滅 KLD-Sampling により、推定位置の不確かさに応じてパーティクル数を調整ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 34.
    Contents 33ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 35.
    Rao-Blackwellized Particle Filterの定式化34ロボット工学セミナー 2016-06-26ロボット走行軌跡 x1:tParticle Filter で推定地図 mBinary Bayes Filter で推定ロボット走行軌跡と地図の同時確率ロボット走行軌跡と地図を求める完全 SLAM、独立性の仮定により因子分解して解くx:ロボット位置 m:地図u:制御動作(オドメトリなど) z:環境計測(レーザスキャンなど)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 36.
  • 37.
    Rao-Blackwellized Particle FilterSLAM36ロボット工学セミナー 2016-06-26処理イメージ(平面図)時刻:t-1パーティクルによって表されるロボット位置の複数仮説1. 予測:ロボット位置時刻:t動作モデルにより時刻 t のロボット位置を予測ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 38.
    Rao-Blackwellized Particle FilterSLAM37ロボット工学セミナー 2016-06-26ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ処理イメージ(平面図)スキャンを占有格子地図にGreedy Scan Matching(FastSLAM 2.0)2. 尤度計算:占有格子地図:現時刻のスキャン計測:尤度Rao-Blackwellization により各パーティクルごとに地図を持っている計測モデルにより尤度を計算
  • 39.
    Rao-Blackwellized Particle FilterSLAM38ロボット工学セミナー 2016-06-263. リサンプリング処理イメージ(平面図):尤度 尤度の高いパーティクルは自身のコピーを多く残す 尤度の低いパーティクルは消滅ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 40.
    Rao-Blackwellized Particle FilterSLAM39ロボット工学セミナー 2016-06-264. 地図生成処理イメージ(平面図)Rao-Blackwellization により各パーティクルごとにそれぞれの地図を生成する:占有格子地図:現時刻のスキャン計測レーザのレイキャスティングによりBinary Bayes Filter で占有格子地図を生成ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 41.
    Contents 40ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 42.
  • 43.
    costmap_2d によるコストマップの生成42ロボット工学セミナー 2016-06-26レーザスキャンまたは3次元点群のデータを用いて、2次元/3次元の占有格子地図を生成 レイキャスティングにより、占有/フリー/未知の3状態で障害物情報を管理 占有格子地図の障害物をロボットの内接円半径の大きさで膨張させ、x, y の2自由度コンフィグレーション空間として2次元コストマップを生成 グローバルコストマップとローカルコストマップの2種類を生成ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 44.
  • 45.
    コストマップを生成する枠組み44ロボット工学セミナー 2016-06-26 ROSHydro 以降、costmap_2d の構成が変更http://wiki.ros.org/costmap_2dhttp://wiki.ros.org/costmap_2d/hydrohttp://wiki.ros.org/hydro/Migration#Navigation_-_Costmap2D LayeredCostmap という仕組みが導入された Static Map Layer:SLAM で生成した静的地図 Obstacle Map Layer:検出した障害物の蓄積と消去(ObstacleCostmapPlugin / VoxelCostmapPlugin) Inflation Layer:障害物を膨張したコンフィグレーション空間 ROS の pluginlib という機能で実現されているROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 46.
  • 47.
    navfn の大域的経路計画46ロボット工学セミナー 2016-06-26Navigation Function と呼ばれるポテンシャル場で評価 ゴールまでの距離と障害物からの距離をコストとする グローバルコストマップに基づいて処理 格子地図に対して、ダイクストラ法でポテンシャル場の最小コストとなる経路を探索 各セルのポテンシャル場のコストを計算しながらダイクストラ法で探索し、ゴールまでのグローバルパスを計画 ロボットの方向は考慮しない(円形と仮定) 方向によっては障害物と衝突する経路が計画されるROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 48.
    navfn による大域的経路計画の例47ロボット工学セミナー 2016-06-26グローバルパススタート5mゴールROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ占有格子地図
  • 49.
    navfn による大域的経路計画の例48ロボット工学セミナー 2016-06-26グローバルパススタート5mグローバルコストマップゴール障害物から離れた経路を計画ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 50.
    ダイクストラ法とA*の違い49ロボット工学セミナー 2016-06-26 ダイクストラ法幅優先探索をコストを評価するように拡張した、最良優先探索と呼ばれる手法の一種A*(A-Star)ヒューリスティック関数でコストの予測値を追加した、ダイクストラ法の改良版https://en.wikipedia.org/wiki/Dijkstra's_algorithmhttps://en.wikipedia.org/wiki/A*_search_algorithmROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 51.
  • 52.
    base_local_planner の局所的動作計画51ロボット工学セミナー 2016-06-26大域的経路計画によるグローバルパスに追従しつつ、障害物を回避する動作(速度)を計画 Dynamic Window Approach を使用 ロボットのキネマティクス(運動モデル)を考慮した軌跡 現在の速度に基づき、ダイナミクスを考慮して実行可能な複数のローカルパス候補を生成 評価関数により、グローバルパスに近く、かつ障害物から離れたローカルパスの動作を選択 ローカルコストマップに基づいて処理ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 53.
    Dynamic Window Approach52ロボット工学セミナー2016-06-26平面図ロボット位置ローカルパス候補グローバルパス障害物並進速度 v回転角速度ω最大速度範囲Dynamic Window現在速度ローカルパス候補キネマティクスとダイナミクスを考慮してローカルパス候補の軌跡を生成、離散化してコストを評価速度の決定ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 54.
    DynamicWindowApproachのコスト評価関数53ロボット工学セミナー 2016-06-26軌跡コスト =経路距離スケール× ローカルパス端点とグローバルパスの距離+ ゴール距離スケール × ローカルパス端点とゴールの距離+ 障害物スケール × ローカルパス上での最大障害物コスト上記の ROS の実装は、オリジナル論文の評価関数とは異なる平面図ロボット位置ローカルパス候補グローバルパス障害物ゴールコストマップ 距離は各セルごとに事前計算 ローカルパスの振動を抑制するため、一定距離は逆符号の速度を無効化ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 55.
  • 56.
  • 57.
    Contents 56ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 58.
    ROS に関する情報源57ロボット工学セミナー 2016-06-26ROS.org(パッケージリスト、ニュースなど)http://www.ros.org/ ROS Wiki(共同編集文章)http://wiki.ros.org/ ROS Answers(質問掲示板)http://answers.ros.org/ ROS Index(パッケージ情報、2015年ローンチ、ベータ版)http://rosindex.github.io/ GitHub Organizations(ソースコード、Issue Trackers)https://github.com/ros-planninghttps://github.com/ros-perception など C++ / Python API(Doxygen / Sphinx 生成文章)http://docs.ros.org/api/ 以下の各ディレクトリ メーリングリストhttp://lists.ros.org/lurker/list/ros-users.en.html情報が実装と一致しない場合も多い(特に日本語ページは古い)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 59.
    ROS Index(パッケージ情報を集約)58ロボット工学セミナー 2016-06-26READMEや package.xml からの自動生成文章GitHub などへのリンクROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 60.
  • 61.
    ROS C++/Python API(Doxygen/Sphinx)60ロボット工学セミナー 2016-06-26ソースコードのコメントからの自動生成文章ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 62.
    自律走行の実現に役立つチュートリアルページ61ロボット工学セミナー 2016-06-26 ROS概要http://wiki.ros.org/ROS/StartGuide ROS 基本チュートリアル(プロセス間通信、開発ツールなど)http://wiki.ros.org/ROS/Tutorialshttp://wiki.ros.org/roscpp_tutorials/Tutorials tf チュートリアル(座標変換)http://wiki.ros.org/tf/Tutorialshttp://wiki.ros.org/tf2/Tutorials navigation チュートリアル(自律走行)http://wiki.ros.org/navigation/Tutorials/RobotSetuphttp://wiki.ros.org/navigation/Tutorials/Navigation%20Tuning%20Guide slam_gmapping チュートリアル(SLAM、地図生成)http://wiki.ros.org/slam_gmapping/Tutorials/MappingFromLoggedData rviz チュートリアル(ビューア)http://wiki.ros.org/rviz/Tutorialshttp://wiki.ros.org/navigation/Tutorials/Using%20rviz%20with%20the%20Navigation%20StackROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 63.
    Contents 62ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 64.
    ROS パッケージの様々な使い方63ロボット工学セミナー 2016-06-26ROS API で既存パッケージを launch するだけ ROS が想定している基本的な使い方 メッセージ型は比較的良く整理されている C++/Python API で使用(ライブラリとして使用) アルゴリズムの中身を個別に使える ライブラリとしては整理が不充分なパッケージも多い 既存パッケージの中身を改造 ソースコードが整理されておらず、苦労する場合もある 新規パッケージを作成 標準的なメッセージ型に従えば、既存パッケージと連携可パラメータ調整にはアルゴリズムの理解が必要ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 65.
    slam_gmapping, navigation にない機能64ロボット工学セミナー2016-06-26 3次元空間の SLAM、地図生成 Graph-based SLAM PF による3次元6自由度での自己位置推定(EKF は robot_pose_ekf パッケージで可能) 3次元点群を用いた SLAM/自己位置推定 x, y, yaw の3自由度コンフィグレーション空間 3次元6自由度での経路計画 3次元点群を用いた段差などの障害物の検出 移動障害物の検出と追跡ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 66.
    ROS のビルドシステム65ロボット工学セミナー 2016-06-26rosbuild(2012年以前の古いシステム) catkin(catkin_make コマンド、全パッケージ同時ビルド)http://wiki.ros.org/catkinワークスペース src/ 直下にトップレベル CMakeLists.txt ありWS初期化 $ catkin_init_workspaceパッケージ生成 $ catkin_create_pkg <pkg_name>ビルド $ catkin_make catkin_tools(catkin コマンド、各パッケージ個別ビルド)catkin_make_isolated の後継、2015年ローンチ、ベータ版http://catkin-tools.readthedocs.io/ワークスペース src/ 直下にトップレベル CMakeLists.txt なしWS初期化 $ catkin initパッケージ生成 $ catkin create <pkg_name>ビルド $ catkin buildROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 67.
    catkin ワークスペースの構成に関する Tips66ロボット工学セミナー2016-06-26 ファイルツリーは階層的なディレクトリでも良いcatkin_ws/ (catkin ワークスペース)src/ (src ディレクトリ)stack_dir/ (複数パッケージを集約)pkg_a/ (パッケージa)pkg_b/ (パッケージb) 複数のワークスペースをオーバーレイできるhttp://wiki.ros.org/catkin/Tutorials/workspace_overlaying 同名のパッケージをオーバーレイ可能 初回の catkin_make コマンド実行時に読み込んでいた設定が新しく生成される setup.bash に引き継がれる setup.bash は最後に読み込んだもので上書きされる既存パッケージの改造に便利ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 68.
    Subscriber に登録できるコールバックの型67ロボット工学セミナー 2016-06-26boost::functionでサポートされた型を登録可能http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers 通常の関数 メンバ関数(クラスのメソッド)http://wiki.ros.org/roscpp_tutorials/Tutorials/UsingClassMethodsAsCallbacks 関数ポインタ 関数オブジェクト(ファンクタ) boost::bind コールバック関数に引数を渡す場合に使用 C++11 の bind には ROS が未対応ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 69.
    Subscriber へのコールバック関数の登録方法68ロボット工学セミナー 2016-06-26通常の関数、引数なし 通常の関数、引数あり← boost::bind 使用 メンバ関数、引数なし(クラスのオブジェクト/ポインタ経由で登録) メンバ関数、引数あり← boost::bind 使用(クラスのオブジェクト/ポインタ経由で登録) メンバ関数、クラス内 Subscriber、引数なし メンバ関数、クラス内 Subscriber、引数あり← boost::bind 使用推奨ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 70.
    通常の関数、引数なし69ロボット工学セミナー 2016-06-26void cbFunc(conststd_msgs::String::ConstPtr &msg) {// コールバック処理}int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;ros::Subscriber sub= nh.subscribe("topic_name", 100, cbFunc);ros::spin();return 0;}Subscriber のテンプレート型は基本的には省略可能ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 71.
    通常の関数、引数あり(値渡し)70ロボット工学セミナー 2016-06-26void cbFuncCopy(conststd_msgs::String::ConstPtr &msg, int num) {// コールバック処理}int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;int num = 1234;ros::Subscriber sub= nh.subscribe<std_msgs::String>("topic_name", 100,boost::bind(cbFuncCopy, _1, num));ros::spin();return 0;}bind の場合は Subscriber のテンプレート型を省略できないC++11 の bind は未対応ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 72.
    通常の関数、引数あり(参照渡し)71ロボット工学セミナー 2016-06-26void cbFuncRef(conststd_msgs::String::ConstPtr &msg,std::vector<int> &obj) {// コールバック処理}int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;std::vector<int> obj;ros::Subscriber sub= nh.subscribe<std_msgs::String>("topic_name", 100,boost::bind(cbFuncRef, _1, std::ref(obj)));ros::spin();return 0;}参照渡しは ref() / cref() が必要(C++11 と boost のどちらも OK)ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 73.
    メンバ関数、引数なし(クラスのオブジェクト)72ロボット工学セミナー 2016-06-26class Foo{public:void cbMethod(const std_msgs::String::ConstPtr &msg) {// コールバック処理}};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;Foo foo_obj;ros::Subscriber sub= nh.subscribe("topic_name", 100, &Foo::cbMethod, &foo_obj);ros::spin();return 0;}ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 74.
    メンバ関数、引数なし(クラスのポインタ経由)73ロボット工学セミナー 2016-06-26class Foo{public:void cbMethod(const std_msgs::String::ConstPtr &msg) {// コールバック処理}};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;auto foo_ptr = boost::make_shared<Foo>();ros::Subscriber sub= nh.subscribe("topic_name", 100, &Foo::cbMethod, foo_ptr);ros::spin();return 0;}C++11のshared_ptr やunique_ptr は未対応ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 75.
    メンバ関数、引数あり74ロボット工学セミナー 2016-06-26class Foo{public:void cbMethodArg(const std_msgs::String::ConstPtr &msg,std::vector<int> &obj) {// コールバック処理}};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");ros::NodeHandle nh;Foo foo_obj;std::vector<int> obj;ros::Subscriber sub= nh.subscribe<std_msgs::String>("topic_name", 100,boost::bind(&Foo::cbMethodArg, &foo_obj, _1, std::ref(obj)));ros::spin();return 0;}ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 76.
    メンバ関数、クラス内 Subscriber、引数なし75ロボット工学セミナー 2016-06-26classBarNode {public:BarNode() {sub_ = nh_.subscribe("topic_name", 100, &BarNode::cbMethod, this);}private:void cbMethod(const std_msgs::String::ConstPtr &msg) {// コールバック処理}ros::NodeHandle nh_;ros::Subscriber sub_;};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");BarNode bar_obj;ros::spin();return 0;}ROS ノードクラス推奨ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 77.
    メンバ関数、クラス内 Subscriber、引数あり76ロボット工学セミナー 2016-06-26classBarNode {public:BarNode() {std::vector<int> obj;sub_ = nh_.subscribe<std_msgs::String>("topic_name", 100,boost::bind(&BarNode::cbMethodArg, this, _1, obj));}private:void cbMethodArg(const std_msgs::String::ConstPtr &msg,std::vector<int> obj) {// コールバック処理}ros::NodeHandle nh_;ros::Subscriber sub_;};int main(int argc, char **argv) {ros::init(argc, argv, "subscriber_example");BarNode bar_obj;ros::spin();return 0;}ROS ノードクラス参照渡しの場合はobj が既に無効なので注意ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 78.
    CMake を開ける統合開発環境 QtCreator77ロボット工学セミナー 2016-06-26ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 79.
    Qt Creator のインストール方法78ロボット工学セミナー2016-06-26 apt パッケージが古く日本語表示の問題(四角□になる)などの場合、公式パッケージをインストール1. “Qt Creator x.x.x for Linux/X11 64-bit” をダウンロードhttp://www.qt.io/download-open-source/http://download.qt.io/official_releases/qtcreator/2. インストーラに実行権限を付ける$ chmod u+x qt-creator-opensource-linux-x86_64-x.x.x.run3. GUI インストーラを実行(/opt/qtcreator-x.x.x/ 以下にインストールされる)$ sudo ./qt-creator-opensource-linux-x86_64-x.x.x.run ~/.bashrc に以下を追記(公式パッケージにパスを通す)export PATH=/opt/qtcreator-x.x.x/bin:${PATH}以前のバージョンROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 80.
    ROS での QtCreator の利用方法79ロボット工学セミナー 2016-06-26ROS 環境変数を読み込んだシェルでの起動が必要http://wiki.ros.org/IDEs#QtCreator コマンドラインから起動$ qtcreator >/dev/null 2>&1 & Qt Creator のランチャ(アイコン)をシェル起動に修正 desktop ファイルの Exec 行の先頭に "bash -i -c" を追加Exec=bash -i -c /opt/qtcreator-x.x.x/bin/qtcreator apt パッケージでインストールした場合の desktop ファイル/usr/share/applications/qtcreator.desktop 公式パッケージでインストールした場合の desktop ファイル/usr/share/applications/QtProject-qtcreator.desktopコンソール出力を破棄バックグラウンドで起動ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 81.
    画面分割できるターミナル Terminator80ロボット工学セミナー 2016-06-26screen/ tmux のような画面分割を簡単に利用可能ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 82.
    Contents 81ロボット工学セミナー 2016-06-261.自律走行を実現するための ROS パッケージ2. 自己位置推定と SLAM の基本3. 各パッケージのアルゴリズムa. 自己位置推定(amcl)b. SLAM、地図生成(gmapping)c. 大域的経路計画、局所的動作計画(move_base)4. ROS に関する情報の調べ方5. ROS での開発に関する知見6. まとめ
  • 83.
    まとめ82ロボット工学セミナー 2016-06-26 slam_gmapping,navigation の構成、アルゴリズム 自己位置推定:Adaptive Monte Carlo Localization SLAM、地図生成:Rao-Blackwellized Particle FilterSLAM(FastSLAM 2.0 での Grid Mapping) 大域的経路計画:Navigation Function とダイクストラ法 局所的動作計画:Dynamic Window Approach ROS に関する情報の調べ方(ROS Index を活用) ROS での開発に関する知見 catkin_make コマンド/catkin コマンド(新しいビルドシステム) Subscriber へのコールバック関数の登録方法 Qt Creator:CMake を開ける統合開発環境 Terminator:画面分割できるターミナルROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ
  • 84.
    参考文献83ロボット工学セミナー 2016-06-26 ROSWikihttp://wiki.ros.org/ 友納 正裕: “移動ロボットのための確率的な自己位置推定と地図構築”, 日本ロボット学会誌, vol.29, no.5, pp. 423-426, 2011. 友納 正裕: “移動ロボットの自己位置推定と地図構築の基礎”,第47回ロボット工学セミナー, 2008. Sebastian Thrun, Wolfram Burgard, and Dieter Fox:“Probabilistic Robotics”, The MIT Press, 2005.(邦訳)上田 隆一: “確率ロボティクス”, マイナビ, 2007. 坪内 孝司: “移動体の位置認識”, 計測自動制御学会 編,ビークル, コロナ社, 2003. Dieter Fox, Wolfram Burgard, and Sebastian Thrun: “TheDynamic Window Approach to Collision Avoidance”,IEEE Robotics & Automation Mag., vol.4, no.1, pp. 23-33, 1997.ROSパッケージ 自己位置推定、SLAM アルゴリズム 開発情報 まとめ

[8]ページ先頭

©2009-2025 Movatter.jp