MRPTを用いた環境地図作成用RTコンポーネント

MRPTを用いた環境地図作成用RTコンポーネント

投稿者: 
西 諒一郎
MRPTを用いた環境地図作成用RTコンポーネント

概要

  • MRPT(The Mobile Robot Programming Toolkit)を用いて,自己位置情報とレーザレンジファインダからの距離情報をもとに,二次元の点群の環境地図を作成する.

特徴

  • MRPTを用いた環境地図作製用コンポーネント
  • MRPTは移動ロボット用のオープンソースのライブラリで,自己位置推定,SLAM,行動計画,障害物回避等のアルゴリズムおよび一般的なデータ構造を持っています.
  • なおこのコンポーネントではICP SLAMを利用しています.

ライセンス

  • 修正BSDライセンス

仕様

  • 言語: C++
  • OS: Windows 7

ソースコード

問合先(メールアドレス): 
ueda@ctrl.nara-k.ac.jp
Resources
Project Information
OS: 
Windows
言語: 
C++
OpenRTM ver.: 
1.1
Average: 
4
Average: 4 (1 vote)
最終更新日時: 
土, 2012-12-22 03:11

コメント

投稿者: 

こんにちは.ysugaこと菅 佑樹です.

興味があったのでいじり倒しています.

1.マニュアルどこですか? これがマニュアルっぽいですが, http://staging.openrtm.org/openrtm/sites/default/files/5190/ReadMe_BuildingMap.pdf リンクしてもらえると嬉しいです.

2.ビルドできません Win 7 64bit + VS2010Expressだと,ビルドできません. 問題は,inttypes.hがデフォルトで無いです. http://code.google.com/p/msinttypes/downloads/list から落として,C:¥Program Files (x86)¥Microsoft Visual Studio 10.0¥VC¥include に入れたら通りました.

3.URGがスマートじゃないです. URGはMRPTにもAPIがあって,これのほうがずっと使いやすいと思いますが,使わないのはなぜですか? もしくはMRPTを使ったURG用RTCを同梱したらもっと良いと思います. このMapBuilderRTCが依存するURG用RTCはとても使いにくいです. レンジセンサの設定を一度だけ取ってくるだけなのに,サービスポートは冗長だと思います. コンフィグレーションセットで対応するのが良いと思います.

4.APIの使い方が間違っていませんか? ロボットからオドメトリ情報を受け取って,それをActionRobotMovement2Dという構造体に入れ, それを使ってマップをビルドしていると思いますが, この構造体は,1ステップ前のロボットの座標を(x, y, theta) = (0, 0, 0)として,次のステップの動作までの差分を入れるものなので, オドメトリ計算をした後の絶対座標系が来るはずのInOdometoryPositionInから取り出したPose2Dをそのまま差分して入れるのではうまく行きません. たとえば,90度回転してからの動作を考えてください.y座標が増えて行きますので,差分もyの値が大きくなりますが,ActionRobotMovementでは,これはロボットが横に移動している事を意味してしまいます.

5.共通インターフェースへの対応を 上記のインターフェースやURG等の使い方も含めて,共通インターフェースに対応してあると楽です. マニュアルも,共通インターフェースに対応しています,というので, ほとんどの説明を省けます.

とても良いRTCだと思います. 頑張ってください.

投稿者: 

お世話になっております 奈良高専の西です

菅 佑樹 様 返信おそくなり申し訳ございません. ご指摘とコメントありがとうございます.

参考にさせて頂き至急対策をしていきたいと思います.

マニュアルについては早速リンクを貼り付けておきました.

また 2.のinttypes.hについてですが,mrpt内のヘッダーファイルをmsvcで使われているものに変更することで対処しました.

3.のURGについては既存のコンポーネントが他のプロジェクトでも多用されていたので使用していました. しかしながら,ご指摘の通りであるため改善いたします.

4.につきましても至急対応いたします.

なお5.の共通インターフェースについての理解がまだ不十分なため,しっかり理解した上で対応を考えます.

またbuildフォルダについてのご指摘もありがとうございます. こちらも対応させていただきます.

非常に丁寧なご指摘ありがとうございます. RTコンポーネント作成の経験も浅く,ソフトウエア開発においても未熟でありますので非常に参考になりました. 是非これからも改善すべき点,間違っている点等ありましたらコメントして頂けるとありがたいです. どうぞよろしくお願いいたします.

投稿者: 

菅 佑樹 様

お世話になっております 奈良高専の西です. 対応に時間がかかってしまいましたが,ご指摘頂きました以下の点を修正しコンポーネントのアップデートを行ないましたので,ご報告させて頂きます.

1.今回のアップデートにてURGキャプチャコンポーネントを同梱いたしました.

2.誤っていたオドメトリの計算式を,修正いたしました.

3.入力ポートを,RTC::RangeData型に変更いたしました.

さらにお気づきの点がございましたら,コメントしていただけるとありがたいです. 今後ともどうぞよろしくお願いします.

投稿者: 

菅です.

すみません,もう一点.

buildフォルダを入れていますが,このフォルダは,他の方がビルドしようと思ったときには使えません. 通常は,CMakeしてもらうので,このフォルダは配布する際は消すのが普通です.

このCMakeフォルダに,.iniファイル(設定ファイル)が入っているのも良くないので,対応をお願いします.

投稿者: 

小枝と申します. Webページとマニュアルを見せて頂きました.RTMはあまり得意ではありませんので,的を外したコメントになっていたらすみません.ご参考になれば幸いです.

・MRPTとはどういう物なのか,ある程度の説明が欲しい.

・「フリーのMRPT」とあるが,何ライセンスなのかを明示したほうが良いのでは.

・どういうアルゴリズムで環境地図が作成されているのか,を数式で説明して欲しい.

・恐らくここで生成される環境地図は平面(2次元)と思われるが,その点を明確に.

・もし簡単に3次元に拡張できるのであれば,その点は主張すればなお良いと思う.

・ここで言う「環境地図」とはどういう物なのかを説明して欲しい.(単なる点群の貼り合わせなのか,線分の集合なのか,面なのか,等)

・他のLRFでも問題なく利用できるのか.角度分解能や時間分解能の低いLRFを用いた場合でも問題なく地図生成できるのか.

・環境地図生成に実際に必要なのは「自己位置情報」なのか「オドメトリ情報」なのか.

・オドメトリ情報とは具体的に何なのかが不明確です.(エンコーダのパルス情報なのか,車輪の回転量なのか,ロボットの進行方向なども含むのか,等)

・マニュアルの図3に,生成された環境地図らしきものが載っているが,実際の環境がどの程度再現できているのかが分からない.

投稿者: 
MRPTを用いた環境地図作成用RTコンポーネント

奈良高専の西です.

小枝 先生

返信が非常に遅くなり申し訳ございません.

また,たくさんのご指摘ありがとうございました. ご指摘を受けて,HPおよびマニュアルへの追加・修正を行ないました.

以下にそれぞれのご指摘に対する回答をさせて頂きます..

  • MRPTとはどういう物なのか,ある程度の説明が欲しい.
    • The Mobile Robot Programming Toolkit(MRPT)は移動ロボット用のライブラリになります. ベクトル計算や経路設計,環境地図作成などのアルゴリズムが含まれています. その旨をHPの概要およびマニュアルに追加しておきました.
  • 「フリーのMRPT」とあるが,何ライセンスなのかを明示すべき.
    • 修正BSDライセンスであることを,その旨をHPの概要に追加しておきました.
  • どういうアルゴリズムで環境地図が作成されているのか,を数式で説明して欲しい.
    • 地図生成にはICPアルゴリズムを使用していることをHPの概要およびマニュアルに追加しておきました.
  • 恐らくここで生成される環境地図は平面(2次元)と思われるが,その点を明示しておく方が良い.
  • もし,簡単に3次元に拡張できるのであれば,その点を主張すればなお良いと思う.
    • このコンポーネントでは2次元の環境地図しか作れません.HPの概要に書いておきたいと思います.
  • ここで言う「環境地図」とはどういう物なのかを説明して欲しい.(単なる点群の貼り合わせ,なのか,線分の集合なのか.)
    • 点群の貼り合わせになります.その旨をHPの概要に追加しておきました.
  • 他のLRFでも問題なく利用できるのか,もっと角度分解能や時間分解能の低いLRFを用いた場合でも問題なく地図は生成できるのか.
    • 他のLRFでは試していないのですが今回同梱したLRF用コンポーネントは北陽電機株式会社製のLRFであれば対応できるようにしています.分解能が低いLRFの場合も対応できるはずです.
  • 環境地図生成に実際に必要なのは,「自己位置情報」なのか,「オドメトリ情報」なのか.
  • オドメトリ情報とは具体的に何なのかが不明確です.(エンコーダのパルス情報なのか,車輪の回転量なのか,ロボットの進行方向なども含むのか,等)
    • 自己位置情報になります.オドメトリ情報とは車輪の回転量よりロボットがどれだけ動いたのを初期位置からの絶対座標系で表したものです.その旨をマニュアルに追加しておきました.
  • マニュアルの図3に,生成された環境地図らしきものが載っているが,実際の環境がどの程度再現できているのか,全く分からない.
    • マニュアルの図4に出力結果として作成した環境地図と実験場所の図面を貼り合わせたものを追加しておきました.

改善すべき点,間違っている点等気づかれましたら,ご指摘頂けるとありがたいです. 今後ともどうぞよろしくお願いいたします.

投稿者: 

東京理科大学の太田と申します。

本機能に興味を持ったため、ダウンロードさせていただきました。

私はOSにおいてLinuxを使用していますが、ソースコードを見た限りLinux系でも対応できると考えていました。

しかし結果的にインストールに失敗したため、こちらに報告させていただきます。

mrpt-0.9.5のmake(コンパイルに相当します)において、[error: 'GTEST_FAIL' was not declared in this scope]というエラーが発生しインストールすることができませんでした。

OS違いではありますが、もし何らかの対応策があればご教授頂けるとありがたいです。

投稿者: 

奈良高専の西です. 我々が作成したコンポーネントに興味を持って頂きありがとうございます.

ご指摘いただいた件についてご報告させて頂きます.

Ubuntu10.04にて確認を行いました. mrpt自体は当環境では,apt-getコマンドを使用してインストールして使用していました.

 $ sudo apt-get install libwxgtk2.8-dev libftdi-dev libglut3-dev
 $ sudo apt-get install zlib1g-dev libusb-1.0-0-dev
 $ sudo apt-get install libdc1394-22-dev libavformat-dev libswscale-dev
 $ sudo apt-get install libhighgui-dev libcvaux-dev
 $ sudo apt-get install libgtest-dev libeigen3-dev

 $ sudo add-apt-repository ppa:joseluisblancoc/mrpt
 $ sudo apt-get update
 $ sudo apt-get install libmrpt-dev mrpt-apps

また、ソースコードからmakeしましたが,エラーは発生しませんでした.

もしよろしければご使用のLinux環境を教えていただけると幸いです.

投稿者: 

有用なRTCの公開ありがとうございます。       
産技大NSP研究所研究員の泉井と申します。

本RTCを使わせていただき、Roomba+URG-04LX-UG01を用いて環境地図を作成しようとしましたが
赤いロボットは表示されましたが、環境地図が作成されませんでした。

LRFとRoomba(オドメトリ)からデータは送信されているので、設定次第では動作すると思っており、
保存されたrawlogをRMPTのRawLogViewerで閲覧してみたところ、CObservation2DRangeScanの「Raw valid-scan values」がすべて0(無効?)になっているので、
LRFのデータ関連が怪しいと思っています。(Points in the scan: 682に対してInvalid points in the scan: 682になっています)

推奨環境との相違点は以下となっています。
・オドメトリとしてRoombaを使用しており、オドメトリとしてはあまり精度がよくない(1割ほどはずれる)
・URG-04LX-UG01を使用しており、URG UTM-30LXより測距範囲が低い

設定や環境等、どこか見直した方が良い点がありましたらご教示ください。
お忙しいところお手数をおかけしますが、よろしくお願いします。

投稿者: 

RTCの開発を担当した西です

対応が遅くなり大変申し訳ございません

BuildingMap_MRPT.cpp内 284~290行目の

 for(int i=0; i<SCANS_SIZE; i++) {
     myObs->scan[i] = (float)m_rangeData.ranges[i];
     if(1.0 < myObs->scan[i])
        myObs->validRange[i] = 1;
     else
        myObs->validRange[i] = 0;
 }

 for(int i=0; i<SCANS_SIZE; i++) {
     myObs->scan[i] = (float)m_rangeData.ranges[i];
     myObs->validRange[i] = 1;
 }

に変更して動作を確認いただけませんでしょうか.

なおvalidRange[i]は反射光がない(壁までの距離が遠すぎる)際に偽(=0)となります (http://reference.mrpt.org/svn/classmrpt_1_1slam_1_1_c_observation2_d_range_scan.html#ad75c2af475ada6103503511e90b965b7

ここで使用している距離の単位は[m]を利用していますので レーザレンジファインダから出力されるデータが[m]になっているか 確認をお願いします.

レーザレンジファインダのデータ取得に 同梱しているHOKUYO_LRF_MRPTを利用されている場合は [m]で出力しているので問題ないです.

roomba537を利用しオドメトリの誤差は1割から2割程度ありましたが 環境地図の作成はできることを確認しています.

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2160
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク