14
14

More than 5 years have passed since last update.

odomフレームの解説

Posted at

ROSの自己位置推定の/odomの意味

概要

みなさんROSのamclパッケージで自己位置推定したことありますか?
自己位置推定すると大体

/map -> /odom -> /base_footprint(ロボットの現在位置)

という構成でtf treeが構築されると思います。
今回このうち/odomフレームってなんだ?って度々疑問を覚えたのでそのメモ兼解説をします。

ここで言及する自己位置推定とは周辺の環境地図がすでに作成されている状態で環境地図内におけるロボットの現在位置を推定する行為を言います。マップを作成しながら自己位置を同時に推定するSLAMとは少し違うので注意してください。

Odometryについて

自己位置推定は本来LaserScanが無くても実行可能です。そのやり方はIMUから得られる(角)加速度を2回積分すれば現在位置になります。簡単ですね!
この方法で取得する現在位置をOdometryといい、amclにおいてOdometryの示す位置は/odom座標系に存在することになっています。nav_msgs/Odometryのメッセージ型には位置の他に速度と推定値の共分散が含まれます。
この処理を実装すると

/odom -> /base_footprint

の関係性が構築されます。/odomフレームとは/base_footprintフレームの位置を決める上での原点であり、Odometry値の基準だから/odomという名前になっているわけです。

ただしこの方法は目を瞑ったまま歩いていることと同じなので、環境地図の存在する/map座標系と連携する方法がありません。そこで/map/odomのギャップを埋める方法としてamclパッケージが提供するパーティクルフィルターを用います。
ここまでの操作でやっと

/map -> /odom -> /base_footprint

の関係が構築されるわけです。

シミュレータ環境においてSLAMを実行した場合Odometryの計測誤差は基本0であるはずなので、/map/odomは大体同じ位置に存在します。理想的な環境だからこその挙動です。
逆に実環境ではセンサーに乗るノイズが大きいので/odomフレームが若干揺れ動くはずです。そうでないなら自己位置推定のシステムが間違っているか、とてもすごい自己位置推定システムで誤差が全く存在しないかのどちらかです。

IMUを使わない自己位置推定について

世の中にはIMUを搭載していなくても自己位置推定する不思議なデバイス(ZED stereolabs等)が沢山存在します。
自己位置推定の基本原理は上記の通りで、違う点は取得する画像やPointCloudからフレーム間の移動距離を求めている点です。フレーム間の移動距離を常に求めてその値を積算していけば同じようにOdometryとして利用可能です。
このやり方はIMUが必要無いというメリットがありますが計算コストがとても高いのでリアルタイムで動かすことが辛いです。移動距離の計算アルゴリズムを最適化する、GPU等のハードウェアの暴力を利用するといった手法を取らなければなりません。
HTC Vive等のVRヘッドセットはカメラ+IMU+外部センサーという構成で自己位置推定を行っています。
IMUは誤差が積算する欠点を大きく上回って毎フレームの計算リソースが少なくて済むという利点があるため、IMUで取れるOdometry値を補正するというやり方が多いです。自己位置推定をするシステムをハードから自作する場合できるだけIMUは搭載してあげてください。

まとめ

  1. 現在位置base_linkはIMUの情報を元に計算される。この値はOdometryという意味を持つので基準フレーム名に/odomという名前を用いている。
  2. LaserScan等のセンサーから得られる周辺情報を元にOdometryを補正する。その補正値は/map/odomへの変換であり、/odom以下の座標系全体に影響を及ぼす。理想的な環境ではノイズが乗らないので/map/odomの変換値は0になる。
14
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14