RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい_015日目_SLAM_自律走行の前準備_CartoGrapherによる自宅の地図作成 【成功！！】

**zumo32u4**　[![GitHub stars](https://img.shields.io/github/stars/PINTO0309/zumo32u4.svg?style=social&label=Stars)](https://github.com/PINTO0309/zumo32u4)
#<font color="#08088A">◆ 前回記事</font>
[RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい\_014日目\_SLAM_自律走行の前準備_ロボット再構成と自宅の地図作成 【"沼" 突入中】](https://qiita.com/PINTO/items/fb0d44b2bb9455800667)　の続き

#<font color="#08088A">◆ はじめに</font>
１週間に渡り Google CartoGrapher のパラメータ調整地獄の闇に触れ続け、ついぞ **`オドメトリ、つかわなくてもいいよ♪`** という謎の天啓が舞い降りる。
ロボット Zumo32u4 が発行するオドメトリ？ 何ソレ？

早速、 **`backpack_2d.lua`** の **`use_odometry`** パラメータを無効 「false」 にする、という暴挙に出る。

恒例どおり、先に結果のGIF画像から公開。（３倍速再生）
<font color="red">**まさかのまさか、、、上手くいってしまいました！！**</font>
RaspberryPi で Google CartoGrapher による地図作成、できたぁ〜　ヽ(*ﾟ∀ﾟ)ﾉ ﾔﾀｰ
めちゃくちゃうれしい。 泣きそう。
![ezgif.com-optimize (14).gif](https://qiita-image-store.s3.amazonaws.com/0/194769/ae5c2e67-94d3-458e-269f-d07ad6683cd4.gif)

##<font color="#0B3B39">● 地図生成環境の概要図</font>
　![0023_SWスタック図_RaspberryPi (7).png](https://qiita-image-store.s3.amazonaws.com/0/194769/24fc0920-f561-f7b2-c5be-d8ac7d5b58e2.png)

##<font color="#0B3B39">● 環境</font>
1. Ubuntu 16.04 (rvizによる地図可視化用PC)
2. Windows10 + TeraTerm (ロボット操作用PC)
3. **[Zumo32u4](https://www.robotshop.com/jp/ja/zumo-32u4-robot-kit-assembled-with-1001-hp-motors.html)** (ロボット本体)
4. RaspberryPi3 + Raspbian Stretch (ロボット本体、CartoGrapher)
5. **[RPLidar A1M8](https://www.robotshop.com/jp/ja/rplidar-a1m8-360-degree-laser-scanner-development-kit.html)** (ロボット本体、測域)
6. **[ELP-USB8MP02G-L75](https://www.amazon.co.jp/ELP-Web%E3%82%AB%E3%83%A1%E3%83%A9Linux-Windows-800%E4%B8%87%E7%94%BB%E7%B4%A0-IMX179/dp/B01M23NIED)** (USBカメラ、動画撮影用)

#<font color="#08088A">◆ 参考にさせていただいた資料、謝辞</font>

実は、天啓の正体は下記に公開いただいている情報でした。
とても分り易く、目からうろこです。
おそらくこの情報がなければ、CartoGrapherは諦めていました。
かなり追い詰められていましたが、ここに来て徹夜祭りから開放されました。
最近、Qiitaを始めてからリスペクトすることがやたら多くなってきたなぁ。

**【nnn112358さん】
[「cartographer_ros ガイド」](https://t.co/CH0P6dtSfz)**

#<font color="#08088A">◆ 作業に掛かる前の前提条件</font>
**[Raspbian Stretch+NCS(Neural Compute Stick)+YoloV2+Webカメラ＋ROSによるリアルタイム複数動体検知環境の構築](https://qiita.com/PINTO/items/b084fe3dc716c42e2867)** と **[００２日目](https://qiita.com/PINTO/items/f6162219d2f17e2f1714) [００３日目](https://qiita.com/PINTO/items/fb18a79958cdc4f40fa9) [００４日目](https://qiita.com/PINTO/items/12a7f86a7f8861a2ff83) [００５日目](https://qiita.com/PINTO/items/1786670cdcc2de60117c) [００６日目](https://qiita.com/PINTO/items/ec0c6f891f28ec856cbe) [００８日目](https://qiita.com/PINTO/items/9aa737c284dc4e8212f1) [００９日目](https://qiita.com/PINTO/items/4845c438cac05eda4d1e) [０１４日目](https://qiita.com/PINTO/items/fb0d44b2bb9455800667)** の記事を参考に、全ての作業を実施済みであり、導入済みパッケージの種類と数の同期がとれていることを前提とする。

#<font color="#08088A">◆ backpack_2d.luaの修正</font>
天啓に従い、オドメトリの使用を無効化する。
前回記事投稿時から CartoGrapherのパラメータ調整をアレコレ試し続けた結果、下記のように大きく記載内容を変更している。

```backpack_2d.lua
include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  map_frame = "map",
  tracking_frame = "base_link",
  published_frame = "odom",
  odom_frame = "odom",
  provide_odom_frame = false,
  publish_frame_projected_to_2d = false,
  use_odometry = false,
  use_nav_sat = false,
  use_landmarks = false,
  num_laser_scans = 1,
  num_multi_echo_laser_scans = 0,
  num_subdivisions_per_laser_scan = 1,
  num_point_clouds = 0,
  lookup_transform_timeout_sec = 0.2,
  submap_publish_period_sec = 0.3,
  pose_publish_period_sec = 5e-3,
  trajectory_publish_period_sec = 30e-3,
  rangefinder_sampling_ratio = 1.,
  odometry_sampling_ratio = 1.,
  fixed_frame_pose_sampling_ratio = 1.,
  imu_sampling_ratio = 1.,
  landmarks_sampling_ratio = 1.,
}

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.min_range = 0.
TRAJECTORY_BUILDER_2D.max_range = 20.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 5.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true

POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7

POSE_GRAPH.optimization_problem.local_slam_pose_translation_weight = 1e5
POSE_GRAPH.optimization_problem.local_slam_pose_rotation_weight = 1e5
POSE_GRAPH.optimization_problem.odometry_translation_weight = 1e5
POSE_GRAPH.optimization_problem.odometry_rotation_weight = 1e5
POSE_GRAPH.optimization_problem.huber_scale = 1e3

TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 10
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 40

TRAJECTORY_BUILDER_2D.submaps.num_range_data = 120
TRAJECTORY_BUILDER_2D.motion_filter.max_distance_meters = 0.1
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.2)

return options
```

#<font color="#08088A">◆ オドメトリをオミットした結果</font>
マ。。。マジかよ。。。 今までの全検証の中で一番まともな位置推定ができている。。。
かなりピクピクと忙しく動くが、動作を停止したタイミングの静止位置の検出精度はかなり高い。
ここまでの１週間の作業って、いったい。。。
**[◆ はじめに](#-はじめに)** へ掲載のGIF画像のとおりの動きとなる。

アホな対応をしていることは理解している。
**[前回](https://qiita.com/PINTO/items/fb0d44b2bb9455800667)** 動きがおかしかったのは、ロボット本体から発行しているオドメトリが原因だったのは明白だ。
ただ、１週間以上結果が出ないとモチベーションを維持するのが辛くなってくる。
問題点を細かく分解して短い期間で小さく結果を出し、本当にクリティカルではない問題は後で解決していく。

GIFは廊下に続くドアを閉め忘れたまま動画撮影してしまったため、改めてドアを閉めた状態で作成し直したリビングダイニングキッチンの全体地図が下図。
![157.png](https://qiita-image-store.s3.amazonaws.com/0/194769/a6e8d1e5-e325-0c1f-58b6-1c3872282a6a.png)
隅々まで移動していないので多少の粗さは残るが、上出来な気がする。
ガラスの部分からはレーザーが透過してしまっており、カーテンなどの布地の部分は波打っている。
冷蔵庫などのレーザーが真っすぐ反射しにくい家具部分はボンヤリとしている。
壁の部分はしっかりと直線で描画されているので十分な仕上がりな気がする。
部屋のあちこちに見える黒い物体は、ガキンチョが撒き散らしたまま片付けなかったオモチャたちの影とダイニングテーブルの足の部分。
一番上の壁が左下に向かってズレているように見えるのは三枚引き戸の部分で、引き戸１枚あたり 5cm ほどの段差が驚くほど正確に再現されている。

#<font color="#08088A">◆ 本日のまとめ</font>

- Google CartoGrapher によって、だいぶまともな地図が生成できた
- 機体の動きがピクピクとせわしなく動くため、パラメータのチューニングを実施しなければ可視化時には格好が悪い
- ナビゲーションの実施時にはオドメトリを真面目に取得する必要がありそうだ
- LiDARの点群だけで地図生成できてしまうとは。。。 Google CartoGrapher の性能、恐るべし。
- **助けを求めておきながら、自己解決してしまいました。すみません。。。**
- ネタがニッチすぎて地味ね

#<font color="#08088A">◆ 次回予告</font>
ついに、ナビゲーションにトライするか、オドメトリの調整にトライしようと思う。
自動航行できるといいなぁ。

#<font color="#08088A">◆ 次回記事</font>
[RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい\_016日目\_SLAM_Google CartoGrapher_オドメトリの調整と地図生成と位置推定](https://qiita.com/PINTO/items/f8fa5d6ce55317ea590b)　へ続く