#author("2021-12-07T09:02:15+09:00","default:Real2Virtual202111","Real2Virtual202111")
#author("2021-12-07T13:10:33+09:00","default:Real2Virtual202111","Real2Virtual202111")
* Real -> Virtual 変換システムの開発その1 [#x976940c]

&ref(Real2Virtual202111/r2v-01.jpg);

- Realな世界でサイコロを使って組み立てられたRealな物が、ちょっとおまじないをして待つと、パソコンの中の、Virtualな世界に現れます。
- Protopedia 
-- https://protopedia.net/prototype/2730
- Youtube
-- https://www.youtube.com/watch?v=tm9E9IY1K_g&t=3s
* 概要 [#ad407391]
&ref(/Real2Virtual202111/real2virtual-outline-01.png,50%);
+相互に通信可能で、どの面がどの向きで接続されているかを認識できる、「知的部品(ここではサイコロ)」を沢山用意します。
+知的部品を組み立てて、なにかRealな「物」をつくります。
+組み立ててできた「物」は、それ自身で、自分がどのような形になっていて、どのような機能をもっているか、知ることができるようにします。
+その「物」の情報を、パソコンに吸い上げます。
パソコンでその「物」の情報にしたがって、「物」と同じものをVirtual 空間で組み立てます。
* 仕組み [#q45ad5e1]
** サイコロの面 [#m681b2bc]
- サイコロの面には次のように部品が配置されています。
&ref(Real2Virtual202111/dice_face_parts_01.png,30%);
** サイコロ同士の結合機構 [#n1bb7144]
- 2つのサイコロの面と面が重なった時、サイコロの面に配置された磁石同士がが次の図のように吸着し、サイコロ同士が結びつきます。&br;
&ref(Real2Virtual202111/dice_face_connection_01.png,30%);
** サイコロ間のメッセージ交換 [#v46bffdb]
- サイコロの1つの面の(赤外線)発光ダイオードとフォトトランジスタは次のような回路を構成しています。
&ref(Real2Virtual202111/face-schematic-01.png,50%);
- 2つのサイコロが1つの面で繋がった時、サイコロ間は赤外線を使って相互に通信できるようになっています。また、それぞれのサイコロのどの面がどの向きで接続されたか、分かるようになっています。&br;
&ref(Real2Virtual202111/dice_face_communication_01.png,50%);
** サイコロの中の一つとPCの間の接続 [#p02dd4d9]
- サイコロのそれぞれは、下の回路図で示すような回路を内部に持っています。
-- この中で、M5Stack Atom は1つだけ入っています。
-- このサイコロの中のMbed LPC1768(以後1768)とM5Stack ATOM (以後ATOM)の間がUARTで接続されています。
-- パソコンとATOMの間はWiFiを使って、TCP/IPでつながります。
-- ATOM でWiFiのサーバを動かすと同時に、TCP/IPストリーム(リモートのPC側)とUART(ローカルの 1768)の中継サーバを起動します。
-- これにより、パソコンと、この1768の間で、双方向に、コマンドとメッセージが流れます。
-- パソコンからAtomと繋がった1768に対してコマンドを送ると、その1768からパソコンにコマンドの実行結果がメッセージとして返ります。
- サイコロの回路図
&ref(Real2Virtual202111/dice_circuit_01.png,50%);
* Hardware [#lf953dfb]
- [[Hardware]]

** 作られた「物」の情報の獲得 [#a8121a8d]
- それぞれのサイコロは、構文解析木上のノードに相当します。それぞれのサイコロは以下の変数を持ちます
-- myname ... 自分の名前
-- upname ... 構文解析木上の上位のノード(サイコロ)の名前
-- faceID[faceMax] ... i番目の面に、下位のノード(サイコロ)が接続されていたら、そのサイコロの接続された面の番号が入ります。接続されていない場合は、-1が入ります。-1が初期値です。
-- dirID[faceMax] ... i番目の面に、下位ノード(サイコロ)が接続されていたら、そのサイコロの接続された面の向きを表す番号が入ります。接続されていない場合は、-1が入ります。-1が初期値です。
-- myDirID[faceMax] ... i番目の面に、下位ノード(サイコロ)が接続されていたら、そのサイコロと接続された自分の面の向きを表す番号が入ります。接続されていない場合は、-1が入ります。dirID[i]とmyDirID[i]は、常に同じ値になるはずです。-1が初期値です。
-- upFaceID ... 構文解析上の上位ノード(サイコロ)が接続されていた場合、その接続面の番号が入ります。接続されていない場合は-1になり、この時は上位ノードとして、UARTと通信します。-1が初期値です。
-- FirstTime ...このサイコロが初期状態かどうかを表します。初期値の状態の時が1、そうでない時が0です。
- パソコンから、それが接続された1768に対して、サイコロ間の接続関係を再帰的に問うコマンド(srs.)が送信されます。srs は start recursive structure searchの略です。
- 1768上でそのコマンドが解釈実行されます。 
srsコマンドは以下を行います。
+ 
+ そのコマンドを受け取った以外の(M5Stackからコマンドを受け取った場合は全ての)サイコロの面の、4つの発光ダイオードから、順番に、"cq face <送信元の面の番号> dir <送信元の発光ダイオードの番号>."の信号を送信します。発光ダイオードの番号は、面と面が重なったていた時は、その向きを表します。
- "cq face <送信元の面の番号> <送信元の発光ダイオードの番号>."を受け取ったサイコロがあれば、そのサイコロは、それを受け取った面から、それを送信したサイコロに対して、"ack1 face <受け取った面の番号> dir <受け取った発光ダイオードの番号> udir <送信元の発光ダイオードの番号>."を返信します。
- その次に、もし、そのサイコロが既に、"cq"コマンドを受け取ったことがなければ、このサイコロの、受け取った面以外の面に対して、同様に、cq face <送信元の面の番号> dir <送信元の発光ダイオードの番号>."の信号を送信します。
* Mbed LPC1768がUARTから受け取るコマンドの一覧 [#v9b8aed2]
        "set port <p> <n> <value>."
        "...<p>=PE|PME|PB|PMB <n>=0|1|...|F."
        "...<value> is 0 or 1."
        ".... if <p>=PME|PMB, 0 means output, "
        "....                 1 means input."
        "set mem <n> 1  or set mem <n> 0."
        "  ...          <n>=(0|1|...|F)+."
        "ask port <p> <n>."
        "...<p>=PE|PME|PB|PMB <n>. <n>=0|1|...|F."
        "get port <p> <n>."
        "...<p>=PE|PME|PB|PMB <n>. <n>=0|1|...|F."
        "ask mem <n>."
        "  ...          <n>=(0|1|...|F)+."
        "get mem <n>."
        "  ...          <n>=(0|1|...|F)+."
        "set outface <n>."
        "set face <n> allLED <value>."
        "set face <n> led|dir <value>."
        "send face current <strconst>."
        "send face <n> <strconst>."
        "send root <n> <strconst>."
        "bcast face <n> <strconst>."
        "cq face <n> dir <value>."
        "ack1 face <n> dir <value> uDir <value>."
        "ack2 face <n> dir <value> uDir <value>."
        "h. or help. or ?"
        "srs.  ... start recursive search."
        "srr.  ... start recursive reset."
* プログラム [#jf1e4070]
- [[Program]]
* 参考資料 [#pb2da12d]
- TESLA計画
-- http://www.yama-lab.org/~yamanoue/wiki/index.php?ProjectTesla
- テレポーテーションとコンパイラ
-- https://www.slideshare.net/takashiyamanoue/ss-16159139 
----
#counter

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS