Skip to content

Commit dbef090

Browse files
committed
fix #1
1 parent bf9ee88 commit dbef090

File tree

4 files changed

+242
-2
lines changed

4 files changed

+242
-2
lines changed

README.md

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,241 @@
11
# hakoniwa-bridge
2+
3+
本リポジトリでは、リアル(エッジ)とバーチャル(箱庭)を接続するための通信モジュールである「箱庭ブリッジ」を提供します。
4+
5+
箱庭ブリッジは以下の機能を提供します。
6+
7+
* バーチャル側のデータをエッジ側に配信できます
8+
* エッジ側のデータをバーチャル側で購読できます
9+
10+
## アーキテクチャ
11+
12+
箱庭ブリッジの通信は、[Zenoh](https://zenoh.io/) をベースに構築されています。
13+
14+
箱庭ブリッジの機能は大きく分けて、以下の2機能です。
15+
16+
* ShmProxy
17+
* RosProxy
18+
19+
ShmProxy(SharedMemoryProxy)は、バーチャル側に配置されており、箱庭PDUデータをZenoh通信データに変換し、データ転送します。
20+
21+
RosProxyは、エッジ側に配置されており、ROS通信データをZenoh通信データに変換して双方を接続する役割を担います。なお、エッジ側でZenohを組み込んでいる場合は、箱庭PDUデータにそのままアクセスできます。
22+
23+
![Hakoniwa Bridge Archtecture](images/archtecture.png)
24+
25+
Zenoh を採用している理由は以下の通りです。
26+
27+
1. 通信方式として UDP/TCP/ROS/MQTTなど、さまざまなバリエーションを選択できる
28+
2. さまざまなプログラミング言語のサポート(C言語、Python、Rustなど)
29+
3. 異なるネットワークを超えるこができる(5Gルータ越しのROS通信も可能)
30+
4. 低遅延通信であり、リアルタイム性が求められる用途に適している
31+
32+
## 動作環境
33+
34+
* バーチャル側
35+
* Ubuntu, MacOS
36+
* エッジ側
37+
* Ubuntu
38+
* ROSまたはZenohを組み込み可能なデバイス(RaspberryPi等)
39+
40+
## インストール手順
41+
42+
箱庭ブリッジのリポジトリをクローンします。
43+
44+
```
45+
git clone --recursive https://github.com/toppers/hakoniwa-bridge.git
46+
```
47+
48+
以下の順番でインストールを実施します。
49+
50+
バーチャル側:
51+
- [箱庭コア機能のインストール](#箱庭コア機能のインストール)
52+
- [Zenohのインストール](#Zenohのインストール)
53+
- [ShmProxyの作成](#ShmProxyの作成)
54+
55+
エッジ側側:
56+
- [Zenohのインストール](#Zenohのインストール)
57+
- [RosProxyの作成](#RosProxyの作成)
58+
59+
### 箱庭コア機能のインストール
60+
61+
箱庭コア機能の[インストール手順](https://github.com/toppers/hakoniwa-core-cpp-client?tab=readme-ov-file#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86)に従って、コア機能をインストールします。
62+
63+
1. ディレクトリ移動
64+
65+
```
66+
cd third-party/hakoniwa-core-cpp-client
67+
```
68+
69+
2. Build
70+
71+
```
72+
bash build.bash
73+
```
74+
75+
3. Install
76+
77+
```
78+
bash install.bash
79+
```
80+
81+
### Zenohのインストール
82+
83+
箱庭ブリッジが利用する Zenoh は、 [zenoh-c](https://github.com/eclipse-zenoh/zenoh-c) です。
84+
85+
`バーチャル側とエッジ側、両方にインストールする必要があります。`
86+
87+
1. ディレクトリ移動
88+
89+
```
90+
cd third-party
91+
```
92+
93+
2. Build
94+
```
95+
mkdir -p build && cd build
96+
cmake ../zenoh-c
97+
cmake --build . --config Release
98+
```
99+
100+
3. Install
101+
```
102+
cmake --build . --target install
103+
```
104+
105+
成功すると、以下のファイルが作成されます。
106+
107+
```
108+
% ls /usr/local/include
109+
zenoh.h zenoh_commons.h zenoh_concrete.h zenoh_configure.h zenoh_macros.h zenoh_memory.h
110+
```
111+
112+
```
113+
% ls /usr/local/lib
114+
libzenohc.dylib
115+
```
116+
117+
#### ShmProxyの作成
118+
119+
```
120+
cd hakoniwa-bridge/virtual
121+
```
122+
123+
```
124+
bash build.bash
125+
```
126+
127+
成功すると、以下のファイルが作成されます。
128+
129+
```
130+
% ls cmake-build/shm-proxy/shm-proxy
131+
cmake-build/shm-proxy/shm-proxy
132+
```
133+
#### RosProxyの作成
134+
135+
RosProxyを作成するためには、最初に、箱庭PDUデータとして利用すROSメッセージ定義ファイルを準備する必要があります。ここでは、簡単のため、以下の標準ROSメッセージを利用する前提で説明をします。
136+
137+
* geometry_msgs/Twist
138+
* std_msgs/Bool
139+
140+
1. ディレクトリ移動
141+
142+
```
143+
cd hakoniwa-bridge/third-party/hakonwia-ros2pdu
144+
```
145+
146+
2. 箱庭PDUデータの作成
147+
148+
今回は、ROS標準のメッセージを利用するため、箱庭PDUデータは既存のものを利用できます。
149+
もし独自のROSメッセージを利用する場合は、[こちら](https://github.com/toppers/hakoniwa-ros2pdu/tree/4c658f62b8aac986f9d6571853407d892e01b5cc?tab=readme-ov-file#%E5%89%8D%E6%BA%96%E5%82%99)の手順にしたって、作成してください。
150+
151+
152+
3. コンフィグファイルの作成
153+
154+
本ファイルは、箱庭のUnityエディタ上で`Generate`すると自動生成されるものです。Unityを利用しない場合や、利用する場合でも全てのPDUデータをエッジ側と共有しない場合等は、手動で編集する必要があります。
155+
156+
コンフィグファイルのファイル配置は以下としてください。
157+
158+
hakoniwa-ros2pdu/config/custom.json
159+
160+
161+
定義例:
162+
163+
https://github.com/toppers/hakoniwa-digital-twin/blob/main/digital/config/custom.json
164+
165+
166+
custom.jsonの定義については、[こちら](https://github.com/toppers/hakoniwa-core-cpp-client?tab=readme-ov-file#%E7%AE%B1%E5%BA%AD%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E3%82%B3%E3%83%B3%E3%83%95%E3%82%A3%E3%82%B0)を参照ください。
167+
168+
169+
170+
なお、method_typeには、SHMを必ず指定してください。
171+
また、class_nameとconv_class_nameは設定不要です。
172+
173+
174+
3. RosProxyの作成
175+
176+
以下のコマンドを実行して RosProxyのコードを生成します。
177+
178+
```
179+
bash create_proxy_ros_zenoh.bash ./config/custom.json
180+
```
181+
182+
成功すると、以下のファイルが作成されます。
183+
184+
```
185+
# ls workspace/src/hako_ros_proxy/src/gen/
186+
hako_ros_proxy_com_ros2.cpp hako_ros_proxy_com_zenoh.cpp
187+
```
188+
189+
4. RosProxyのビルド
190+
191+
```
192+
cd workspace
193+
```
194+
195+
```
196+
colcon build --packages-select hako_ros_proxy
197+
```
198+
199+
成功すると以下のログが出力されます。
200+
201+
```
202+
Starting >>> hako_ros_proxy
203+
[Processing: hako_ros_proxy]
204+
Finished <<< hako_ros_proxy [35.4s]
205+
206+
Summary: 1 package finished [36.0s]
207+
```
208+
209+
## 実行手順
210+
211+
### ShmProxy
212+
213+
ShmProxyの仕様:
214+
```
215+
Usage: ./cmake-build/shm-proxy/shm-proxy <asset_name> <config_path> <delta_time_msec> [master]
216+
```
217+
218+
ShmProxyは、箱庭コンダクタを含んでいます。もし、箱庭コンダクタを独自に起動しない場合は、`master`オプションを利用することで、箱庭コンダクタを駆動できます。
219+
220+
実行例:masterオプションを利用しない場合
221+
222+
```
223+
./cmake-build/shm-proxy/shm-proxy ShmProxy ../third-party/hakoniwa-ros2pdu/config/custom.json 20
224+
```
225+
226+
実行例:masterオプションを利用する場合
227+
228+
```
229+
./cmake-build/shm-proxy/shm-proxy ShmProxy ../third-party/hakoniwa-ros2pdu/config/custom.json 20 master
230+
```
231+
232+
### RosProxy
233+
234+
235+
```
236+
source install/setup.bash
237+
```
238+
239+
```
240+
ros2 run hako_ros_proxy hako_ros_proxy_node
241+
```

images/archtecture.png

101 KB
Loading

third-party/hakoniwa-ros2pdu

Submodule hakoniwa-ros2pdu updated 32 files

0 commit comments

Comments
 (0)