RaspberryでROSのCartographerを使用してVNCでホストコンピューターからrviz見たくてめちゃくちゃハマった人（人）

初投稿だから色々容赦してくれよな〜（出来た興奮のままに書いているので文体がめちゃくちゃです。）
※作業を完全に覚えているわけではないし、メモしてもないので、思い出し思い出し書いています。私少し記憶違いあるかもしれない。。。

# 序文
みんなROSは楽しんで使ってるか〜？

<span style=“font-size: 100%;”> 私は全くです（半ギレ</span>

著者は底辺文系職だからプログラミングの知識も無いし、TOEIC280点で英語も読めない月収も少ない（今回については関係ない）クソザコナメクジだけどRaspPiMouseを最近購入してROSを始めようとした。
それはいいものの、

- ロボットといえばセンシングでしょ。
- 最近のロボットは自分でマップを作って自分がその中のどこにいるかわかるんですか？！う〜ん（SLAM：Simultaneous Localization And Mappingというらしい）https://ja.wikipedia.org/wiki/SLAM
- さっそくRPLiDAR-A1という安価で使えるとのインターネットの記事を見かけて飛び付いたはいいものの（RaspPiMouseを買ってしまって金欠によりこれしか買えない（Amazonにて1万円で買えた。やA神））、情報が錯綜しててわけわからないので塩漬け（塩漬けにしたとは言っていない）。
- トラ技2019年３月号にちょうどROS使ってCartographer動かせてRPLiDARでSLAM出来るやん！という記事を見つける。飛び付いて（こいついつも飛び付いてんな）トラ技を購入、RPLiDARを使う部分から従順に1行1行手打ち（何故書籍サポートページに掲載コードを載せててもらえないのか）
- 出来ない。

- 出来ない。

-  このCartographerはまるでお前の人生だ。色んなことを始めるが、何一つ終わらせない。誰もお前を愛さない。

〜終わり〜
$\LARGE{  は？（全ギレ） }$

- これから時系列で悪戦苦闘した過程を時系列順に述べていきます。全く効果がなかったものは流石に抜いています。読者としては意味のない文脈が大半かと思うけど、自分のためなので。。。自分に何が起きていたかを整理してスキルアップ！30分でぇ5万！（目指せ高収入技術者）
- RaspPiMouseはオレが置いてきた。ハッキリ言ってこの闘いにはついていけない（これに入れるためのRaspBerryPiとUbuntu縛りだけどこの記事に関わることはありません。はやくRaspPiMouseをいじらせぇよ）
- 結論から言うと出来てます。手っ取り早く結果に繋がる過程だけを見たい方はどこ・・・ここ？（記憶喪失）

さぁ以下、早速イきますよ、こんなネタだらけで時代に取り残されてイくぅ〜！

# 主に使うもの

- RaspBerry Pi3B+、Ubuntu18.04（新しい物好き）
- RPLiDAR-A1（安いは正義） http://www.slamtec.com/en/lidar/a1
- Ubuntu Mate(本当はLubuntu使いたかった・・・でも、（18.04には）ないです。)
- ROS Melodic Morenia（当たり前だよなぁ？）
- （ホストコンピューター（Mac OSX Mojave with Real VNC））←ひとまず、VNCは使用せずにRaspberryPiをモニターに繋いで作業します。
- （x11vnc）←これがrvizをホストコンピューターから動かすのに必要な鍵だった

# ROSの下ごしらえまで
- ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xzを落として、SDカードに焼く。（RaspbianにROS入れて動かしてる人いるらしいしUbuntuじゃなくて良かった気がする・・・） https://wiki.ubuntu.com/ARM/RaspberryPi#arm64
- CLIだとrviz見れないしUbuntu Mateをインストール（分散処理とかいうMacにROSを入れてrvizだけそこで動かすってのは頭になかった。）
- RaspBerryPiにUSBメモリ32GBを付けてSwapメモリ16GB分を設定（そんなにいらないようだ。）
- SSHの設定。Avahi-daemonでIPアドレスをいちいち入れない。https://qiita.com/msrx9/items/b6ca47dd2178c3c9b536
- ROS melodic-desktop-fullをインストール（rvizが欲しいだけならdesktopだけでいいけど今後を考えると、ね？）http://wiki.ros.org/melodic/Installation/Ubuntu

$\large{ ※ひとまず、VNCは使用せずに動かします。}$
$\large{ RaspberryPiをモニターに繋いで作業します。 }$
$\large{ 問題の切り分けがしやすいように。}$
$\large{ ていうか問題多すぎやろ（語録無視）}$

#トラ技2019年3月号がないとわからない話（話の流れ的に一応必要）
トラ技2019年3月号p.102から.113までLiDARに関する記事が掲載されていた。序盤LiDARの説明でp.109からROSを使ってCartographerでRPLiDARの情報を読み込んでみますという記事（11ページに1080円支払うほどわけわからなくて苦しんでいた。でも、救いの手だった。）。SLAMはどれも理解するには難しく、なぜか種類がたくさんあるため、何を入れようか考えあぐねてた。そんなところにこんな記事があったらCartographerにする以外の選択肢はない（迫真）。
これに完全服従する気はあったのだけど、Ubuntu18.04入れちゃったし、Merodicを入れたので、RPLiDARのライブラリーはros-merodic-rplidar-rosを入れた。
そんな中、悪戦苦闘が始まる。早すぎるんだよなぁ。

- Cartographerについて、p.110、リスト3のライブラリ「protobus-compiler」が見付からない。
    - 「protobuf-compiler」ならあると判明。これを入れる。（もともと入ってたかもしれない。こ↑こ↓記憶が怪しい。）
- catkin_make_isolated --install --use-ninjaでメイク中に固まるわ固まらなくともメイク失敗して途中終了するわで何度やってもメイクが通ることがない。何度もcatkin cleanしたし、何度もmicroSDをフォーマットした。そもそもcatkin_make_isolatedってなに？日本語サイトない・・・（情弱）
    - 途中、参考になるサイトを発見する。 http://ardupilot.org/dev/docs/ros-cartographer-slam.html なんだこのサイト神か？神サイトか？・・・ってあれ？これさえあればトラ技買わなくてよかったのでは・・・？このサイトもprotobus-compilerって書いてるのだが・・・？まぁ、SLAMやる機会を得たし多少は・・・ね？ただ、launchファイルとluaファイルを手打ちした時間返して！！:sob:
- 神サイトだとcatkin buildでメイクしているのでそれを使用。なんかメイク時間とか数えてしてるので、固まりにくいっぽい？（catkin_make_isolatedしてるとそれが邪魔するのでやってて宗旨替えするにはcatkin cleanは必須。著者はmicroSDカードをフォーマットしたから必要はなかった。）
- 固まるのは変わらないが、メイク通る。（5回くらい固まっては電源入り切りしてcatkin buildしてを繰り返した。それでも問題ないようだ。ただ、メイク対象を指定して小分けにcatkin buildした方が良かった。）

## 4つのコマンドを使用し、Cartographerを起動する
$\LARGE{  残念でした！起動しませんでした }$:star:

$\LARGE{ は？（全ギレ）}$
`roslaunch cartographer_ros cartographer.launch`でエラーが出る。
>RLException: [cartographer.launch] is neither a launch file in package [cartographer_ros] nor is [cartographer_ros] a launch file name
The traceback for the exception was written to the log file

- `source devel/setup.bash`はRaspberryPiを起動したら一度して、buildしたら一度して何かと必要らしい。一旦電源入り切りしたのが悪かった。
- もちろんめんどくさいので、`sudo nano ~/.bashrc`して最終行に`source devel/setup.bash`を入れて今後入力を省略。

## 4つのコマンドを使用し、Cartographerを起動する（30分ぶり2回目）
$\LARGE{ rviz起動成功！}$:v_tone1:

$\LARGE{ 〜起動しただけでは }$
$\LARGE{ まだ終わりではない〜}$
rvizを起動してlaserを追加、topicに/scanを追加するとエラーになる。
>[laser]:Fixed Frame [laser] does not exist

- 色々なCartographerのサイトを見ていく。どうやらhttps://qiita.com/dendensho/items/959c6d510593546f4020 を見るとroslaunchがちゃんと動いていないようだ。rosrunで引数を入れてやれば動くようになるでしょってそれじゃroslunchいらないって前から言われてるから。
- そして、https://qiita.com/PINTO/items/4845c438cac05eda4d1e のサイト見てみると、なんか神サイトには書いていないライブラリーを入れている。どうやらライブラリーがないようだ。これに原因があってくれと←のサイト「GoogleCartographerの導入」のライブラリーが全部は入らないから入れられないものを省いて入るものだけを入れる（言うまでもないけど推奨しません。著者は憔悴していたので研究せずに入れた。Cartographer動作RTA勢の研究どころだと思います。）
`sudo apt install libmetis-dev libmetis5-dbg metis lua-bit32 lua-bit32-dev liblua5.3-0 liblua5.3-0-dbg liblua5.3-dev lua5.3 liburdfdom-tools ogre-1.9-tools assimp-utils python-pyassimp librviz2d`
- 入れ終わったら早速Cartographerを起動する。

$\LARGE{ 出来た！（画像なし）}$:relaxed::relaxed::relaxed:
$\LARGE{ 僕ん家の間取り映ってるぅ〜！}$

感動もそこそこに、やっぱりホストコンピューターから動かしたいのでVNCを入れる。

- VNC接続の前に、Mateを自動ログインしないと設定を入れる。https://linux.just4fun.biz/?Ubuntu/Lubuntu%E3%81%A7%E8%87%AA%E5%8B%95%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86 4.からやったしnanoで編集しました。
    - この前にMateの設定のUsersSettingsのPasswordをNot Asked on Loginにしてたけど、これをする必要があったかは不明。

## VNCでもハマる
- RealVNCはパッケージが存在しない。
- vnc4serverは真っ黒画面で右クリック利かないし動かせられない。
- tigervncとかタイガーて恥かし！（偏見）
- tightvncでようやくまともにデスクトップが見られる。
    - rvizが動かない。どうやらQtというプログラムが動かない。そもそもXserverが動いていないからQtが動かない。色々tightvncの設定いじったけどうまく動かない。
    - そういえば、DockerでKineticを入れたUbuntuをVNC接続したパッケージがあってそれにはrvizが入れてあったのを思い出した。https://hub.docker.com/r/ct2034/vnc-ros-kinetic-full/ のDockerfileを見てみると、x11vncを入れてあった。
- Xserverが動くVNCであるx11vncをインストール`sudo apt-get install x11vnc` https://qiita.com/h-sakano/items/d7b25649525dc985e908
- `sudo chmod 666 ~/nohup.out`してって書いてあるけどファイルないよ言われたから無視。

$\LARGE{ はい完全勝利}$<img width="1392" alt="Screenshot_2019-04-06 20.28.32_2NyQrt.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/393391/6ca3fa55-3b3e-2061-c508-e8e84c2ee90e.jpeg">

# 終わりに
完走した感想ですが、ここまで悩んで悩んでようやく解決したのがとりあえず動かしてみるというチュートリアルだったという事実を眼前に今はただただ震えています。

あと、
$\LARGE{ うわ・・・私の部屋の間取り歪すぎ・・・？}$