LiDARスキャンで広域をスキャンする方法

結論から先に言うと、
**エリアをいくつかに分けてスキャンを行い、編集ソフトで合成する**
これが現状のベストプラクティスです。
LiDARスキャンで一度に広域をスキャンすると誤差が大きくなり実際の空間とのズレが発生する恐れがあります。

## 具体的なスキャンの実施方法
1. エリアを一定の範囲に区切る
2. 区画の境界の周辺にマーカーを設置する
3. 区画ごとにスキャンを実施する
4. スキャンした結果を3Dデータ（OBJなど）としてエクスポートする
5. 3DデータをCloudCompareにインポートする
6. 幾何補正を行う
7. データをトリミングする
7. データを結合する
8. エクスポートする

## エリアを一定の範囲に区切る
１区画10m x 10m以内としておくのが良さそうです（理由は後述）
今回は例として、この部屋を4分割してスキャンすることにします。
![スクリーンショット 2024-12-06 21.31.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/f42cfbaf-e8d1-56b2-34c0-a2a0143bb13e.png)
![スクリーンショット 2024-12-06 21.33.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/6582f1b4-5fa9-26c9-b9bb-c267bdb509ab.png)

## 区画の境界の周辺にマーカーを設置する
全ての区画の境界の周辺にマーカーを設置します。最低3つ置いてください。
マーカーは[モバイルスキャン学会](https://mobilescan.jp/)が提供してくださっているものを紙に印刷して使っています。
![スクリーンショット 2024-12-06 21.33.51 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/b9b1014c-da29-cc07-da93-51fc6d583d1d.png)
このマーカーは後ほど行う幾何補正に必要となりますのでとても重要です。
複数回に分けてスキャンを行うと、それぞれのスキャン結果は異なる座標系となってしまうため、位置や回転がバラバラでそのままでは一つのデータとして扱えません。そこで座標系を統一する = 幾何補正を行うのですが、その基準となるのがこのマーカーなのです。
なので、マーカー同士の位置を正確に測って設置する必要があります。
今回は緑のマーカーを原点(0,0,0)とし、その他のマーカーは0.5mずつ離して設置しました。
![スクリーンショット 2024-12-06 21.52.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/2a68d2f2-7c33-c0af-d844-43102d958e2f.png)

## 区画ごとにスキャンを実施する
LiDAR搭載のiPhone or iPadでスキャンを実施します。
※今回は[scaniverse](https://apps.apple.com/jp/app/scaniverse-3d-scanner/id1541433223)を使いました。
なお、スキャンする際は区画だけでなく境界にあるマーカーも映すようにしてください。
![スクリーンショット 2024-12-06 21.33.51 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/8a988170-749f-2f33-f3a5-1ae609edc5de.png)
例えば区画1をスキャンする際は、図の赤く塗りつぶしてある箇所をスキャンします。


## スキャンした結果を3Dデータ（OBJなど）としてエクスポートする
3DデータとしてはFBXやOBJのほうが取り扱いやすいです。
スキャンアプリは無料ではusdzしかエクスポートできないものが多いので注意です。

## 3DデータをCloudCompareにインポートする
[CloudCompare](https://www.danielgm.net/cc/)はオープンソースの点群処理ソフトウェアです。（GPLライセンス）
このソフトに先ほどエクスポートした3Dデータをインポートします。
![スクリーンショット 2024-12-06 22.13.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/644fc7eb-9670-7298-3914-85fb7b9ac12e.png)
4つのスキャン結果をそのままインポートしてみました。
部屋になっていませんね。これはそれぞれの座標系があっていないためです。
これから補正をかけていきます。

## 幾何補正を行う
![スクリーンショット 2024-12-06 22.19.49のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/9cfde8b7-07d9-7214-8fe4-c7972e434bd3.png)
補正は1つずつ行うので、先頭のデータ以外はチェックを外して非表示にしておきます。

![スクリーンショット 2024-12-06 22.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/f8af4021-e7ad-8063-4ab4-e71f4ae2b360.png)
先頭のデータを選択します（選択されたデータは黄色い枠で囲われます）
また、メニューの左下のボタンで視点を切り替えられるので、マーカーが見やすい視点に切り替えておきましょう。

![スクリーンショット 2024-12-06 22.33.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/d994e892-0ec3-ab2e-68a7-aa10b6fcd61b.png)
次に[位置合わせ]ボタンをクリックします。（何とも形容し難いアイコンで困ります）

![スクリーンショット 2024-12-06 22.38.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/091f9ee9-5e3b-bbce-3dd1-38772c91a486.png)
このような画面になります。

![スクリーンショット 2024-12-06 22.40.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/eea60d7f-d4a6-8b37-9a0f-f3c2b7cb4f8c.png)
視点を移動させ、マーカーにできるだけ近づけておきます。

![スクリーンショット 2024-12-06 22.42.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/e8a3b615-a749-3843-3020-84f458a10341.png)
原点のマーカーの中心をクリックします。
クリックした座標がA0という名前で追加されます。

![スクリーンショット 2024-12-06 22.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/385ee674-dfda-b3e4-877a-0ae4b17c7c8a.png)
鉛筆アイコン（黄色い文字の右隣）をクリックします。

![スクリーンショット 2024-12-06 22.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/f2d04ff5-accd-f437-bb3f-b9069d42fe61.png)
座標値を入力するダイアログが表示されます。
A0の位置のマーカーの座標値は(0,0,0)なので、その値をダイアログに入力して[OK]をクリックします。

![スクリーンショット 2024-12-06 22.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/541ac6c9-2489-abe4-d634-4dae3e49f121.png)
先ほどの入力内容がR0として追加されます。

![スクリーンショット 2024-12-06 22.57.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/c5ba8a73-bf6f-f8ec-7721-ba1b95558be3.png)
次のマーカーの中心をクリックします。
クリックした座標がA1という名前で追加されます。

![スクリーンショット 2024-12-06 23.01.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/378ebd10-6bce-2f9c-42c7-d7abdc3ac81e.png)
A0のときと同様に鉛筆アイコンをクリックします。

![スクリーンショット 2024-12-06 23.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/5fecfed4-384e-b465-f13f-31e0afd237b6.png)
座標値を入力し、OKをクリックします。

![スクリーンショット 2024-12-06 23.08.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/1a88f2ea-f815-481b-73dd-0bd6c5db5fed.png)
R1として追加されました。
残りのマーカーに対しても同様の操作を行います。

![スクリーンショット 2024-12-06 23.11.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/21a81b4a-2748-c30a-4b67-6770412b87ea.png)
3つのマーカーの座標値の設定が終わったら、[align]をクリックします。
alignができたら[チェックマーク]をクリックします。

![スクリーンショット 2024-12-06 23.11.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/3833a803-4f05-1965-257b-5dc733cb2676.png)
確認のダイアログが表示されるので[OK]をクリックします。

![スクリーンショット 2024-12-06 23.17.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/adec9a01-1cbc-8754-0443-9d7fddf1e073.png)
これで一つ目のデータの作業は終わりです。
残りのデータに対しても同様に作業していきます。

![スクリーンショット 2024-12-06 23.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/570be2af-3d22-e0c0-ae44-b3f8671efb37.png)
全てのデータの座標系が揃ったため、部屋の形になりました。

## データをトリミングする
それぞれのデータが重複している箇所があるため適宜削除します。
![スクリーンショット 2024-12-06 23.29.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/f1696391-418b-17dc-b781-8ea1be83b101.png)
Segmentツール（はさみのアイコン）をクリックします。

![スクリーンショット 2024-12-06 23.32.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/810468ab-6ed2-d616-05c9-a19e1d3cc874.png)
図に従って切り抜き操作を行います。

![スクリーンショット 2024-12-06 23.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/a9490602-25d9-ec15-a166-c278285afe06.png)
重複箇所を削除できました。同様の処理を他のデータにも施します。

## データを結合する
![スクリーンショット 2024-12-06 23.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/a9b71ea9-657f-9197-d090-18582273cb83.png)
データを全て選択し、[複数点群の統合]ボタンをクリックします。

![スクリーンショット 2024-12-06 23.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/f8ef6e3f-cedc-ca07-2b6d-ed280b8adb71.png)
[Merged mesh]という名称で新たなデータが生成されます。
このデータは、全てのデータが統合されています。

## エクスポートする
![スクリーンショット 2024-12-06 23.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/fe84e173-2389-1afd-8d02-cd2151145008.png)
[Merged mesh]データを選択して、[Save]ボタンをクリックします。

![スクリーンショット 2024-12-06 23.44.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779290/1d574fc0-1ef4-33ce-2dcd-164ec38c6248.png)
任意の名前で統合されたデータをファイルとして保存してください。

お疲れ様でした。

## （おまけ）LiDARスキャンの範囲について
LiDARによるスキャンの範囲について、[モバイルスキャン学会](https://mobilescan.jp/)のマニュアルによるとこのように記載があります。
>・スキャン範囲は１区画を延⻑10m×幅5m×⾼低差3m以内とする。
>・１区画範囲を超えるスキャンをする場合は、区画及びスキャンを別けて行い、点群編集ソフト上で合成を行うようにする。

また、3Dスキャン界隈では有名な[iwamaさんの記事](https://note.com/iwamah1/n/n1419056b7445)でもスキャン範囲について下記のように言及しています。

>一度にスキャンできる範囲は条件により変わりますが、10m×10m(100m2)以内を目安にするのが良いと思われます。
>なお涼しい場所でスキャンをする場合は上記より広い範囲でもスキャンすることが可能ですが20m×20m以内に納めるのが良いと思われます。

LiDARスキャンとは少し違いますが、Appleが提供しているRoomPlanについては、[WWDC22のプレゼンテーションにおいて](https://developer.apple.com/jp/videos/play/wwdc2022/10127/) **9m×9m**が物理的なスキャン領域として推奨されています。

## まとめ
この辺の話をまとめると、**10m x 10m**が一つの目安になりそうです。
本当の限界については、その現場の明るさや設置物など様々な条件次第になりますので、現地検証をしてみるしかないかと思います。