べれすく!

素人プログラマによるモノづくりやブログ生活を話すブログ

【スポンサーリンク】

【距離センサでロボットの位置がわかる?】LittleSLAMを導入してみた話

こんにちは。
お久しぶりです。べれすくです。

突然ですが、SLAMってご存じでしょうか?
レーザーレンジファインダーや深度カメラのような広範囲測距センサーを用いてマッピング、その作成したマップデータとセンサーから自己位置推定ができる技術です。
最近だと家庭用お掃除ロボットにも搭載され始めたようですね。

エンコーダーでもSLAMができるなんて話も聞きますがどうなんでしょね。

さて、そんなSLAMを勉強したいと考えて書籍を調べるとある一冊の本が出てきます。

SLAM入門: ロボットの自己位置推定と地図構築の技術

SLAM入門: ロボットの自己位置推定と地図構築の技術

この本です。 この本は基本的にWindowsを使って解説しているらしいです。
私はこの本を持ってないんです。ほしいんですけどね。

前置きはこのくらいにして、この本で使用されている、LittleSLAMの導入方法を説明していきましょう。

まずは必要なものをダウンロードします。

LittleSLAM

github.com

親切なことにこのサイトにほぼすべての導入方法が載ってます。

https://github.com/furo-org/LittleSLAM/blob/master/doc/install-win.md

VIsualStudioを使い慣れてる人はこのサイト見れば全部わかっちゃう気がします。
私は四苦八苦しました。 このサイトに捕捉する形で説明しようと思います。 このサイトでは、3つのフォルダを取り出すって書いてありますが、どれかわからないので全部取り出して、”LittleSLAM-master”というフォルダ名自体を”LittleSLAM”にかえてしまいました。
ファイル名を書き換える意味はありませんが、このサイトとフォルダ名を合わせます。

VIsualStudio

visualstudio.microsoft.com

みんな知ってる統合開発環境。ダウンロードしてインストールしてください 2019が最新だけど当方は2017を使ってるので2017がおすすめ。 2019でも問題ないと思うけどね。
*2019/11/10追記
2019でも問題なく動きました。
2019のほうが軽いので今となってはこっちのほうがおすすめ。

Boost

www.boost.org

C++用の汎用ライブラリです。
Boostを調べるとインストール方法とか出てきますが、今回はダウンロードしたファイルの一部を利用するだけので、ビルドも、インストールも必要ないです。
ただダウンロードして、解凍して、出てきたフォルダを適当なところに置いておくだけでいいです。

Eigen3

eigen.tuxfamily.org

C++用の線形代数ライブラリです。 これもBoostと同様に中のファイルの一部を利用するだけなので、ダウンロードして解凍して適当なところにフォルダを置いておいてください。

gnuplot

www.gnuplot.info

グラフ描画ツールです。このソフトにマッピング結果が表示されます。
ダウンロードして、インストールしてください。 このソフトはWindowsコマンドプロンプトから起動するので、パスを通しておく必要があります。 インストール時に”パスを通す”にチェックを入れてもパスが通ってなかったので、自分で通すほうがいいと思います。 パスの通し方はWindowsのバージョンによって多少違いますが、Windows10の場合は下に書いておきます。

CMake

cmake.org

ビルド支援ソフトウェアです。
ソフトウェア開発をしていると、いつの間にか入っているかもしれません。 ですが、入っていても最新バージョンを入れておくことをお勧めします。 これを書いている現在、最新バージョンは3.15.4です。

p2o

github.com

Graph-based SLAMソルバって奴らしいです。 詳細は知りませんが、これもファイルを使うだけので適当なところに解凍します。
そして、p2oの中にある必要なファイルをいただきましょう。 p2o-masterフォルダの中にp2o.hファイルがあると思います。 それをLittleSLAMのp2oフォルダに入れます。

導入方法
それでは、必要なものはそろったので初めて行きましょう。 解凍して適当なところに置いておいてっていいましたけど、一つにファイルにまとめておくと便利です。(線が入っているのはいらないフォルダです。気にしないでください。) f:id:Veresk:20191027140542p:plain

と言ってもそんなにやることないんですけどね。 Cmakeを起動します。

LittleSLAMのサイトに従って、ファイル指定をしてConfigureを押す。 VIsualStudioのバージョンを指定して、Finishを押す。

f:id:Veresk:20191027144202p:plain

おや?Boostが見つからない?
f:id:Veresk:20191027144215p:plain

青の矢印のところからBoostのフォルダを指定してあげましょう。 フォルダを指定をして、もう一度Configureを押します。

f:id:Veresk:20191027144245p:plain

CMake Warningですか。今回はエラーじゃなくて警告ですね。 今度はEigen3が見つからないようです。 このままでもGenerateできますが、動かない可能性があります。 さらに、こっちはBoostのようにフォルダ指定してもダメみたいです。

仕方ないのでCMakeLists.txtをいじります。
LittleSLAMフォルダ内にある、cuiとframeworkとhookという3つのフォルダの中にはそれぞれ一つずつCMakeLists.txtが入っています。

LittleSLAM\cui\CMakeLists.txt
LittleSLAM\framework\CMakeLists.txt
LittleSLAM\hook\CMakeLists.txt

これらをいじります。 LittleSLAMフォルダ直下にあるCMakeLists.txtは触らなくていいです。

いじり方はLittleSLAMのダウンロードサイトに書いてあるのでお借りします。 f:id:Veresk:20191027145309p:plain

ここで一つ補足なのですが、ファイルパスはC://eigenのように/(テキストとして開いたら¥)を二連続で入れないといけません この3つを書き直したあと、Cmakeを再起動してもう一度Configureを押します。 また同じ警告が出ますが、今回はフォルダをCMakeLists.txtで指定したので警告は無視してGenerateしてしまいます。

指定したbuildファイルにあるLittleSLAM.slnをVIsualStudioで開きます。 f:id:Veresk:20191027150352p:plain

Releaseにしてx64にするってLittleSLAMのダウンロードサイトには書いてありますが、x64がなかったのでWin32のままでやります。Releaseにはします。
そしてビルド→ソリューションのビルドをします。

これ以降は躓くこともないと思います。 ビルドしたファイル内にあるLittleSLAM.exeとサンプルファイルを指定するだけで勝手にマッピングが始まるはずです。 コマンドに大量の文字が出ているけど何も出てこないっていう人はgnuplotのパスが通っていません。通してください。 f:id:Veresk:20191027150800p:plain お疲れさまでした。

Windows10のパスの通し方。

まず、通すファイルの場所を探します。インストール時に覚えている場合は結構です。 f:id:Veresk:20191027151147p:plain 左下のWindowsマークからgnuplotを探ます。 見つけたら右クリックし、ファイルの場所を表示します。 f:id:Veresk:20191027151343p:plain 出てきたのがショートカットファイルの場合ショートカットファイルを右クリックし、ファイルの場所を表示します。 f:id:Veresk:20191027151508p:plain ファイルの場所まで行けたら、赤枠の部分を右クリックしてフォルダのアドレスをコピーしておきましょう。

ここからパスの通し方です。 f:id:Veresk:20191027151752p:plain 左下の虫眼鏡マークを押してください。 f:id:Veresk:20191027152118p:plain 環境変数と入力し、出てきたものをクリックします。 f:id:Veresk:20191027152159p:plain このようなウィンドウがでるので、環境変数をクリック f:id:Veresk:20191027152248p:plain 上のpathをダブルクリック、又は選択して、編集を押す。 f:id:Veresk:20191027152413p:plain 新規を押して、先ほどコピーした通したいパスのフォルダのアドレスを入れる。 f:id:Veresk:20191027152535p:plain

OKを押して出来上がり。  

今回、LittleSLAMを入れましたが、これをどうやってロボットに組み込むかとかわからないままなんですよね。 やっぱり、あの本ほしいなぁ。

それでは!