2. 使用方法¶
intdash Bridgeを使用するには、intdash Edge Agentとintdash Bridgeをインストールする必要があります。
2.1. intdash Edge Agentをインストールする¶
intdash Edge Agentは、アプトポッドのリポジトリからパッケージを取得することによりインストールします。
以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。
DISTRIBUTION、ARCHITECTUREには、以下の表から値を設定してください。
DISTRIBUTION
ARCHITECTURE
ubuntu
amd64, armhf, arm64
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ lsb-release $ curl -s --compressed \ "https://repository.aptpod.jp/intdash-edge/linux/${DISTRIBUTION}/gpg" | sudo apt-key add - $ echo "deb [arch=${ARCHITECTURE}] \ https://repository.aptpod.jp/intdash-edge/linux/${DISTRIBUTION} \ $(lsb_release -cs) \ stable" \ | sudo tee /etc/apt/sources.list.d/intdash-edge.list $ sudo apt-get update
なお、上記の手順は最新ではない可能性があります。 intdash Edge Agentのインストール方法の詳細については、 intdash Edge Agentデベロッパーガイド を参照してください。
intdash Edge Agentをインストールします。
$ sudo apt-get install intdash-edge
2.2. intdash Bridgeをインストールする¶
重要
intdash Bridge v2.0.0から、インストール時に指定するアプトポッドのリポジトリが変更されました。
intdash Bridgeをインストールするには、アプトポッドのリポジトリからパッケージを取得します。
以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。
ARCHITECTUREは intdash Edge Agentをインストールする で設定したものを使用します。
$ curl -s --compressed \ "https://repository.aptpod.jp/intdash-robotics/linux/ubuntu/gpg" | sudo apt-key add - $ echo "deb [arch=${ARCHITECTURE}] \ https://repository.aptpod.jp/intdash-robotics/linux/ubuntu \ $(lsb_release -cs) \ stable" \ | sudo tee /etc/apt/sources.list.d/intdash-robotics.list $ sudo apt-get update
使用するROSのディストリビューションに合わせてintdash Bridgeをインストールします。
$ sudo apt-get install ros-[kinetic,melodic,noetic]-intdash-bridge
2.3. intdash Edge Agentの設定を行う¶
intdash Edge Agentに、intdash Bridgeと接続するための設定を追加します。
intdash Edge Agentの設定の詳細については、 intdash Edge Agentデベロッパーガイド を参照してください。
設定ファイルmanager.conf内で、loggers(デバイスコネクター)に、intdash_bridgeを追加します。
"loggers": [
{
"devicetype": "intdash_bridge",
"path": "",
"connections": [
{
"fifo_tx": "/opt/vm2m/var/run/intdash/logger_001.tx", # (1)
"fifo_rx": "/opt/vm2m/var/run/intdash/logger_001.rx", # (2)
"channel": 1 # (3)
}, # (X)
{
"fifo_tx": "/opt/vm2m/var/run/intdash/logger_002.tx", # (1)
"channel": 2 # (3)
} # (Y)
],
"details": {
"plugin": "fifo"
}
},
...
]
上記サンプルでは、intdash Bridgeとの間で双方向の送受信を行うチャンネル1(X)と、intdash Bridgeからの受信のみを行うチャンネル2(Y)を設定しています。 このあとの設定により、チャンネル1ではintdash Bridge専用のRawバイナリ形式で送受信を行い、チャンネル2ではJSON形式で送信のみを行います。
番号 |
フィールド |
説明 |
---|---|---|
(1) |
loggers[].connections[].fifo_tx |
intdash Edge Agentがintdash Bridgeからデータを受け取るために使用するFIFOのパスです(アップストリーム用)。 任意のパスを指定してください。 このパスは intdash Bridgeの設定ファイル にも設定します。 |
(2) |
loggers[].connections[].fifo_rx |
intdash Edge Agentがintdash Bridgeにデータを渡すために使用するFIFOのパスです(ダウンストリーム用)。 任意のパスを指定してください。 このパスは intdash Bridgeの設定ファイル にも設定します。 |
(3) |
loggers[].connections[].channel |
データに付与するintdashのチャンネル番号を設定します。 |
注釈
「Rawバイナリ形式」(rawモード)について
ここで使用する「Rawバイナリ形式」は、intdash Bridge専用のバイナリ形式で、intdashサーバーを介して2つのROS空間を接続する際に適した形式です(2つのROS空間を接続する方法については、チュートリアル チュートリアルA: intdash Bridgeを使って2つのROS空間を接続する も参照してください)。 Rawバイナリ形式は、データを収集して後から利用するのには向きません。
intdash Bridgeのパラメーター設定 で、 send_mode: "raw"
を設定することにより、Rawバイナリ形式で送信することができます。
なお、Rawバイナリ形式には、topic_tools::ShapeShifterと呼ばれる、ROSの内部実装で使用されているデータ型が使用されています。
2.4. intdash Bridgeの設定を行う¶
intdash Bridgeに関する設定は、launchファイルと、パラメーター設定ファイル params.yaml
で行います。
2.4.1. launchファイルでの設定¶
intdash BridgeをROSノードとして起動するlaunchファイルを以下のように作成します。( mylaunch.launch
)
<launch>
<arg name="paramsfile" default="/opt/vm2m/etc/params.yaml" />
<group ns="intdash">
<node pkg="intdash_bridge" name="intdash_bridge"
type="intdash_bridge_node" output="screen" clear_params="true">
<param name="fifo_tx_raw" value="/opt/vm2m/var/run/intdash/logger_001.tx" /> <!-- (1) -->
<param name="fifo_rx_raw" value="/opt/vm2m/var/run/intdash/logger_001.rx" /> <!-- (2) -->
<param name="fifo_tx_json" value="/opt/vm2m/var/run/intdash/logger_002.tx" /> <!-- (3) -->
<rosparam command="load" file="$(arg paramsfile)" />
</node>
</group>
</launch>
番号 |
パラメーター名 |
説明 |
---|---|---|
(1) |
fifo_tx_raw |
intdash Bridgeがintdash Edge AgentにRawバイナリ形式のROSメッセージを渡すために使用するFIFOのパスです(アップストリーム用)。 intdash Edge Agentの設定を行う でRawバイナリ形式用のfifo_txとして設定した値を指定します。 |
(2) |
fifo_rx_raw |
intdash Bridgeがintdash Edge AgentからRawバイナリ形式のROSメッセージを受け取るために使用するFIFOのパスです(ダウンストリーム用)。 intdash Edge Agentの設定を行う でRawバイナリ形式用のfifo_rxとして設定した値を指定します。 |
(3) |
fifo_tx_json |
intdash Bridgeがintdash Edge AgentにJSON文字列形式のROSメッセージを渡すために使用するFIFOのパスです(アップストリーム用)。 intdash Edge Agentの設定を行う でJSON用のfifo_txとして設定した値を指定します。 |
2.4.2. パラメーター設定ファイル params.yaml
での設定¶
intdash Bridgeの詳しい動作は、launchファイルから参照されるパラメーター設定ファイル params.yaml
で設定します。
設定例は以下のとおりです。
outgoing
(ROS空間からintdashに向けたデータ転送、アップストリーム用)の設定と、 incoming
(intdashからROS空間に向けたデータ転送、ダウンストリーム用)の設定に分けて記載します。
outgoing:
enabled: true
buffering: false
advertise_interval: 5
max_array_size: 500
topics:
- topic_name: "/chatter"
send_mode: "raw"
queue_size: 100
- topic_name: "/cmd_vel"
send_mode: "both"
queue_size: 100
incoming:
enabled: true
queue_size: 100
suffix: ""
2.4.2.1. outgoing(ROS空間からintdashに向けたデータ転送)¶
outgoingは、ROS空間からintdashに向けたデータ転送に関する設定です。
topics
に指定されたトピックのメッセージが、intdash Edge Agentを介してintdashへ送信されます(アップストリーム)。
topics
ではトピックごとに設定を行います。
フィールド名 |
enum |
型 |
必須/オプショナル |
説明 |
---|---|---|---|---|
|
|
bool |
必須 |
outgoingの処理を有効にするかどうか。 |
|
|
bool |
オプショナル(デフォルト |
FIFOにデータを書き込む際のバッファを有効にするかどうか。なお、intdash Bridge内部では、バッファは |
|
|
number |
オプショナル(デフォルト |
トピックの定義情報を送信する間隔を指定します。 詳細については表の下の注釈を参照してください。 |
|
- |
number |
オプショナル(デフォルト |
jsonモードにおいて、配列がここで指定したサイズより大きい場合に、送信せずスキップします。 詳細については表の下の注釈を参照してください。 |
|
- |
string |
必須 |
ROS空間でサブスクライブし、intdashに送信するトピックの名前を指定します。 |
|
|
string |
必須 |
このトピックを送信する際の送信モードを指定します。 |
|
- |
string |
必須 |
ROS空間からメッセージを受け取る際にsubscriberが使用するキューの長さです。 |
注釈
トピックの定義情報の送信間隔(advertise_interval)
send_mode
が raw
の場合、データの中にトピックの定義情報が含まれますが、これは固定の情報なのでメッセージごとに送信する必要はありません。 advertise_interval
を設定することで、トピックの定義情報の送信を間引くことができます。
たとえば、 advertise_interval: 5
のように設定すると、トピックの定義情報は5秒に一度だけ送信されます。
注釈
配列の最大サイズ(max_array_size)
send_mode
が json
の場合、mapやimageなどuint8配列のデータはそのまま数値配列としてエンコードされます。
配列サイズが巨大な場合はエンコードに時間を要するため、 max_array_size
に配列のサイズを指定することにより、それよりも大きな配列をスキップすることができます。
2.4.2.2. incoming(intdashからROS空間に向けたデータ転送)¶
incomingは、intdashからROS空間に向けたデータ転送に関する設定です。 intdash Bridgeは、intdash Edge Agentを介して受け取ったメッセージ(ダウンストリーム)をすべてROS空間へパブリッシュするため、トピックごとに設定する項目はありません。
フィールド名 |
enum |
型 |
必須/オプション |
説明 |
---|---|---|---|---|
|
|
bool |
必須 |
incomingの処理を有効にするかどうか。 |
|
- |
number |
必須 |
intdash Edge Agentから受け取ったメッセージをROSにパブリッシュする際にpublisherが使用するキューの長さです。 |
|
- |
string |
必須 |
デバッグ用の設定です。本設定は空文字列で構いません。 |
2.5. intdash Edge Agentとintdash Bridgeを起動する¶
intdash Edge Agentの設定 と intdash Bridgeの設定 を完了した上で、以下の手順によりintdash Edge Agentとintdash Bridgeを起動してください。
intdash Edge Agentを起動します。
$ sudo LD_LIBRARY_PATH=/opt/vm2m/lib /opt/vm2m/sbin/intdash-edge-manager -C manager.conf
intdash Edge Agentの起動方法の詳細については、 intdash Edge Agentデベロッパーガイド を参照してください。
以下のコマンドを実行して、roslaunchによりintdash Bridgeを起動します。
$ roslaunch mylaunch.launch