ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【自律型ロボット製作記】#8 amclとlaser_scan_matcherで自己位置推定を試す


どうもこんにちは、
現在開発中の自律型ロボットは、SLAM(HectorSLAM)を使い、自律走行+地図作成を同時に行っていました。
ただし、室内における実運用を考えると、以下の様な課題がありました。
・ある程度地図は固定されているのに毎回地図を作成するのが面倒。
・中間経路や最終ゴールを毎回指定するのは面倒。
ということで、今回はamcl+laser_scan_matcherを使い、事前に作成した地図とマッチングしながら自己位置を推定する方法を試してみました。

スポンサーリンク

amclとは?

amcl(adaptive Monte Carlo localization)は、2Dで移動するロボットのための確率的な位置推定システムです。 パーティクルフィルタ(またはKLDサンプリング)を使用したモンテカルロ法を用いて、既知のマップに対するロボットの姿勢の追跡を行います。このノードは、Andrew Howardの「amcl」ドライバーから派生したものとなります。
引用:Navigation Stack-amcl-

詳細は勉強中ですが、パーティクルフィルタを使うことで、ノイズにガウス性を仮定する必要がないため、想定外のノイズに強いアルゴリズムのようです。(その代わりカルマンフィルタベースのアルゴリズムよりも計算量が多い)
※カルマンフィルタベースのHector SLAMはノイズにガウス性を仮定しないといけない。

amcl+laser_scan_matcherによる自己位置推定

このamclとlaser_scan_matcherを組み合わせることで、事前に作成したマップ上での自己位置推定が可能です。(RPLiDARのみで推定します)
TF座標変換としては、以下の様になります。
map—(amcl)—>odom—(laser_scan_matcher)—>base_link
※amclでodomの初期位置を補正され、補正されたodomに対して、laser_scan_matcherでbase_linkが推定されていくようです。

動かしてみる

動作環境

システム構成は以下です。
・センサー:RPLiDAR A1M8 レーザースキャナ
・Ubuntu18.04
・ROS melodic (最近、Ubuntu,ROSをアップデートしました)
※ROS hector_slamが動作する自律ロボットで動かす。
(詳細は、過去の自律ロボット製作記記事を参照ください)
「ロボット製作記」に関する記事

laser_scan_matcherのインストール

laser_scan_matcherをインストールします

$ sudo apt-get install ros-melodic-laser-scan-matcher

amclのインストール

amclをインストールします

$ sudo apt-get install ros-melodic-amcl

事前にHectorSLAMでマップを生成

事前にHectorSLAMでマップを作成し、マップファイルを保存しておきます。

$ rosrun map_server map_saver -f ./マップ名(mymap)

laser_scan_matcherのlaunchファイルを作成

laser_scan_matcher用のlaunchファイル(laser_odometory.launch)を作成します。
map座標系からodomは、amcl側で座標変換されるので、laser_scan_matcherのfixed_frameは、/odomを指定します。(7行目)

amclのlaunchファイルを作成

amcl用のlaunchファイル(amcl.launch)を作成します。
各パラメータの詳細は調査中です。

map_serverのlaunchファイルを作成

map_server用のlaunchファイル(map_server.launch)を作成します。
argsには、事前にhectorSlamで作成したマップファイルを指定します。

各launchファイルを実行

各launchファイルを実行して動かしてみます。
まず、roscoreの立ち上げ、rplidarノードを立ち上げます

$ roscore
$ roslaunch rplidar_ros rplidar.launch

今回作成したlaunchを立ち上げていきます。

$ roslaunch map_server.launch
$ roslaunch laser_odometry.launch
$ roslaunch amcl.launch

rvizを立ち上げ、デバッグします。
PoseArrayを追加し、Topicにparticlecloudを指定すると、パーティクルフィルタを可視化できます。

以下のようにロボットを動かしていくと、パーティクルフィルタが収束していき
位置が推定されていくことが確認できました。

参考

以下サイトを参考にさせていただきました。ありがとうございます。
LiDARと地図情報を使った自己位置推定①

LiDARと地図情報を使った自己位置推定②

これから

amcl+laser_scan_matcherである程度自己位置が可能なことがわかりました。
今後の課題としては、
AMCL+laser_scan_matcherでの自宅内での自己位置推定の精度を検証する。(hector_slamと比べてどうか?など。)
AMCLの原理理解、パラメータ調整の調査をやっていく予定です。
あと、laser_scan_matcherは、IMU(慣性センサー)を使うことで精度の向上ができるようなので、IMUなども試してみます。

   

スポンサーリンク

いいね!を押すと、
最新記事をお届けします。

Twitter で
関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン