Jetson Nano (Jetpack 4.6) + ROS1 (Melodic) で Hector_SLAM を使ってみた(1)


前回Jetson Nano (Jetpack 4.6) + ROS1 (Melodic) で Hector_SLAM を動かしてみるの続きです。

マッピング(地図作成)

RPLiDAR を起動しておきます。

 

Hector_SLAMの以下のコマンドで、RPLiDARのデータの点群地図をrvizでマッピングしてみました。

こういう間取りの部屋をスキャン

 

hector_mappingノードと、geotiffマップの生成に必要なhector_trajectory_serverノードhector_geotiffノードを使っています。

ノードとトピックの関係は以下のコマンドで描画できます。

 

 

Hector_geotiffは、マップとRPLiDARの軌道をGeoTIFF画像ファイルに保存します。

新しいターミナルを開いて次のコマンドを実行。

savegeotiffマップが以下のフォルダーに保存されます。

 ~/catkin_ws/src/hector_slam/hector_geotiff/maps

ファイルは2種類あります。

tif拡張子のある方がGeoTIFFです。

こんな画像です。

マップは、ROS用のhector_slamライブラリによって作成された2DグリッドベースのSLAMマップです。

これは以下のような間取りの部屋をスキャンしたものです。なるほどです。

右上に流れているのは開口したドアを通してレーザーが隣室の壁をスキャンしたものです。

窓側は遮光カーテンが引かれているのでレーザーは漏れていません。

GeoTIFFはGIS方面ではよく使われるもので、地理参照情報が埋め込まれたラスター画像です。

一緒に保存されているTFWファイルはワールドファイルと呼ばれるもので、一般的にはTIFF画像として保存されているマップの位置、スケール、回転が記述されています。


参考までに

QGISで地図画像(GeoTIFF:ラスターデータ)から位置情報を抽出

 


RPLiDAR のscanデータを表示してみます。

Addボタンをクリック、topicLaserScanを追加

 

scanされたデータが表示されています(赤の細線)。

 


Appendix

地図はmap_serverを使って取得することもできます。

map_serverをインストールしておきます。

地図データを保存するフォルダー作成

Hector_SLAM 起動後、以下を実行

pgmとyamlの2つのファイルが作成されています。

yamlには地図の解像度や原点の情報が書かれています。

pgmは画像ファイルでこんな感じ

 

反対に、保存したデータを読み込んでみます。

ROSを起動しておきます。

もう一つターミナルを開いて、データを保存したフォルダーへ移動し、yamlファイルを指定してmap_serverを起動します。

さらにもう一つターミナルを開いてrvizを起動します。

左下のAddボタンをクリック

By topic タブで/map を選択してOKをクリック。

こんな感じ。

 


Appendix2

ダイソーのアクリルボックスを使えば、RPLiDARとJetsonをまとめたハンドヘルドなHector_SLAMのシステムが作れます。上記ではJetson Nano (4GB) を使っていますが、2GBバージョンでも動きます。

アクリルボックスx2をちょこっと加工(といっても穴あけ程度ですけど)

電源はAnkerのモバイルバッテリでいけます。

こんな感じ。各パーツは強力両面テープで固定すればOKです。なお、RPLiDARの4つのスペーサーはM2.5です。

下段のボックスの下にシャーシ用ケースを追加して、少々トルクのあるステッピングモータと取付用ブラケット、ホイール、ボールキャスタをつければ、odometryを取得できるロボットカーにも変身….するはず(JetsonのGPIOにはモーター駆動できるPWMが2つフリーになっていたと思うので^^…..モーターへの給電は後から考えます->給電とPWM制御にPi PicoかZeroもあり?)。

odometryなしでロボットカーを動かすならサーボモータでいけます。

Jetson をサーボモーターで駆動する場合は以下を参照

Jetson Nano の GPIO にサーボモータをつないで制御してみる

なお、ステッピングモータの駆動やオドメトリの取得については次回。

 


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*