
概要 📖 – センサー値を画像化
SICK TOPは、SICK社製の産業用センサーと通信し、取得したスキャンデータの各データ項目をRGBA成分へマッピングしてテクスチャ出力するTOPです。Launch File に記述したセンサー構成を読み込んでネットワーク接続を確立し、X / Y / Z などのデータフィールドを画像の R / G / B / A チャンネルに割り当てることで、その後のTOPフロー上で点群やスキャン結果をGPU処理できるようにします。
主な用途 🎯
- SICK社製LiDARから取得した距離データのテクスチャ化
- 3D点群スキャンデータの可視化 (X / Y / Z 各成分を色チャンネルへ割当)
- 産業用センサーを使ったインタラクティブ展示の入力ソース
- GLSL TOP / Render TOP と組合せた実空間スキャンの即時レンダリング
- Analyze TOP / Crop TOP と組合せた特定エリアのトリガー検出
データフロー 🔄
入力: ネットワーク経由でSICKセンサーから受信したスキャンデータ
↓
データ項目のRGBA成分へのマッピング
↓
出力: 各画素がセンサー値1点を保持するテクスチャ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Connection 📋
接続切替 .active 🔌
Active .active ✅Active (有効化) — センサーとの通信を開始するトグル。プロジェクト内で同時に有効化できる SICK TOP は 1 個のみ。2 個目を有効にすると衝突エラーが出る
Reinitialize .reinitialize 🔁Reinitialize (再初期化) — ボタンクリックで現在のパラメータ設定を使って接続を一度切断し再確立する。Active をオフ→オンしても同じ動作になる
起動ファイル .launchfile 📂
センサー構成を記述した起動ファイルの指定 (接続に必須):
- Launch File:
Launch File(起動ファイル) — センサーを構成するための設定ファイルのパス。接続には有効な起動ファイルが必須。各センサー用のサンプル起動ファイルは SICK 社の公式サイトからダウンロード可能
アドレス指定 .deviceaddress 🌐
センサーへのネットワーク接続先 (起動ファイルの値を上書き可能):
- Device Address:
Device Address(デバイスIPアドレス) — センサーの IP アドレス。空欄の場合は起動ファイル内のデフォルトアドレスが使われる - Port:
Port(ポート番号) — センサーのポート番号。空欄の場合は起動ファイル内のデフォルトポートが使われる
追加引数 .customargs 🔧
起動ファイルを共用しつつセンサー固有のパラメータを差し込む追加引数:
- Custom Arguments:
Custom Arguments(カスタム引数) — センサー初期化時に追加する引数。同じ起動ファイルを使いつつ個別センサーごとにパラメータを変えたいときに使用。形式は"name1:=value1 name2:=value2"
RGBA出力割当 .red 🎨
センサーのデータ項目を出力テクスチャの RGBA 各成分に割り当てる設定:
- Red:
Red(R 成分割当) — 出力テクスチャの赤チャンネルに割り当てるデータフィールド名 (例:x)。利用可能なフィールドはセンサーに依存し、右側のフライアウトメニューから選択可能 - Green:
Green(G 成分割当) — 緑チャンネルに割り当てるデータフィールド名 (例:g)。oneまたはzeroで定数を割り当てることも可能 - Blue:
Blue(B 成分割当) — 青チャンネルに割り当てるデータフィールド名 (例:z)。oneまたはzeroで定数指定も可能 - Alpha:
Alpha(A 成分割当) — アルファチャンネルに割り当てるデータフィールド名 (例:one)。oneまたはzeroで定数指定も可能
Common Page 🔧
Common (placeholder) .common_placeholder ⚙️
TOP family 共通設定 (canonical sync で展開):
- Common Page: TOP family 共通のページ設定 (Output Resolution / Pixel Format / Channel Mask 等)。詳細は canonical sync で反映
実践アイデア 💡
Example 1: LiDAR点群の即時可視化 🛰️
SICK TOP (R=x, G=y, B=z) → Level TOP → Composite TOP → Render TOP の背景
SICK製LiDARの XYZ 座標を SICK TOP の R / G / B チャンネルに割り当て、Level TOP で値域を 0-1 に正規化したうえで Render TOP の背景レイヤーへ合成し、3D 空間スキャンを即時にビジュアライズする最小構成。
- SICK 公式サイトから対象センサー用の Launch File をダウンロードして PC 上に配置
- SICK TOP の Launch File パラメータにそのファイルパスを設定し、Device Address にセンサーの IP を入力
- Red / Green / Blue にそれぞれ
x/y/zを割り当て、Active をオンにして接続を確立 - Level TOP を後段に追加し Brightness / Black Level / White Level で値域を 0-1 に正規化
- Composite TOP で他のレイヤーと合成し、Render TOP の背景テクスチャとして表示
Example 2: 特定エリア侵入の検出トリガー 🚨
SICK TOP (Z=distance) → Crop TOP → Analyze TOP (Maximum) → TOP to CHOP → Logic CHOP
SICK TOP の Blue チャンネルに距離値を割り当てたうえで Crop TOP で監視したい矩形領域だけを切り出し、Analyze TOP の Maximum で最も近い距離を 1 サンプルに集約してインタラクティブな侵入検出やインスタレーションのトリガー生成に使う応用例。
- SICK TOP の Blue チャンネルに距離フィールド (例
distanceやz) を割り当てる - Crop TOP で監視したいスキャン範囲だけをトリミングして処理対象を限定
- Analyze TOP を Maximum (または Minimum) モードで通し、最も近い距離値を 1 ピクセルに集約
- TOP to CHOP + Logic CHOP と組み合わせて閾値判定し、イベントトリガーへ接続
- Reinitialize ボタンを GUI に出してセンサー再接続を必要時に手動実行できるようにする
関連オペレータ 🔗
類似機能OP 🔍
- Ouster TOP — Ouster社製 LiDAR を取り込む同種の TOP
- Kinect TOP — Kinect の深度・カラーをテクスチャ化する入力 TOP
- RealSense TOP — Intel RealSense の深度・カラーを TOP として取得
組み合わせ推奨OP 🔄
- Point File In TOP — 保存済みの点群ファイルを読み込み SICK のリアルタイム入力と切替可能にする
- Point Transform TOP — 取得した点群テクスチャに座標変換 (回転・スケール・平行移動) を適用
- Crop TOP — スキャン範囲のうち注目領域だけを切り出して後段処理の負荷を削減
- Level TOP — 距離値・座標値を 0-1 に正規化して以降のシェーダ計算で扱いやすくする
- Analyze TOP — テクスチャ全体の最大値・平均値などを集約しトリガー判定に使用
前処理・後処理TOP 🎯
Info情報 📊
SICK TOP は Info CHOP / Info DAT に接続することで出力テクスチャの解像度・ピクセルフォーマット・クック情報を取得できます。センサー接続が正しく確立できているか、データが流れているかを total_cooks や cook_time の値で確認すると診断に役立ちます。
TOP固有情報 🖼️
resx: TOP の出力解像度 X (ピクセル単位)resy: TOP の出力解像度 Y (ピクセル単位)aspectx: アスペクト比 Xaspecty: アスペクト比 Ydepth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
TOP共通情報 🖼️
resx: 出力テクスチャの横幅 (ピクセル単位)resy: 出力テクスチャの縦幅 (ピクセル単位)aspectx: アスペクト比の横成分aspecty: アスペクト比の縦成分depth: ピクセルフォーマットのビット深度gpu_memory_used: このテクスチャが消費している GPU メモリ量 (バイト)
OP共通情報 📡
total_cooks: ノードがクックされた累積回数 (センサーデータの更新タイミングの指標)cook_time: 直近フレームのクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号last_cook_start_time: 最後のクック開始時刻
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: センサーに接続できない / エラーが出る
✅ Solution:
Launch Fileのパスが正しく、ファイルが存在することを確認Device Addressのセンサー IP に PC からネットワーク到達できるかpingで確認- プロジェクト内で同時に
Activeをオンにしている SICK TOP が他にないか確認 (同時有効化は 1 個まで) Reinitializeボタンで接続を一度切断して再確立を試す
❌ Problem: 出力テクスチャが全て黒 / 全て白になる
✅ Solution:
Red/Green/Blue/Alphaに割り当てたフィールド名がセンサーの実データに存在するかを確認 (フライアウトメニューから候補を選択)- 距離値・座標値は 0-1 の範囲外になりがちなので、Level TOP で値域を正規化してから可視化
- Pixel Format を
32-bit float (RGBA)に上げて値が頭打ちにならないようにする
❌ Problem: データが更新されない / フリーズしているように見える
✅ Solution:
- Info CHOP の
total_cooksがフレームごとに増えているかを確認 Custom Argumentsの指定ミスでセンサー側がデータ送信を停止していないか起動ファイル + 引数を見直す- ネットワーク帯域不足が疑われる場合は同一サブネット上で他の高負荷通信を停止して再現するか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

