gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

ROSにおけるodomフレームの役割

Navigaitonパッケージのamclを使うと、odomフレームがちょろちょろ動くのが確認できると思います。どうしてフレームが動くんだろうと不思議に思っていたので、調べてみました。推測も入っていますが、下記に調べたことなどを纏めます。

ROSの下記を見ると、

  • map : 自己位置推定の基準フレーム。
  • odom: オドメトリの基準フレーム。

となっています。map - odom間の位置関係は、特に何も無ければ一定です。ただし自己位置推定の結果としてロボットの座標が修正されると、その位置関係は変化します。なぜならば、odomフレームにおける軌跡(オドメトリ)の形状は一定となる必要があります。そのため、map上でのロボットの位置が変わる、つまりオドメトリの最新座標の場所が変化します。しかしオドメトリの形状が固定という制約があります。そのため、つじつま合わせにodomフレームが動きます(sendTransformでmap - base_linkの位置関係が更新させるのがトリガとなり、芋づる式にbase_link - odomが変化→map - odom間が変化となります)。

answers.ros.org
www.ros.org

Submap:部分地図(= local map:局所地図)

ここで取り上げるsubmapとは、ある一定の条件下で作成される、グローバル地図(全体地図)を構成する構成要素(部品)を指します。Submapの活用方法は、自己位置推定やloop closingです。今回はこのsubmapがどの様に構成されるのか、先行文献を調査した結果を記載します。文献のタイトル名を論文へのリンクにしていますので、ご興味あれば原著を読んでみてください。また参考になる文献を見つければ、適宜調査方法を変えてここに列挙したいと思います。

調査方法

  • 2017年以降のICRA/IROSを対象
  • 論文自体にsubmap又はlocal mapの構築方法の記述がある論文を対象としており、参考文献に構成方法を丸投げしているものは対象としない

An Online Multi-Robot SLAM System for 3D LiDARs

"The submap size is controlled by {m}, the number of previous scans and {d_{min}}, the minimum travelled distance between consecutive scans."とあるので、

  • 最低scanデータ数(submapを構成するセンサデータの数)をクリアしていること
  • 1つのsubmapを構成する上で必要な走行距離をクリアしていること(ただし始点と終点の距離が一定以上という意味であり、submap中でくるくる円を描いたとしても、円のサイズによっては目標クリアには届かないことを意味していると思います)

の2つが条件となります。これは一定の密度や大きさのsubmapを得られることを期待した処置と考えられます。

Visual Occupancy Grid Map for Submap-based Pose Graph SLAM and Planning in 3D Environments

  • {\Delta t}の間のscanデータを使って構築する
  • ただしsubmapの共分散が最大値を超えないように気を付ける
    • つまり、最大値を超えた場合は{\Delta t}を待たずして構築を止めると考えられる。

上記条件を定めた理由として考えられるのは、一定のデータ量を持った地図を作成したい、ただし自信のない地図はpose graphの最適化時に以降の座標推定を邪魔するため避けたい、ということだと思います。また本論文はnavigationを目的としているため、submapの共分散が上限を超えた場合はシステムをリスタートする等し、ロボットがおかしな方向に進まないようにするといった意図もあるかもしれません。

ProSLAM: Graph SLAM from a Programmer’s Perspective

  • 一定の距離毎に生成する

オドメトリの運動モデル

SLAMの研究で有名なFreiburg大のBurgard先生の授業資料を見ると、主に下記の4種類があるようです。

  1. Differential drive (AmigoBot, Pioneer 2-DX)
  2. Car drive (Ackerman steering):自動車の基本的なステアリング機構
  3. Synchronous drive (B21):タイミングベルトを使って、各車輪の動きを同期する機構
  4. XR4000 (はっきりと書いてないですが、4輪駆動ということだと思います)
  5. Mecanumwheels

運動モデルの考え方や数式は下記の資料に纏まっていますので、下記を参照ください。なお途中で出てくるHolonomicsとは、そのモデルの拘束条件が一般化座標と時間にのみ依存する性質を指します[2][3]。上記の1. のdifferentialモデルは、横に動けないといった構造上の制約があるため、Honolomicではない拘束を受けます。つまり、非Holonomic拘束を受けます。正しくはないですが理解の出助けとして、自由に動けるのがHolonomic拘束、そうでないのが非Holonomic拘束と考えるとイメージしやすいと思います。

画像処理における特徴点(feature)と記述子(descriptor)

画像処理において、特徴点・キーポイントという言葉と記述子という言葉が出てきます。前者は、ある観点で見た際の画像中の特徴的な部分を指します。例えばSIFTがそうです。後者は特徴点周りの領域から取り出した特徴量を指します。例えばBRIEFがそうです。つまり、双方共に画像中の特徴を表現しており、その概念の違いは表現する範囲と言えます。

参考文献

[1]原田達也. 画像認識. 講談社, 2017.

locality sensitive hashing(LSH)

LSH[0][6]とは、ハッシュ関数を使ってデータを次元圧縮をしたり、データ同士の比較を高速で行えるようにするための手法である。使用するハッシュ関数の代表例は、下記の安定分布とハミング距離、Jaccard指数がある。ハミング距離を使って、データの比較する例は[6]がわかりやすい。

安定分布

[1][2]によると、確率変数{X_i}が独立同時分布(i.i.d)Xに従う時、
{\displaystyle  S_n = \frac{1}{a_n} \sum^n_{i=1} X_i - b_n}
が元のi.i.dと同一の分布である場合、Xは安定分布であるという。なお[3]では条件式が別形式で記載されているが、
{\displaystyle aX_1 + bX_2 = cX + d \Leftrightarrow \frac{a}{c}X_1 + \frac{b}{c}x_2 = X + \frac{d}{c} \Leftrightarrow X = \frac{a}{c}X_1 + \frac{b}{c}X_2 - \frac{d}{c} }
となり、XからサンプルSを取り出した時に{X_1, X_2}の係数と{\frac{d}{c}}を変化させれば上式と同様のことが言える。

安定分布の中の代表格が、ガウス分布やコーシー分布である。

ハミング距離[4]

2つの変数a, bがある時、
f:id:graziegrazie:20190316061929p:plain
で求める。例えばa = [1, 0, 0, 1]、b = [1, 1, 0, 0]とすると、ハミング距離は(0+1+0+1)=2となる。

Jaccard指数[5]

f:id:graziegrazie:20190316062819p:plain
a={abc, def, ghi}, b={abc, efg, hij}とすると、{a \cup b = 3 + 3 - 1}(1つ重複する要素があるため)かつ{a \cup b = 1}なので、{J(a, b) = \frac{1}{5} = 0.2}となる。