January 25, 2025
ずんだもんは友達。きょうはキャッチボールで遊ぶんだ!そう言って小学生は手にしたゴムボールを目の前のスクリーンめがけて投げてみせた───未来の子供たちの遊び相手は人間ではなくAIバーチャルキャラクターだったのだ!
そんな未来の遊びをかたちにしたBeaver’s Hiveロボット開発チームに直撃取材するシリーズ第2回。(前回からの続き)
メカ担当: それで最後にCyberGear(制御回路内蔵ブラシレスDCモーター)2つを搭載したピッチャーロボが待ち受けています。
筆者: 右端に突っ立っているやつですね。
メカ担当: はい。これがプレイヤーに向けてゴムボールを投げ返すんですけど、投げ返す時にプロジェクターとピッチャーロボとの間にあるRealSense(物体までの距離を測れる深度カメラ)でプレイヤーが構えているグローブを探してピッチャーロボがその方向にゴムボールを投げる動作を行います。
筆者: RealSenseはプレイヤーの方を向いていてコンピュータでグローブの位置を追いかけているわけですね。
メカ担当: はい。
筆者: ピッチャーロボ、2軸だけで狙った位置にボール飛ばせるんですか?投げる動作に1軸使うとして、もう1軸は何してるんですか?
メカ担当: えーと、左右の振りですね。この動画を見てもらうとわかりやすいんですが、はじめピッチャーロボは真正面を向いているんです。
筆者: 正面を向いてますね。
メカ担当: ここでグローブを探し出してプレイヤーの方を振り向きました。ピッチャーロボの土台にある1軸でグローブの方向に向きを変えて、グローブの高さに応じてもう1軸で投げ出す速さを変えることでプレイヤーのグローブに届くようにボールを投げています。
筆者: なるほど!
メカ担当: いまプレイヤーが少し右に寄りましたがピッチャーロボも右に振り向きましたよね。
筆者: 振り向いた!ということは投げ出したボールが描く放物線がグローブを通過するようにアームを振るモーターの速さを決めて、放物線が描かれる平面を土台にある垂直軸モーターでプレイヤーのいる方向に合わせているわけだ。
メカ担当: そうです。
筆者: これけっこう調整がたいへんでは?ボールが飛ぶ軌道の計算だけじゃ無理ですよね。その位置にきちんとボールが飛ぶようにするには相当な回数キャッチボールした?
メカ担当: うーん、それは経験で調整したのはありますがメカ設計しか担当していないので詳しくはなんとも言えません。CyberGearが比較的自由度の高いモーターなのでソフトウェア担当者にがんばってもらったという感じです。
筆者: そうなんだ。
メカ担当: 私が担当した箇所で言うと、あのスロープ部分はどんな角度からボールが当たってもきちんと中央にボールが落ちてくるように設計しました。
筆者: 跳ねたり転がったりして扱いにくいゴムボールだけどそこは物理の法則をうまく活かした形状を設計して解決したんだ!
メカ担当: あとバケット形状はボールを確実に受け渡せるようにしました。ボールを落とさないけど渡せるというのが難しかったところです。
筆者: バケットはビーバー君が押してる赤い部分ですね。
メカ担当: ピッチャーロボのハンド部分を開閉できるようにしたら、そんな苦労はなかったんですけど、ピッチャーロボに余計な機構をつけると投げたときに壊れて飛んでいってしまうと危ないですから。できるだけハンド部分がシンプルで軽くなるようにバケット形状を工夫しました。
筆者: メカ設計にも安全への配慮がうかがえます。あまり目立たない部分にも開発の苦労があったんですね。
ここからは、ずんだもんのCGキャラクターモーションなどスクリーン映像表示ソフトウェアを開発した担当者(以下、モーション担当)にお話を聴く。
筆者: ずんだもんがボールを投げる動きはどのようにつけたのですか?
モーション担当: それは用意されていたモーションデータ(Unityのアセット)を使いました。
筆者: そういうのを使ってるんだ。動画を見るとずんだもんの反応がすごくいいですね。ゴムボールがスクリーンに当たるとその位置からCGのボールが現れてずんだもんがキャッチしてるけどどうやってるのこれ?
モーション担当: いちおうゴムボールの衝突を(LiDARで)判定したスクリーン位置に合わせてボールが飛んでくるようなアニメーションを再生しています。
筆者: そうすると、ずんだもんがボールを投げる動きはあらかじめ用意されたモーションを再生すればいいとして、ボールをキャッチする動きはどうなっているのかな?ボールが飛んでくる位置は毎回違うでしょう。
モーション担当者: えーと、3パターン用意していて、上に飛んできたときは上でキャッチするアニメーション、真ん中に飛んできたら真ん中でキャッチするアニメーション、下に飛んできたときは下でキャッチするアニメーションがあってボールが衝突した座標に応じて切り替えて再生しています。
筆者: あぁなるほど!上の方にボールが当たったらちゃんと上の方に行ってキャッチしてるんだ。
モーション担当者: そうです。ボールが衝突した座標にずんだもんをテレポートさせる感じで移動させてからキャッチしています。
筆者: ずんだもんがジャンプするわけだ!(笑)
モーション担当者: そうですね。
筆者: すごくインタラクティブというか、本当にキャラクターがこちらの動きを見て把握しているかのような気がするけど実はそこまでのセンシングはしてない(笑)
モーション担当者: はい(笑)
筆者: あくまでゴムボールが当たった位置をみてるだけなんだ。
モーション担当者: そうです。
筆者: ということはスクリーンにゴムボールが当たったことをトリガーとして、ずんだもんがボールをキャッチするアニメーションが再生され、それに続けて、ずんだもんがボールを投げるアニメーションが自動的に再生されるのですか?
モーション担当者: 実はゴムボールがスロープを転がっていって、センサーが付いている赤いところ(中央下のバケット)に落ちたタイミングでそれをトリガーにして、ずんだもんがボールを投げるアニメーションが流れるように作ってあります。
筆者: そうか!ゴムボールが戻って来ないことにはピッチャーロボも投げられない!
モーション担当者: はい。そこでタイミングを合わせています。
筆者: それがピッチャーロボとずんだもん投球アニメーションとがぴったり合うようになっている秘密なんですね。知らない人が見たらスクリーンの中のずんだもん結構かしこいぞって思いますよ。
🦫
開発者に取材して見えてきたのは、ずんだもんキャッチボールロボはメカもソフトも意外にシンプルな作りになっていること。それもプレイする愉しさを損なわないよう考え抜いた結果だったことはここに記しておかねばなりません。
次回は、ずんだもんキャッチボールロボとともに展示されたもうひとつの「未来の遊び」、UFOキャッチャー開発秘話をお届けします!
リンク(動画)
[1] Beaver’s Hive、ずんだもんリアクションCG キャッチボールロボット、https://youtu.be/UjbJ20Kagp0
[2] Beaver’s Hive、Catch Ball ROBO with Beaver、https://youtu.be/_DhyfEr24Eg
GNG