梶研 [Unity で複数人の動作を可視化]
2024年01月09日
Unity で複数人の動作を可視化
出席率
- 3年セミナー:??%
スケジュール
短期的な予定
- [ ] mocopi でセンシング(~12月)
- [x] mocopi x Unity
- [x] 色んな動作をとる
- [x] 誤差を計測(簡易)
- [x] 動作をグラフ化
- [x] bvhをパースするパッケージを作る
- [x] csv に書き出せるアプリを作る
- [x] 複数人の絡みを取ってみる
- [x] ブラウザで動作を確認できるようにする(gLTF形式の理解)
- [x] Unity で複数人の動作を可視化する
- [ ] 一連のやり方を esa にまとめる
- [ ] mocopi と action slam2
- ?
長期的な予定
- 1月 研究の方針を決める & 進め方を決める
進捗報告
Unity で複数人の動作を可視化する
前回: Unityちゃんでやってみたら、ピンク(テクスチャが無し)になってしまった
対応: トゥーンシェーダーデータをインストールする 参考
懸念点
再生した時、Unity上の世界座標が原点なのか、モデルの初期位置が原点なのか
(0, 0) スタート
<iframe width="1180" height="664" src="https://www.youtube.com/embed/zJX6qpJWQu8" title="Unity x bvh 原点開始" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
(-4, -4) スタート
<iframe width="1180" height="664" src="https://www.youtube.com/embed/ChjkRD_apwE" title="Unity x bvh (-4, -4)開始" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
モデルの初期位置が原点となることがわかった
→ モデルの位置を調整することで位置関係を再現できる
問題点
bvhの最初のデータが (0, 腰の位置, 0)、
数フレーム後から正しい位置になっている
→ モデルの初期位置 と データの正しい位置は異なり、テレポートするため調整が面倒
<iframe width="1180" height="664" src="https://www.youtube.com/embed/jx6Gnu7kg0c" title="Unity ツイスターゲーム第1回戦(位置関係微妙)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
最初の一瞬で近づいている
このテレポートを考慮して初期位置を調整している
対応
bvh から Unity で再生できる fbx形式に変換する時に処理を行う
- 開始時の (x, z) = (0, 0) となっているデータを削除
- 0フレーム目の位置が (x, z) = (0, 0) となるように調整
- bvh から fbx に変換する
<details>
<summary>データを処理するプログラム</summary>
from mcp_persor import BVHparser
import sys
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file', type=str, help='input mocopi record file *.bvh')
args = parser.parse_args(sys.argv[sys.argv.index('--') + 1:])
bvhp = BVHparser(args.file)
# データのない箇所を削除
motion_df = bvhp.get_motion_df()
motion_df = motion_df[
(motion_df['root_Xposition'] != 0) | (motion_df['root_Zposition'] != 0)
]
# 位置と回転をリセット
reset_channels = ['root_Xposition', 'root_Zposition', 'root_Yrotation']
for c in reset_channels:
motion_df[c] = motion_df[c] - motion_df.iloc[0][c]
# dataframeを更新
bvhp.set_motion_df(motion_df)
new_file = f"{args.file[:-4]}-reset.{args.file[-3:]}"
bvhp.to_bvh(new_file)
# new_file を標準出力する
print(new_file) </details>
<iframe width="1180" height="664" src="https://www.youtube.com/embed/oDHtHVAAIPc" title="Unity ツイスターゲーム第1回戦(調整)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
再現できなかった
一連のやり方を esa にまとめようとプロジェクトを作るところからやったところ、
再現ができなくなってしまいました...
- スケールが 100倍 になる
- 動作が反映されない
mocopi と action slam2
研究を始めたい
「mocopi は長時間動くと狂う」
他のセンサと組み合わせて途中でキャリブレーションできないか
>
例)
歩いているとき、足が一定間隔で伸びると仮定すると
歩いているのに膝が最小でも30度曲がっている→ ー30度して調整(適当)
進め方が分からない
- 論文の流れを考えた方が良い?
- とりあえずどの場面にするか決める?
進路関係
余談
高大連携LT会をした [12/26]
高校生のやる気が引き出せた
体調崩した [12/28 ~ 1/4]
なにも出来なかった
家族で熱海に行った [1/4 ~ 1/5]
興国城の写真しか無かった
ペンギン水族館に行った [1/9 ~ 1/10]
始発
終電の西九州新幹線
ペンギン水族館
お土産屋で2万円溶けました...
島原城
帰った