Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HakoniwaPdu

 HakoniwaPdu

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

Takashi Mori

March 19, 2024
Tweet

More Decks by Takashi Mori

Other Decks in Technology

Transcript

  1. はじめに • この資料では、箱庭アセット間の通信データであるPDUの情報を整理してい ます。 • 箱庭のPDU(Protocol Data Unit)とは何か • 箱庭の通信プロトコル・アーキテクチャ

    • 箱庭アセットと箱庭PDUチャネルについて • 箱庭PDUデータの作成⽅法 • 箱庭PDUデータの組み込み⽅法 • 箱庭アセットAPI • 箱庭アセットUnity • 箱庭PDUデータのアクセス⽅法 • 箱庭アセットAPI • 箱庭アセットUnity 2
  2. 箱庭のPDUとは何か • 箱庭のPDU(Protocol Data Unit)は、箱庭アセットが互いに通信するためのデータ単位です。 • PDUデータ型の定義︓ ROS IDL (Interface

    Definition Language) というインターフェース記述⾔語 • PDUデータは、様々な通信プロトコルを介してデータ交換されます。 • UDP, MQTT, ROS, 共有メモリ 3
  3. 箱庭アセットと箱庭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” ) でアクセスする
  4. 箱庭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
  5. ⽣成される箱庭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
  6. 箱庭PDUデータの組み込み⽅法 • 箱庭アセットAPI • offsetファイルは、以下に配置します。 • /usr/local/lib/hakoniwa/hako_binary/offset • jsonファイルは利⽤しません。 •

    typesファイルは、箱庭アセット側で必要なものを取得してビルドしてください。 • 箱庭アセットUnity • offsetファイルとjsonファイルのみ利⽤します。 • 箱庭Unity共通ディレクトリ plugin-srcs に ros_types というディレクトリがあります。 • その配下に、以下のディレクトリがありますので、そこに作成したファイルを配置してください。 • json • offset 12
  7. 箱庭PDUデータのアクセス⽅法 • 箱庭アセットAPIの場合は、以下の⽅法でアクセスできます。 • 箱庭PDUデータを読み込みする • 箱庭PDUデータを書き込みする • 対応している⾔語︓C/C++、Python •

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