2. 使用方法

2.1. intdash Edge Agentとintdash Bridgeをインストールする

intdash Bridgeを使用するには、intdash Edge Agentとintdash Bridgeをインストールする必要があります。

intdash Edge Agentとintdash Bridgeは、アプトポッドのリポジトリからパッケージを取得することによりインストールします。

  1. 以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。

    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
    
  2. intdash Edge Agentをインストールします。

    $ sudo apt-get install intdash-edge
    
  3. 使用するROSのバージョンに合わせてintdash Bridgeをインストールします。

    $ sudo apt-get install ros-[kinetic,melodic,noetic]-intdash-bridge
    

2.2. 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.3. intdash Bridgeの設定を行う

intdash Bridgeに関する設定は、launchファイルと、パラメーター設定ファイル params.yaml で行います。

2.3.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.3.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.3.2.1. outgoing(ROS空間からintdashに向けたデータ転送)

outgoingは、ROS空間からintdashに向けたデータ転送に関する設定です。 topics に指定されたトピックのメッセージが、intdash Edge Agentを介してintdashへ送信されます(アップストリーム)。 topics ではトピックごとに設定を行います。

フィールド名

enum

必須/オプショナル

説明

enabled

truefalse

bool

必須

outgoingの処理を有効にするかどうか。

buffering

truefalse

bool

オプショナル(デフォルト false

FIFOにデータを書き込む際のバッファを有効にするかどうか。なお、intdash Bridge内部では、バッファは setvbuf 関数により設定されます。

advertise_interval

0 : メッセージごとに送信、 n : n秒ごとに送信

number

オプショナル(デフォルト 0

トピックの定義情報を送信する間隔を指定します。 詳細については表の下の注釈を参照してください。

max_array_size

-

number

オプショナル(デフォルト 500

jsonモードにおいて、配列がここで指定したサイズより大きい場合に、送信せずスキップします。 詳細については表の下の注釈を参照してください。

topics[].topic_name

-

string

必須

ROS空間でサブスクライブし、intdashに送信するトピックの名前を指定します。

topics[].send_mode

raw: Rawバイナリで送信、 json: JSON文字列で送信、 both: RawバイナリとJSON文字列双方で送信

string

必須

このトピックを送信する際の送信モードを指定します。

topics[].queue_size

-

string

必須

ROS空間からメッセージを受け取る際にsubscriberが使用するキューの長さです。

注釈

トピックの定義情報の送信間隔(advertise_interval)

send_moderaw の場合、データの中にトピックの定義情報が含まれますが、これは固定の情報なのでメッセージごとに送信する必要はありません。 advertise_interval を設定することで、トピックの定義情報の送信を間引くことができます。 たとえば、 advertise_interval: 5 のように設定すると、トピックの定義情報は5秒に一度だけ送信されます。

注釈

配列の最大サイズ(max_array_size)

send_modejson の場合、mapやimageなどuint8配列のデータはそのまま数値配列としてエンコードされます。 配列サイズが巨大な場合はエンコードに時間を要するため、 max_array_size に配列のサイズを指定することにより、それよりも大きな配列をスキップすることができます。

2.3.2.2. incoming(intdashからROS空間に向けたデータ転送)

incomingは、intdashからROS空間に向けたデータ転送に関する設定です。 intdash Bridgeは、intdash Edge Agentを介して受け取ったメッセージ(ダウンストリーム)をすべてROS空間へパブリッシュするため、トピックごとに設定する項目はありません。

フィールド名

enum

必須/オプション

説明

enabled

truefalse

bool

必須

incomingの処理を有効にするかどうか。

queue_size

-

number

必須

intdash Edge Agentから受け取ったメッセージをROSにパブリッシュする際にpublisherが使用するキューの長さです。

suffix

-

string

必須

デバッグ用の設定です。本設定は空文字列で構いません。

2.4. intdash Edge Agentとintdash Bridgeを起動する

intdash Edge Agentの設定intdash Bridgeの設定 を完了した上で、以下の手順によりintdash Edge Agentとintdash Bridgeを起動してください。

  1. 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デベロッパーガイド を参照してください。

  2. 以下のコマンドを実行して、roslaunchによりintdash Bridgeを起動します。

    $ roslaunch mylaunch.launch