Slide 1

Slide 1 text

箱庭(Hakoniwa) PDU 合同会社箱庭ラボ 森崇

Slide 2

Slide 2 text

はじめに • この資料では、箱庭アセット間の通信データであるPDUの情報を整理してい ます。 • 箱庭のPDU(Protocol Data Unit)とは何か • 箱庭の通信プロトコル・アーキテクチャ • 箱庭アセットと箱庭PDUチャネルについて • 箱庭PDUデータの作成⽅法 • 箱庭PDUデータの組み込み⽅法 • 箱庭アセットAPI • 箱庭アセットUnity • 箱庭PDUデータのアクセス⽅法 • 箱庭アセットAPI • 箱庭アセットUnity 2

Slide 3

Slide 3 text

箱庭のPDUとは何か • 箱庭のPDU(Protocol Data Unit)は、箱庭アセットが互いに通信するためのデータ単位です。 • PDUデータ型の定義︓ ROS IDL (Interface Definition Language) というインターフェース記述⾔語 • PDUデータは、様々な通信プロトコルを介してデータ交換されます。 • UDP, MQTT, ROS, 共有メモリ 3

Slide 4

Slide 4 text

箱庭の通信プロトコル・アーキテクチャ(1/4) • UDP通信 4

Slide 5

Slide 5 text

箱庭の通信プロトコル・アーキテクチャ(2/4) • MQTT通信 5

Slide 6

Slide 6 text

箱庭の通信プロトコル・アーキテクチャ(3/4) • ROS通信 6

Slide 7

Slide 7 text

箱庭の通信プロトコル・アーキテクチャ(3/4) • 共有メモリ 7

Slide 8

Slide 8 text

箱庭アセットと箱庭PDUチャネルについて • 箱庭アセットをPDUデータI/Oの観点で分類すると以下の2種類に分かれます • プラントモデル • 制御モデル • プラントモデルは、複数のロボットを持つことができます(制御側も同様) • ロボットは、複数のPDUデータに対してI/O発⾏できます • 各ロボットから⾒たときのPDUデータの識別IDをチャネルと呼びます • なのでPDUチャネルの識別は以下の2つの情報が必要となります • プラントモデルのロボット名 • チャネルID 8 プラントモデル 制御モデル ロボットB ロボットA PDUデータB-1 PDUデータA-2 PDUデータA-1 PDUデータB-2 制御B 制御A チャネルID 0 1 0 1 0 1 0 1 チャネルID ロボットAのPDUデータ A-2にアクセスするには、 (“ロボットA”, “1” ) でアクセスする ロボットBのPDUデータ B-2にアクセスするには、 (“ロボットB”, “1” ) でアクセスする

Slide 9

Slide 9 text

箱庭アセットと箱庭PDUチャネルについて • UnityとPythonの箱庭アセットが箱庭コア機能を通して通信している様⼦(共有メモリ⽅式) 9 箱庭アセット(Unityの場合) ロボット PDU 0:センシングデータ1 1:センシングデータ2 2:モータ指⽰値 センサ1 センサ2 モータ 箱庭コア機能 0 1 2 0 1 2 PDUデータ 0 1 2 箱庭アセット (Pythonの場合) 0 1 2 0 1 2

Slide 10

Slide 10 text

箱庭PDUデータの作成⽅法 • 以下の⼿順で箱庭PDUデータを作成します。 • 0. 箱庭PDUデータを作成するリポジトリをクローンする • https://github.com/toppers/hakoniwa-ros2pdu • インストール⼿順およびPDUデータ⽣成⽅法は上記を参照ください。 • 1. 箱庭PDUデータの型を決める • 2-(a). ROS標準の通信データに存在している場合 • 対象の定義ファイル(.msg)から箱庭のPDUデータ定義ファイル群を⽣成する • 2-(b). ROS標準の通信データに存在していない場合 • ROS IDLで、定義ファイル(.msg)を作成する • 対象の定義ファイル(.msg)から箱庭のPDUデータ定義ファイル群を⽣成する • 3. ⽣成した箱庭PDUデータを取得する 10

Slide 11

Slide 11 text

⽣成される箱庭PDUデータの内訳 • ⽣成される場所︓ • hakoniwa-ros2pdu/pdu • 3種類のファイルが⽣成されます。 • json︓ • json形式の定義ファイル(Unityで利⽤) • offset︓ • offset定義ファイル(PDUバイナリデータのエンコーダ/デコーダで利⽤) • types︓ • C⾔語のデータ型およびROSデータ型への変換定義ファイル(.h, .hpp) • C⾔語のデータ型定義ファイル ︓pdu_ctype_.h • ROSデータ型への変換定義ファイル︓pdu_ctype_conv_. hpp • 上記3種類のファイルは、以下のディレクトリ構成で⽣成されます。 • /<メッセージ名> 11

Slide 12

Slide 12 text

箱庭PDUデータの組み込み⽅法 • 箱庭アセットAPI • offsetファイルは、以下に配置します。 • /usr/local/lib/hakoniwa/hako_binary/offset • jsonファイルは利⽤しません。 • typesファイルは、箱庭アセット側で必要なものを取得してビルドしてください。 • 箱庭アセットUnity • offsetファイルとjsonファイルのみ利⽤します。 • 箱庭Unity共通ディレクトリ plugin-srcs に ros_types というディレクトリがあります。 • その配下に、以下のディレクトリがありますので、そこに作成したファイルを配置してください。 • json • offset 12

Slide 13

Slide 13 text

箱庭PDUデータのアクセス⽅法 • 箱庭アセットAPIの場合は、以下の⽅法でアクセスできます。 • 箱庭PDUデータを読み込みする • 箱庭PDUデータを書き込みする • 対応している⾔語︓C/C++、Python • 箱庭アセットUnityの場合は、Unity向けに作成した箱庭APIを利⽤します。 • 詳細は、箱庭チュートリアルのUnity編を参照ください。 • 設計情報(コラム)︓ • 箱庭PDUデータは、バイナリデータとして任意の通信プロトコルで伝送します。 • そのために、offsetファイルが必要となるのです。 • 箱庭コア機能は、共有メモリデータにPDUデータを配置・管理しています。 • データは全てバイナリデータとして保存されています。 • 箱庭コア機能のAPIを使うことで、これらのデータに直接アクセスすることもできます。 13