SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Micchy
2022.03.20 仮想創造機構 LT大会
みっちー Micchy
@Dream_Drive
 社会人ロボコニスト
 メイカー系イベントや各種ロボコンをうろうろ
 2004 ロボットつくりはじめる
 2014 VR内視鏡をつくった
 2019 瀬戸内ROS勉強会 発足
 2020.10 VRChatをはじめる
 2021.04 「だみとら」公開
自己紹介
2mの搭乗可能な変形ロボットを
VRと連動させて動かしたい!
2021 バーチャルマーケット 2022 国際ロボット展
VRChatとロボットが連動するには…
双方向で、
通信するしかない!
シリアル通信とは…
PCの背面パネル
RS-232C (Dsub-9pin)
最近は省略されることが多いが
実は自作PCの取説を見ると
M/Bに実装されていることも USB-RS232C変換機
注) USBもシリアル通信ですが、
本LTでは、RS-232CやUARTを用いた非同期シリアル通信を扱います。
シリアル通信(非同期)とは…
• 1本の線でデータを送る通信
• 2本の線があれば、双方向でのデータ通信が出来る
• クロック線がないので、あらかじめ通信速度を決めておく
• タイミングがズレると通信が成立しない
世の中にあるシリアル通信で繋がるモノたち
課題
シリアル通信をVRChatで実現する・・・
シリアル通信を実現させる方法
com2
vrchat
Udon
Serial
Debag Log Text
MIDI
?
なんでも繋ごう!
実装事例)
VRChat内のターミナルとRaspberryPiで通信
PCVR
Raspberry Pi
RS232C
<< VRChat内にハイパーターミナルを作りました。
踏み台にして、
クラウドとも通信可能
シリアル通信を実現させる方法
com2
vrchat
Udon
Serial
Debag Log Text
MIDI
(2) VRC World から外部への出力
(1) 外部からVRC Worldへの入力
シリアル通信を実現させる方法(1)
com2
vrchat
Udon
Serial
MIDI
(1) 外部からVRC Worldへの入力
外部からWorldへのデータ入力 - MIDI
 VRChatに送れるMIDIのイベント
 NoteON – 鍵盤を押すイベント(チャンネル、強さ、音程)
 NoteOFF – 鍵盤を離すイベント(チャンネル、強さ、音程)
 Control Change -音量や音の性質などに関する制御
 本来は、キーを押す・離すなので、交互に送るものだけれど・・・
 キニシナイ!漢は黙って、ひたすら ノォォォオトッ!オンッッ!!
MIDI (Note On)とは・・・
チャンネル
1-16(4bit)
ノートナンバー(音の高さ)
0-127 (7bit)
ベロシティ (音の強さ)
0-127 (7bit)
MIDIのデータ (Note On)
20bit
音を伝送するための転送規格
• 音の種類(チャンネル)
• 音の強さ
• 音の高さ
MIDI (Note On)とは・・・
チャンネル
1-16(4bit)
ノートナンバー(音の高さ)
0-127 (7bit)
ベロシティ (音の強さ)
0-127 (7bit)
MIDIのデータ (Note On)
20bit
音を伝送するための転送規格
• 音の種類(チャンネル)
• 音の強さ
• 音の高さ
20bitのデータ
MIDI (Note On) を使ってデータを送る…
チャンネル
1-16(4bit)
ノートナンバー(音の高さ)
0-127 (7bit)
ベロシティ (音の強さ)
0-127 (7bit)
MIDIのデータ (Note On)
20bit
8bitのデータ
もったいないケド、
20bitの一部を8bitのデータとして使う
外部からデータ(1byte)を受信出来た!
com2
vrchat
Udon
Serial
仮想MIDIドライバ
loopMIDI
8bitのデータ
エンコード
1byte -> MIDI
デコード
MIDI-> 1byte
1byte
シリアル通信を実現させる方法(2)
com2
vrchat
Udon
Serial
Debag Log Text
(2) VRC World から外部への出力
VRChatのログを読み取る
 VRChatログの場所
 C:¥Users¥(ユーザー名)¥AppData¥LocalLow¥VRChat¥VRChat¥output_log_XX-XX-XX.txt
 リードオンリーでファイルオープンすれば、リアルタイムにパース可能
Worldにjoinする度に、新しいログが生成される。
更新時間が一番新しいものが現行のログ
VRChatのログに情報を書き出す
 “Hello World”を出力するには…
 16進数に変換 1byte = 8 bit : 0-255 => 00-FF で表現可能
 48 65 6c 6c 6f 20 57 6f 72 6c 64 0d 0a
 前後に区切り文字をつけて、 Debug.Log関数で出力!
 OUTPUT_DATA[48656C6C6F20576F726C640D0A]
 アスキーだけじゃなく、バイナリも転送可能 (0x00-0xFF なんでも送れる)
H e l l o (スペース) W o r l d (復帰) (改行)
48 65 6c 6c 6f 20 57 6f 72 6c 64 0d 0a
VRChatのログに書き出されたデータ
 実際のログの様子
外部へデータを送信出来た!
com2
vrchat
Udon
Serial
Debag Log Text
DATA
外部プログラム[com2vrchat]で再度デコード
• OUTPUT_DATA[]を見つけ出す
• 中身を抜き出す
• 16進数をバイナリに変換
• 変換済みのバイナリを仮想COMポートに流す
Udon Serial - Arduinoライクな関数実装
Arduino のSerial準拠
 Serial_write(byte send_data) – 1byte送信
 Serial_print(string send_data) – 文字列送信
 Serial_println(string send_data) – 文字列送信(改行付き)
 bool Serial_available() – 受信バッファの確認
 byte Serial_read() – 1byteデータ受信
 byte Serial_peek() – 1byteデータ受信
 void Serial_flush() – 受信バッファクリア
Udon Serial - Arduinoライクな関数実装
 受信データをそのままループバックするUdonのサンプルコード
GitHub公開しまーす。なう!
 https://github.com/dreamdrive/UdonSerial
課題
 MIDIドライバ(loopMIDI)や、場合によって仮想シリアルドライバ com0comに加え、
com2vrchatなど、周りに用意するものが多く準備に手間がかかる
 MIDIドライバを書けるようになって組み込みたい…
 現状、ソースコードしか公開してないのでpythonが読める人しか対象になってない
 com2vrchatは自動でログを検出して、GUIで操作できるようにします。
 World OSCが来たらたぶん用済みになる \(>o<)/
夢が広がるね!
ご清聴、ありがとうございました!

Mais conteúdo relacionado

Mais procurados

20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
 

Mais procurados (20)

UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
トリコの動かし方
トリコの動かし方トリコの動かし方
トリコの動かし方
 
次世代ゲームにおける自動生成技術
次世代ゲームにおける自動生成技術 次世代ゲームにおける自動生成技術
次世代ゲームにおける自動生成技術
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
ARマーカーを利用したHoloLens同士の位置合わせ
ARマーカーを利用したHoloLens同士の位置合わせARマーカーを利用したHoloLens同士の位置合わせ
ARマーカーを利用したHoloLens同士の位置合わせ
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
VRM-VCIが広げるVR世界間ポータビリティ
VRM-VCIが広げるVR世界間ポータビリティVRM-VCIが広げるVR世界間ポータビリティ
VRM-VCIが広げるVR世界間ポータビリティ
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くない
 
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
 
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 
Research modeで取得した深度(Depth)データを可視化する
Research modeで取得した深度(Depth)データを可視化するResearch modeで取得した深度(Depth)データを可視化する
Research modeで取得した深度(Depth)データを可視化する
 
ゲームAI入門(後半)
ゲームAI入門(後半)ゲームAI入門(後半)
ゲームAI入門(後半)
 
UnityによるHoloLensアプリケーション入門
UnityによるHoloLensアプリケーション入門UnityによるHoloLensアプリケーション入門
UnityによるHoloLensアプリケーション入門
 
脱Unity!? UE4でVR開発のここが変わった
脱Unity!? UE4でVR開発のここが変わった脱Unity!? UE4でVR開発のここが変わった
脱Unity!? UE4でVR開発のここが変わった
 

Semelhante a VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~

はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
Saki Homma
 

Semelhante a VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~ (20)

【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス!  MR で変わるライフスタイルとワークスタイル ...【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス!  MR で変わるライフスタイルとワークスタイル ...
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
 
プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
Azure Remote Renderingを試す
Azure Remote Renderingを試すAzure Remote Renderingを試す
Azure Remote Renderingを試す
 
Ma8 Caravan 大阪 rev1
Ma8 Caravan 大阪 rev1Ma8 Caravan 大阪 rev1
Ma8 Caravan 大阪 rev1
 
ヒューマノイドのアプリ開発とモーション生成AIの導入 ROS JP UG #51
ヒューマノイドのアプリ開発とモーション生成AIの導入 ROS JP UG #51ヒューマノイドのアプリ開発とモーション生成AIの導入 ROS JP UG #51
ヒューマノイドのアプリ開発とモーション生成AIの導入 ROS JP UG #51
 
Let’s play windows 10 io t on raspberry pi !
Let’s play windows 10 io t on raspberry pi !Let’s play windows 10 io t on raspberry pi !
Let’s play windows 10 io t on raspberry pi !
 
楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do
 
2016 0422 io tlt勉強会
2016 0422 io tlt勉強会2016 0422 io tlt勉強会
2016 0422 io tlt勉強会
 
2016 0316 io tlt勉強会_掲載用
2016 0316 io tlt勉強会_掲載用2016 0316 io tlt勉強会_掲載用
2016 0316 io tlt勉強会_掲載用
 
これから始める Windows io t core
これから始める Windows io t coreこれから始める Windows io t core
これから始める Windows io t core
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
Windows IoT Core and Robot Arm
Windows IoT Core and Robot ArmWindows IoT Core and Robot Arm
Windows IoT Core and Robot Arm
 
WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告
WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告
WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告
 
はじめようMixed Reality Immersive編
はじめようMixed Reality Immersive編はじめようMixed Reality Immersive編
はじめようMixed Reality Immersive編
 
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
 
JPC2016: Keynote: Transforming the World Together~パートナー様と共に推進するデジタルトランスフォーメーション
JPC2016: Keynote: Transforming the World Together~パートナー様と共に推進するデジタルトランスフォーメーションJPC2016: Keynote: Transforming the World Together~パートナー様と共に推進するデジタルトランスフォーメーション
JPC2016: Keynote: Transforming the World Together~パートナー様と共に推進するデジタルトランスフォーメーション
 
Mixed Reality Dev Daysから読み解くこれからのMixed Reality
Mixed Reality Dev Daysから読み解くこれからのMixed RealityMixed Reality Dev Daysから読み解くこれからのMixed Reality
Mixed Reality Dev Daysから読み解くこれからのMixed Reality
 
Raspberry pi+mono を使ってlegoを制御
Raspberry pi+mono を使ってlegoを制御Raspberry pi+mono を使ってlegoを制御
Raspberry pi+mono を使ってlegoを制御
 
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
 

Mais de Hirokazu Onomichi

Mais de Hirokazu Onomichi (10)

仮想のPremaidAIを、既存のロボット用ボードで動かしてみた話
仮想のPremaidAIを、既存のロボット用ボードで動かしてみた話仮想のPremaidAIを、既存のロボット用ボードで動かしてみた話
仮想のPremaidAIを、既存のロボット用ボードで動かしてみた話
 
Nuitrackを用いて自作ヒューマノイドを動かしてみた話
Nuitrackを用いて自作ヒューマノイドを動かしてみた話Nuitrackを用いて自作ヒューマノイドを動かしてみた話
Nuitrackを用いて自作ヒューマノイドを動かしてみた話
 
ROSを用いた天吊型スカラロボットの共同製作
ROSを用いた天吊型スカラロボットの共同製作ROSを用いた天吊型スカラロボットの共同製作
ROSを用いた天吊型スカラロボットの共同製作
 
ROSConJP2019とWMD2019の出張報告!
ROSConJP2019とWMD2019の出張報告!ROSConJP2019とWMD2019の出張報告!
ROSConJP2019とWMD2019の出張報告!
 
瀬戸内ROS勉強会の紹介~地方でROSを勉強するコツ~
瀬戸内ROS勉強会の紹介~地方でROSを勉強するコツ~瀬戸内ROS勉強会の紹介~地方でROSを勉強するコツ~
瀬戸内ROS勉強会の紹介~地方でROSを勉強するコツ~
 
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価
 
ROS2講習会の報告 (瀬戸内ROS勉強会#02にて)
ROS2講習会の報告 (瀬戸内ROS勉強会#02にて)ROS2講習会の報告 (瀬戸内ROS勉強会#02にて)
ROS2講習会の報告 (瀬戸内ROS勉強会#02にて)
 
瀬戸内ROS勉強会のご紹介
瀬戸内ROS勉強会のご紹介瀬戸内ROS勉強会のご紹介
瀬戸内ROS勉強会のご紹介
 
ぼくのかんがえる、さいきょうのすからろぼっと()
ぼくのかんがえる、さいきょうのすからろぼっと()ぼくのかんがえる、さいきょうのすからろぼっと()
ぼくのかんがえる、さいきょうのすからろぼっと()
 
あるくエクセルの話
あるくエクセルの話あるくエクセルの話
あるくエクセルの話
 

VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~