日本科学未来館「きみとロボット展」でD.E.A.D. の投票システムを作った
こんにちわ。Whatever という会社でプログラマをしてる貴田です。
日本科学未来館で開催中のきみとロボット展で D.E.A.D. の投票システムを展示しています。会期は2022年3月18日(金)〜8月31日(水)。
この記事では、おもに展示を作った時の簡単な Tips を書きます。
D.E.A.D. とは?
近年、AI・CG技術を利用して、故人に関する特徴データ(顔画像、音声、会話テキスト…など)を学習することで、擬似的に故人があたかも復活したような表現の制作を簡単に行えるようになりました。一例として、DeepFakeはともすれば肖像権を侵害するような表現も可能になり、倫理観の面から多くの議論を巻き起こしています。
Whatever社は、この状況を「D.E.A.D. (Digital Emloyee After Death = 死後デジタル労働)」と名付けました。まだ法制度・社会制度が整ってない人類初のこの状況に対し、「D.E.A.D.」を自社プロジェクトとして、
事例を集める
世論を整理する
自分の意志表明を簡単に行える場を作る
などの活動をしています。詳しくは D.E.A.D. のサイトをご覧ください。
「きみとロボット展」での D.E.A.D. 展示について
特別展「きみとロボット展」では多彩なロボットが展示されています。Zone2-3「いのちって、なんだ?」というコーナーで D.E.A.D. を展示しています。
D.E.A.D. のプロジェクト紹介のポスターを見たあとに、
という問いに YES or NO で自分の意思を投票し。
お財布に入るサイズの意思表明カードを持ち帰れる展示です。
YES or NO の投票システムについて
無人で連続投票のテストをしていた風景の動画はこちらです。
YES・NOボタンの物理ボタンが押されたら、
Unity で作ってる映像演出を流して、
什器についてる LED Ring と LED Matrix を制御して、
お客さんの視線を意思表明カードに誘導しつつ、
裏でサーバーに結果を同期する、
という展示の基礎みたいなシステム構成です。
得られたテクニカルな知見 - Findings
何においてもやってみたら、はじめて得られる知見はあるものです。
このような展示システムを作る上での Tips をつらつら書きます。
物理ボタンの市販品は最大直径 10 cm
10cm より大きい物理ボタンは今回探した範囲だと特注品になってしまう、ということがわかりました。
大きいは正義だが、プロジェクトの期間・予算によって要検討です。
今回は OBSA-100UMQ という物理ボタンを購入しました。
物理ボタンのデフォルト LED 粒の明るさに満足して頂けない
市販の物理ボタンを数種類、購入して試しました。ほとんどの物理ボタンには、LEDが1粒最初から入っていて、押したら光るようになっています。
しかし、1粒の明るさでは、光が弱く、クリエイティブ陣に満足して頂けなくて、ボタンに穴を空けて、LED Ring を追加し、光を増量することにしました。
LED Controller BC-204 が便利
TDA(Tech Director's Associtation) の Slack チャンネルで教えて頂いたのですが。BC-204 という Artnet-SPI の LED Controller (680粒 x 4ch) が NeoPixel のような LED 粒を複数制御するのに便利でした。
注:
25fps まで
制御可能な LED IC は指定がある
Unity のタイムライン機能が便利
はじめていじりました。タイムラインに同期して、映像内に登場する GameObject のアニメーションの発火タイミングを現場でポチポチ調整できるので便利でした。今後も使っていきたい。
Whateverに所属されてるmurasaqiくんが developer 会で話してるのを聞いて興味を持ちました
アルファ付き乗算 Shader
ググったけど、出てこなくて、いじってたら、できました。
地味だけど、みんなどうしてるの?ってなりました。
UnlitAlphaMultiplyTextuer.shader
Slack Reporter 便利
展示系 Unity 案件でいつも使ってる Utility スクリプトが幾つかあって、SlackReporter が特に便利なのでご紹介させてください。BestHTTPていう有料アセットに依存してしまってますが、展示で毎回使ってます。
SlackReporter.cs
平時は未来館での投稿数が毎晩集計されて送られてきます。
プログラムでエラーが起こったときは、エラー文言が送られてきます。今回の展示では何も起こってないので今の所、ホッとしてます。
展示のテストスクリプトってどうするべき?
今回は Unity が Keyboard イベントを受け取ったら、以下のような挙動をするように設定しておき。
「y」「n」キーで、YES・NOを投稿できる
「esc」キーでアプリ終了
pythonで Keyboard をエミュレートして、YES・NO連続投稿やアプリ起動・終了を何度も繰り返すスクリプトを書きました。
import os
import time
from tkinter import Y
from pyautogui import keyDown, keyUp
count = 0
while True:
os.system("..\\Bat\\01-start.bat")
if count % 2 == 0:
keyDown('y')
time.sleep(1)
keyUp('y')
time.sleep(15)
keyDown('n')
time.sleep(1)
keyUp('n')
time.sleep(15)
else:
keyDown('n')
time.sleep(1)
keyUp('n')
time.sleep(15)
keyDown('y')
time.sleep(1)
keyUp('y')
time.sleep(15)
os.system("..\\Bat\\02-end.bat")
time.sleep(15)
count += 1
いつも展示系のシステムは数日経って、使い込んでたら思わぬレアトラブルが起きたりするので、そういうのを事前になるべく耐久テストできるようにしたいものです。
Arduino の展示パッケージングの正解とは?
Arduino を展示用にパッケージングするノウハウ、ググったけど出てこず。さすがにむき出しはいかん、と思い。
端子台 - 導線の長さが揃っておらず、コレジャナイ感が出ました。
会社の developer 会で、「みんなどうしてるんですか?」と相談して、いっぱいアドバイスを頂きまして。
ツッコミ・感想も頂きまして。
とりあえず自分としては、「ターミナルブロック 」+「プラケースに穴開ける」てやり方が、素早く固定できそうだったので、これで挑みました。
これがArduinoパッケージングの完全正解とは言えないと思いますが。動作してるので、一つの解ではありそうです。
以上、展示ノウハウ紹介の記事でした。
追記メモ:
この記事を公開したあとに、キヨくんから 「ルートアール 多機能 自作入力装置用USBスイッチケーブル 3スイッチ用 RI-SWCB3」ていうのを以下のコメント付きで教えて頂いた。
これが正解だったかもしれない。いつか機会があれば試したい。
この記事が気に入ったらサポートをしてみませんか?