見出し画像

The Naya を支えない照明技術

The NAYA Vol.1 の開催からしばらく経ちました。

これまでの関連した blog においては、当日に使われた LED 点灯の仕組みや、当日利用したカメラやその接続について記載していました。
しかし、当日使われた技術以外にも、将来出来うることを明らかにするための技術検証のために行ったことがいくつかあります。今回はそのうち私が行った、ArtNet を安価に無線なマイコンに送って ledtape を光らせるための技術検証について簡単に説明します。
なお、本検証の中には、検証の過程において、既存の技術で解決されていることに気づいた内容も含まれます。マサカリ等は甘んじて受け入れます。

LED 等の灯体の設置にあたっての課題

The NAYA Vol.1 の照明システムは安定して稼働するものでしたが、専用の機器を多数利用しているため、同様の照明システムを用意に組むことは困難であるという課題があります。

The NAYA Vol.1 における LED 等の灯体の接続方法についての詳細は、ひなひなさんの記事に詳細に記載されています。The NAYA Vol.1 においては、ArtNet->DMX ノードと呼ばれる専用の装置を用い、ArtNet から DMX への変換を行い、SPI デコーダと呼ばれる専用の装置を用いて、 DMX から LED テープが解釈可能な SPI の出力を行っていました。

このシステムは、ArtNet->DMX ノードと呼ばれる専用の装置を用いているため、誰でも容易に同様のシステムを構築することはできません。また、LED 等の灯体ごとに、SPI デコーダと呼ばれる専用の装置を用意し、これに対して電源と、ArtNet->DMX ノードへの専用のDMXケーブルの接続が必要となります。このため、The NAYA Vol.1 ようにの灯体数が多い場合は、多くの配線が必要となり、誰でも容易に同様のシステムを構築することはできません。また、専用のDMXケーブルは、 ArtNet->DMX ノードから SPI デコーダへ直接接続する必要があるため、DMXケーブルの延べ長さが大きくなり、コスト面も問題が大きくなってきます。
そこで、このシステムで問題となっている、ArtNet->DMX ノード、SPI デコーダ、DMXケーブル を排し、汎用のもので安価に同様の照明システムを可能とする方法について検討しました。

独自照明システムスタック artnet-udpled と udpled の試作

課題を解決するため、下記の構成要素による独自照明システムスタックの試作を行いました。

  • 汎用のコンピュータ上で稼働可能な artnet-udpled と呼ぶプログラム

  • 安価に利用可能なマイコン ESP32 とこれの上で稼働する udpled と呼ぶプログラム

  • 汎用のEthernetネットワーク及び無線 LAN

artnet-udpled

artnet-udpled は、artnet を受け取り、独自の udpled プロトコルに変換し送信するプログラムです。独自の udpled プロトコルは、実際には、後述する udpled が、ledtape へ出力する SPI へ出力するデータそのものです。udpled プロトコルは、トランスポート層に udp を用います。本システムにおいては、すべてのプロトコルの変換は artnet-udpled により行われています。

udpled

udpled は、 ESP32 上で動く arduino スケッチです。artnet-udpled が出力した udpled プロトコルを受け取り、それをそのまま SPI に乗せるデータとして、ledtape に向けて出力します。
ESP32 は、2.4GHz の無線LANによる通信が可能です。artnet-udpled が動くコンピュータのネットワーク上に無線 LAN のアクセスポイントを用意し、この無線 LAN アクセスポイントに udpled が動く ESP32 を接続することを想定しています。


設計上の工夫

- udpled プロトコルのトランスポート層に udp を使った

もともとは、ESP32 上に http サーバを立て、パソコンで動く artnet-udpled 相当のプログラムから http の post により、 SPI へ出力するデータを送る設計としていました。しかし、無線 LAN を用いていることからパケットロスやジッタなどのネットワークの品質があるうえ、 tcp による再送制御が働く影響で、映像のフレームレートが全く安定せず、目で見てわかる程度には映像がガクガクするという問題がありました。
十分なバッファを取ることができない、リアルタイム性の高い映像は tcp ではなく udp で流すべきであるということを身を持って感じました。
artnet においてもトランスポート層には udp が用いられています。これは、上記と同様の理由であるものと考えています。広く使われているプロトコルは、やはりちゃんと考えられて設計されているのだな、と思いました。

- artnet-udpled を rust で書いた

artnet-udpled は、rust 言語により書かれています。これは、最近流行りの他の言語にはガベージコレクションがあり、高フレームレートの出力を保証することが難しくなるためです。あと、単に rust のプログラムを書いてみたかったからです。

- そもそも ArtNet->DMX ノードの機能を汎用コンピュータで動くartnet-udpled で肩代わりするという判断をした

どうせ ArtNet を出力するための MADRIX を動かすためのパソコンは絶対に環境内に用意されるので、もうそのパソコンでartnet-udpledを一緒に動かせば、ものを増やす必要もなくて便利でした。

使ってみた

16x16 の LED マトリクスを無線 LAN 経由で、およそ 60Hz でキレイに表示することができました。やったね。

あと、クリスマスツリーも光らせてみました。ESP32も ledtape も USB のモバイルバッテリーで動いています。電源すら配線する必要がなくて、どこにでも置けて、どこでも光らせられて便利!無線 LAN 最高!

今後の予定

多数の出力を行う場合のネットワークの性能

検証今回、16x16 の LED マトリクスを思ったように光らせることができましたが、The NAYA Vol.1 のように大規模な照明を光らせることについては検証ができていません。udpled のパケットが大量に無線 LAN に流れたときに、必要なフレームレートを安定的して出せるかを確認する必要があります。

1つの ESP32 からの複数 ledtape の点灯制御

ESP32 は複数の PIN に対して SPI を出力可能です。このため、1つの灯体に対して 1 つの ESP32 を用意する必要はなく、1 つの ESP32 から複数の灯体に対して SPI を出力し点灯を制御することが可能です。これにより、ESP32の台数を減らすことが可能です。しかしながら、ESP32 の性能上、どの程度の灯体の制御を行うことが可能であるかの確認を行う必要があります。

そもそも ESP32 が ArtNet を直接受けても良いのでその検証

ESP32 で直接 ArtNet を受けるようにすると、 artnet-udpled を動かす必要がなくなり更にシンプルになるので、これについても検証してみようと思います。

謝辞

本記事に記載した独自照明システムスタックを作る際に利用した各種機材を提供をいただきましたダイヤモンドサービス様に御礼申し上げます。
また、The Naya をともに作り上げた仲間たちにも感謝を。

この記事が気に入ったらサポートをしてみませんか?