Hakoniwa-pdu

2.7K Views

April 10, 24

スライド概要

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

profile-image

TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

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

2.

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

3.

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

4.

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

5.

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

6.

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

7.

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

8.

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

9.

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

10.

箱庭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

11.

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

12.

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

13.

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