Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spicaの全体的な仕様 #9

Open
y-ogawara opened this issue Oct 19, 2018 · 6 comments
Open

spicaの全体的な仕様 #9

y-ogawara opened this issue Oct 19, 2018 · 6 comments
Assignees
Labels

Comments

@y-ogawara
Copy link
Member

アプリ、esp側の連携部分や、ハードウェアのざっくりとした仕様
アプリとespの通信まわり(udpの話)

@y-ogawara
Copy link
Member Author

y-ogawara commented Oct 31, 2018

言葉の定義について
アプリ側で作成する1つ1つの命令のことを、この文章中ではブロックと定義しています。
atlasとは、spicaの前に開発をしていたプログラミング思考教育ツールです。
spicaとは、今回作成したプログラミング思考教育ツールをまとめた総称です。
ロボットとは、アプリで作成されたプログラムを実行するラジコンのことです。

アプリとロボット感の通信について
アプリとロボット間はWi-Fiで接続をしています。利用しているプロトコルはUDPです。
HTTPなども試しましたが、反応速度の問題からUDPを採用することとなりました。

UDPとは
< UDPは、インターネットで標準的に使われているプロトコルの一種で、 「User Datagram Protocol」の略です。 インターネット・プロトコル(IP)を使ったネットワークにおいて、 アプリケーション同士が最小限の仕組みでデータを送受信できるように考案された、 シンプルなプロトコルです。 OSI参照モデル1におけるトランスポート層のプロトコルで、 その仕様は1980年8月に公開されたRFC7682で定められています。>

アプリとロボット間の通信データ内容
実際にアプリからESPに投げているデータは以下のような数字で構成されたデータです。
0001100100001000210010000100031001000010004100100001
このデータを送信することで、前進 -> 後退 -> 左回転 -> 右回転の順番でロボットが動作します。
1命令の文字列は13文字で構成されています。最初の4文字がブロックID、次の3文字が左モーターの速度、次の3文字が右モーター速度、最後の3文字が実行時間です。実行時間は0.1秒単位で記載するため、010で1秒となる構成です。
この13文字のデータを1コマンドと定義しています。

通信タイミング
アプリとロボット間の通信タイミングについてです。アプリ側でプログラムを作成したあと、送信ボタンを押したタイミングで通信を開始します。このタイミングでアプリからロボットに対して、「アプリとロボット間の通信データ内容」で記述した内容を、ブロックの数分連結して送信します。
ロボット側でデータを受信したあと解釈を行い、実際にモーターやセンサーを動かします。送られてきたすべてのプログラムを実行し終わったあとに、アプリ側に終了通知を送ります。
これが一連の通信フローとなります。

参考
https://www.nic.ad.jp/ja/basics/terms/udp.html

@Dai1678
Copy link
Member

Dai1678 commented Oct 31, 2018

通信内容の概要を書いてしまった()

アプリからUDP通信で送られてきたデータはそのままだとただの数字の羅列となっています。この数字はユーザーがアプリ上で組み立てた全てのブロックを表しています。ひとつひとつの命令は13桁の数字で表しています。データを受信すると、まずは文字列を13桁ごとに分けて命令モデルを作成します。この命令モデルは命令の種類によって保持しているデータ内容が異なります。「前後移動・左右回転ブロック」の命令モデルは、それらの種類を表すID情報、左タイヤを回す速度値、右タイヤを回す速度値、命令の実行時間を持っています。「もしもブロック」の命令モデルは、ID情報、距離センサーで基準とする距離[cm]、距離センサーで基準とする距離と距離センサーで計測した値との比較結果において大きかった場合を真とするか、小さかった場合を真とするかのフラグ値を持っています。「ループブロック」はID情報、命令を繰り返す回数を持っています。この命令モデルを基にロボットを走らせています。

@Dai1678
Copy link
Member

Dai1678 commented Oct 31, 2018

この13文字のデータを1コマンドと定義しています。

表記統一として、コマンドか命令か決めたい

ブロックの数分連結して送信します。

ブロックの数だけ連結〜 のほうが読みやすそう

@y-ogawara
Copy link
Member Author

y-ogawara commented Oct 31, 2018

言葉の定義について
アプリ側で作成する1つ1つの命令のことを、この文章中ではブロックと定義しています。
Atlasとは、Spicaの前に開発をしていたプログラミング思考教育ツールです。
Spicaとは、今回作成したプログラミング思考教育ツールをまとめた総称です。
ロボットとは、アプリで作成されたプログラムを実行するラジコンのことです。

アプリとロボット感の通信について
アプリとロボット間はWi-Fiで接続をしています。利用しているプロトコルはUDPです。
HTTPなども試しましたが、反応速度の問題からUDPを採用することとなりました。

UDPとは
< UDPは、インターネットで標準的に使われているプロトコルの一種で、 「User Datagram Protocol」の略です。 インターネット・プロトコル(IP)を使ったネットワークにおいて、 アプリケーション同士が最小限の仕組みでデータを送受信できるように考案された、 シンプルなプロトコルです。 OSI参照モデル1におけるトランスポート層のプロトコルで、 その仕様は1980年8月に公開されたRFC7682で定められています。>

アプリとロボット間の通信データ内容
実際にアプリからロボットに投げているデータは以下のような数字で構成されたデータです。
0001001001001000200100100100030010010010004001001001
このデータを送信することで、前進 -> 後退 -> 左回転 -> 右回転の順番でロボットが動作します。
1命令の文字列は13文字で構成されています。最初の4文字がブロックID、次の3文字が左モーターの速度、次の3文字が右モーター速度、最後の3文字が実行時間です。実行時間は0.1秒単位で記載するため、010で1秒となる構成です。
この13文字のデータを1命令と定義しています。

通信タイミング
アプリとロボット間の通信タイミングについてです。アプリ側でプログラムを作成したあと、送信ボタンを押したタイミングで通信を開始します。このタイミングでアプリからロボットに対して、「アプリとロボット間の通信データ内容」で記述した内容を、ブロックの数だけ連結して送信します。
ロボット側でデータを受信したあと解釈を行い、実際にモーターやセンサーを動かします。送られてきたすべてのプログラムを実行し終わったあとに、アプリ側に終了通知を送ります。
これが一連の通信フローとなります。

参考
https://www.nic.ad.jp/ja/basics/terms/udp.html

@Dai1678
Copy link
Member

Dai1678 commented Oct 31, 2018

atlasとは、spicaの前に開発をしていたプログラミング思考教育ツールです。

Atlasとは、Spica ~

spicaとは、今回作成したプログラミング思考教育ツールをまとめた総称です。

Spicaとは、〜

実際にアプリからESPに投げているデータは以下のような数字で構成されたデータです。

ESP32

@y-ogawara
Copy link
Member Author

y-ogawara commented Oct 31, 2018

アプリとロボット間はWi-Fiで接続をしています。利用しているプロトコルはUDPです。
TCPなども試しましたが、反応速度の問題からUDPを採用することとなりました。

TCPとは
TCP (Transmission Control Protocol) は、IPと同様にインターネットにおいて標準的に利用されている
 プロトコルです。TCPは、IPの上位プロトコルでトランスポート層で動作するプロトコル。ネットワーク
 層のIPとセッション層以上のプロトコル(例:HTTP、FTP、Telnet) の橋渡しをする形で動作しています。

参考
https://www.weblio.jp/content/TCP

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants