MRPTを用いた環境地図作成用RTコンポーネント
MRPTを用いた環境地図作成用RTコンポーネント
投稿日時:
金, 2012-11-16 12:35
概要
- MRPT(The Mobile Robot Programming Toolkit)を用いて,自己位置情報とレーザレンジファインダからの距離情報をもとに,二次元の点群の環境地図を作成する.
特徴
- MRPTを用いた環境地図作製用コンポーネント
- MRPTは移動ロボット用のオープンソースのライブラリで,自己位置推定,SLAM,行動計画,障害物回避等のアルゴリズムおよび一般的なデータ構造を持っています.
- なおこのコンポーネントではICP SLAMを利用しています.
ライセンス
- 修正BSDライセンス
仕様
- 言語: C++
- OS: Windows 7
ソースコード
- ソースはhttps://github.com/UedaLabo/BuildingMap_MRPTからダウンロード可能です.
- マニュアルは http://cloud.github.com/downloads/UedaLabo/BuildingMap_MRPT/ReadMe_BuildingMap.pdfからダウンロード可能です.
- MRPTリンクについてこちら
- RTミドルウェアコンテストで使用したスライドはこちら
問合先(メールアドレス):
ueda@ctrl.nara-k.ac.jp
最終更新日時:
土, 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に,生成された環境地図らしきものが載っているが,実際の環境がどの程度再現できているのかが分からない.
奈良高専の西です.
小枝 先生
返信が非常に遅くなり申し訳ございません.
また,たくさんのご指摘ありがとうございました. ご指摘を受けて,HPおよびマニュアルへの追加・修正を行ないました.
以下にそれぞれのご指摘に対する回答をさせて頂きます..
改善すべき点,間違っている点等気づかれましたら,ご指摘頂けるとありがたいです. 今後ともどうぞよろしくお願いいたします.
東京理科大学の太田と申します。
本機能に興味を持ったため、ダウンロードさせていただきました。
私はOSにおいてLinuxを使用していますが、ソースコードを見た限りLinux系でも対応できると考えていました。
しかし結果的にインストールに失敗したため、こちらに報告させていただきます。
mrpt-0.9.5のmake(コンパイルに相当します)において、[error: 'GTEST_FAIL' was not declared in this scope]というエラーが発生しインストールすることができませんでした。
OS違いではありますが、もし何らかの対応策があればご教授頂けるとありがたいです。
奈良高専の西です. 我々が作成したコンポーネントに興味を持って頂きありがとうございます.
ご指摘いただいた件についてご報告させて頂きます.
Ubuntu10.04にて確認を行いました. mrpt自体は当環境では,apt-getコマンドを使用してインストールして使用していました.
また、ソースコードから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行目の
を
に変更して動作を確認いただけませんでしょうか.
なお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割程度ありましたが 環境地図の作成はできることを確認しています.