TouchDesigner で Ouster の Lidar を使う: Ouster TOP

こんにちは！こちらは TouchDesigner Advent Calendar 2024 9日目の記事になります。よろしくお願いします。

## はじめに
とあるプロジェクトで 3D デジタル Lidar センサー Ouster OS1 を使用した、人の立ち位置のトラッキングを行いました。

![OS1-thumbnail4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58558/86ad0f9e-56e7-1a9b-8376-78fb2f462082.png)

[OS1: High-Res Mid-Range Lidar Sensor for Automation & Security | Ouster](https://ouster.com/products/hardware/os1-lidar-sensor)

プロジェクトの詳細は書けないのですが TouchDesigner で動かすまでをまとめました。似た用途で導入を検討している方がもしおられたら参考になれば幸いです（今機器が手元に無い中これを書いているので後ほど少し更新するかもしれません）。

## Ouster OS シリーズについて
Ouster 社が提供する 3D Lidar センサーのシリーズです。ウェブサイトを見ると自動運転や人が入りにくい場所の探査、人流の観測などに使用されているようです。2024年12月現在、用途や観測距離に応じて4種類の Lidar が用意されています。リアルタイムでセンサーからカラー情報なしの点群データを取得できます。

## Ouster OS1 を採用した理由
該当プロジェクトではセンサーの設置場所に制約がありました。足元に置けるのであれば例えば HOKUYO の UST-10LX などの測域センサーも使えそうだったのですが、センサーを地面に置くことはできず設置個所もトラッキング対象から 50m以上離れたところになる想定でした。Ouster 製品と似た製品として Velodyne の 3D Lidar も試す機会がありましたが、会社的には Ouster と合併（Ouster の名前が残った）して製品も生産中止予定ということで使うなら Ouster のものかなと。

評価機としてお借りした同シリーズの OS0 で TouchDesigner の `Ouster TOP` や後述する特殊な build 含め基本的な挙動を試した後、レンジが少し足りなそうだったのでより長いレンジをカバーする OS1 を使用することにしました。OS1 のデモ機がなく導入前に試すことはできなかったのですが、目的に沿った形で問題なく使えています。

また、今記事にしている `Ouster TOP` があるからという理由も大きいです。慣れ親しんだ TouchDesinger 内で完結できるとその分アプリケーションに集中できますし、他のツールとの連携もしやすいです。テストした限り挙動に問題はなさそうだったので、機器のお値段はそれなりにしてしまいますが他の機器をいくつか試して TouchDesigner で動かせるように実装して、というのを繰り返すよりは工数が大幅に減らせて総合的にはお得ではないかと判断しました（もちろん代替案があれば試してみたいとは思っています）。

## Ouster Studio
Ouster が提供しているツールです。Windows/Linux/Mac 版があります。TouchDesinger で使用する前にまずこれで疎通及び点群データが取得できているかを確認するといいと思います。

### 設定
![2024-12-09_00h47_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58558/11fc7694-6412-de8d-6f3e-7f86bbfe6b1d.png)

とりあえずアプリを開くとこんな感じ。PC と同一ネットワークにセンサーがあると接続候補として出てきます。IP はデフォルトだと `169.254.xx.xxx` という設定になっていました。Lidar の IP を変えると通信できなくなってしまうことがあるので、ネットワーク設定に自信がある人以外は接続する PC 側の IP を Lidar と同一ネットワーク内とした方が無難と思います。ぼくは一度やらかしました。

### データの取得
![2024-12-09_00h51_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58558/da910c92-5074-5e7d-1e57-2e3c5e73b53d.png)
このような形で取得できます。これはとあるバルコニーから下を見た様子ですが、矢印のある所にいるのが人です。3D ビュー内にリアルタイムで点群データが表示されるので、ぐりぐり動かしたり回転させたりしながらデータを見ることができます。

### クラウドにあるデータの再生
![2024-12-09_00h47_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58558/0384148c-0beb-e5d2-2bab-6d0d44952826.png)

上部の雲のアイコンがあるタブにいくと、車の上に乗せて走行したデータなどをみることができます。どんなデータが取れるのか分かるので、導入前の参考にもなると思います。

### データの保存と再生
Ouster Studio で取得したデータの保存、及びそのデータの再生ができます。Recorded data が `pcap`、meta data が `json` 形式で書き出せるので、それらを Ouster Studio に読み込むと再生ができます。

保存したデータの TouchDesigner への持っていき方なのですが、Ouster Studio で単独のフレームを指定して csv に書き出すことができるので、`Point File in TOP` で読み込むことができます。

## TouchDesigner で使う
TouchDesigner で使う際には Ouster の Lidar の Firmware のバージョンに注意が必要です。
[Ouster TOP | Derivative](https://derivative.ca/UserGuide/Ouster_TOP) に記載があるように、現在 Official Build で実装されている `Ouster TOP` は 2.x 系の Firmware であれば使用することができますが、3.x 系の Firmware が使用されている機器では使用することができません。そして現行で Ouster が販売している機体は全て 3.x 系なのでこれはピンチ、と思いましたが Forum で相談すると Derivative の robmc さんが特別な build を用意してくださっていました。

[Can't configure Ouster OS0-128 - Hardware - TouchDesigner forum](https://forum.derivative.ca/t/cant-configure-ouster-os0-128/482945/6?u=chimanaco) にある、 `2023.11624.420` という Unofficial な Windows build を使うと 3.x 系の OS0、OS1 を動かすことができました。他のデバイスの挙動に影響があるから Official build には追加されていないとのことなので、2024年12月時点で 3.x 系を使いたい人はこちらで。いつか状況が変われば Official build に組み込まれることもあるかもしれません。

以下に書くような用途では問題なかったのですが、場合によっては何か問題があるかもしれないのでこちらの build を使うのは注意が必要かもしれません。ぼくの場合は `Palette < UI < Basic Widgets < label` を引っ張ってきたらエラーが出ていたくらいで特に影響はありませんでした。

## あとは用途に応じて
該当プロジェクトではネットワークは以下のような流れになっています。

- `Point Transfom TOP` で点群の位置と回転を調整
- `Math TOP` で調整範囲を 0-1に。次の工程をやりやすくします。
- `RGB Key TOP` で不必要な範囲を削除
- 得られたポイントをレンダリング

使用環境ではノイズも乗っていたのでフィルターなども作って追加していたりします！

## おわりに
* おすすめの 3D Lidar とかあったら教えてほしいです。
* あと Ouster Studio で保存したデータを TouchDesigner でストリームとして再生するやり方などご存じの方おられたらお聞きしたいです。csv を全フレーム分保存すればどうにかいけるかもと思いましたが辛すぎるのでやりませんでした…。

それではみなさま、Happy Holidays!!