Skip to content

Latest commit

 

History

History
254 lines (162 loc) · 7.34 KB

README-ja.md

File metadata and controls

254 lines (162 loc) · 7.34 KB

English | 日本語

hakoniwa-bridge

本リポジトリでは、リアル(エッジ)とバーチャル(箱庭)を接続するための通信モジュールである「箱庭ブリッジ」を提供します。

箱庭ブリッジは以下の機能を提供します。

  • バーチャル側のデータをエッジ側に配信できます
  • エッジ側のデータをバーチャル側で購読できます

アーキテクチャ

箱庭ブリッジの通信は、Zenoh をベースに構築されています。

箱庭ブリッジの機能は大きく分けて、以下の2機能です。

  • ShmProxy
  • RosProxy

ShmProxy(SharedMemoryProxy)は、バーチャル側に配置されており、箱庭PDUデータをZenoh通信データに変換し、データ転送します。

RosProxyは、エッジ側に配置されており、ROS通信データをZenoh通信データに変換して双方を接続する役割を担います。なお、エッジ側でZenohを組み込んでいる場合は、箱庭PDUデータにそのままアクセスできます。

Hakoniwa Bridge Archtecture

Zenoh を採用している理由は以下の通りです。

  1. 通信方式として UDP/TCP/ROS/MQTTなど、さまざまなバリエーションを選択できる
  2. さまざまなプログラミング言語のサポート(C言語、Python、Rustなど)
  3. 異なるネットワークを超えるこができる(5Gルータ越しのROS通信も可能)
  4. 低遅延通信であり、リアルタイム性が求められる用途に適している

動作環境

  • バーチャル側
    • Ubuntu, MacOS
  • エッジ側
    • Ubuntu
      • ROSまたはZenohを組み込み可能なデバイス(RaspberryPi等)

サンプルプログラム

サンプルプログラムはこちら

インストール手順

箱庭ブリッジのリポジトリをクローンします。

git clone --recursive https://github.com/toppers/hakoniwa-bridge.git

以下の順番でインストールを実施します。

バーチャル側:

エッジ側側:

箱庭コア機能のインストール

箱庭コア機能のインストール手順に従って、コア機能をインストールします。

  1. ディレクトリ移動
cd third-party/hakoniwa-core-cpp-client
  1. Build
bash build.bash
  1. Install
bash install.bash

Zenohのインストール

箱庭ブリッジが利用する Zenoh は、 zenoh-c です。 なお Zenoh のインストールにはRust環境が必要です。

バーチャル側とエッジ側、両方にインストールする必要があります。

  1. ディレクトリ移動
cd third-party 
  1. Build
mkdir -p build && cd build 
cmake ../zenoh-c
cmake --build . --config Release
  1. Install

Linux環境の場合は sudo が必要になることがあります。

cmake --build . --target install

成功すると、以下のファイルが作成されます。

% ls /usr/local/include
zenoh.h                 zenoh_commons.h         zenoh_concrete.h        zenoh_configure.h       zenoh_macros.h          zenoh_memory.h
% ls /usr/local/lib
libzenohc.dylib

Linuxの場合は libzenohc.so が生成されます。 ${LD_LIBRARY_PATH} になければ、上記のパスを追加しておきます。

ShmProxyの作成

cd hakoniwa-bridge/virtual
bash build.bash

成功すると、以下のファイルが作成されます。

% ls cmake-build/shm-proxy/shm-proxy 
cmake-build/shm-proxy/shm-proxy

RosProxyの作成

RosProxyを作成するためには、最初に、箱庭PDUデータとして利用すROSメッセージ定義ファイルを準備する必要があります。ここでは、簡単のため、以下の標準ROSメッセージを利用する前提で説明をします。

  • geometry_msgs/Twist
  • std_msgs/Bool
  1. ディレクトリ移動
cd hakoniwa-bridge/third-party/hakonwia-ros2pdu
  1. 箱庭PDUデータの作成

今回は、ROS標準のメッセージを利用するため、箱庭PDUデータは既存のものを利用できます。 もし独自のROSメッセージを利用する場合は、こちらの手順にしたって、作成してください。

  1. コンフィグファイルの作成

本ファイルは、箱庭のUnityエディタ上でGenerateすると自動生成されるものです。Unityを利用しない場合や、利用する場合でも全てのPDUデータをエッジ側と共有しない場合等は、手動で編集する必要があります。

コンフィグファイルのファイル配置は以下としてください。

hakoniwa-ros2pdu/config/custom.json

定義例:

https://github.com/toppers/hakoniwa-digital-twin/blob/main/sim/config/custom.json

custom.jsonの定義については、こちらを参照ください。

なお、method_typeには、SHMを必ず指定してください。 また、class_nameとconv_class_nameは設定不要です。

  1. RosProxyの作成

以下のコマンドを実行して RosProxyのコードを生成します。

bash create_proxy_ros_zenoh.bash ./config/custom.json 

成功すると、以下のファイルが作成されます。

# ls workspace/src/hako_ros_proxy/src/gen/
hako_ros_proxy_com_ros2.cpp  hako_ros_proxy_com_zenoh.cpp
  1. RosProxyのビルド
cd workspace
colcon build --packages-select hako_ros_proxy

成功すると以下のログが出力されます。

Starting >>> hako_ros_proxy
[Processing: hako_ros_proxy]                             
Finished <<< hako_ros_proxy [35.4s]                       

Summary: 1 package finished [36.0s]

実行手順

ShmProxy

ShmProxyの仕様:

Usage: ./cmake-build/shm-proxy/shm-proxy <asset_name> <config_path> <delta_time_msec> [master]

ShmProxyは、箱庭コンダクタを含んでいます。もし、箱庭コンダクタを独自に起動しない場合は、masterオプションを利用することで、箱庭コンダクタを駆動できます。

実行例:masterオプションを利用しない場合

 ./cmake-build/shm-proxy/shm-proxy ShmProxy ../third-party/hakoniwa-ros2pdu/config/custom.json 20

実行例:masterオプションを利用する場合

 ./cmake-build/shm-proxy/shm-proxy ShmProxy ../third-party/hakoniwa-ros2pdu/config/custom.json 20 master

RosProxy

source install/setup.bash 
ros2 run hako_ros_proxy hako_ros_proxy_node