6. チュートリアルD: 画像のROSメッセージをH.264に変換してData Visualizerで表示する

このチュートリアルでは、画像データのROSメッセージをH.264に変換してintdashサーバーに送信し、Visual M2M Data Visualizer(以下Data Visualizer)で可視化します。

H.264動画として可視化可能なROSメッセージは以下のとおりです:

  • sensor_msgs/Image

  • sensor_msgs/CompressedImage

注釈

この章は前章のチュートリアルから独立しており。この章のチュートリアルのみを実施することが可能です。

../_images/intdas-bridge-data-visualizer-h264.ja.png

図 17 画像データのROSメッセージをH.264に変換してData Visualizerで表示

6.1. 送信側エッジを準備する

送信側の環境に、 使用方法 の手順に従ってintdash Edge Agentおよびintdash Bridgeをインストールしてください。 その上で、以下のように設定を行います。

6.1.1. ROSノードを設定する

  1. 以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します

    $ mkdir -p ~/catkin_ws/src
    
  2. ワークスペース内に、gscam (ROS Camera driver for GStreamer-based video streams) をダウンロードします。

    $ cd ~/catkin_ws
    $ cd src/
    $ git clone https://github.com/ros-drivers/gscam
    $ cd gscam
    $ sed -e "s/EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1$/EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1 -DGSTREAMER_VERSION_1_x=On/" -i Makefile
    
  3. ビルドを実行します。

    $ cd ~/catkin_ws/
    $ sudo rosdep install --from-paths src --ignore-src -y
    $ catkin_make
    
  4. 画像変換に必要なGStreamerプラグインをインストールします。

    $ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
    
  5. launchファイル( ~/catkin_ws/sender.launch )を作成し、画像送信ノードとintdash_bridgeノードの起動を以下のように設定します。

    パラメーター fifo_tx_h264_1 では、intdash Bridgeからintdash Edge Agentにデータを渡すためのFIFO(logger_001.tx)を設定しています。

    sender.launch

    <launch>
       <arg name="WIDTH" default="640"/>
       <arg name="HEIGHT" default="480"/>
       <arg name="FPS" default="1/1"/>
       <arg name="PUBLISH_FRAME" default="false"/>
       <arg name="aptpod_camera_name" default="/sensors/image_raw" />
       <node ns="v4l" name="gscam_driver_v4l" pkg="gscam" type="gscam" output="screen">
          <param name="camera_name" value="default"/>
          <param name="gscam_config" value="videotestsrc pattern=smtpe75 ! video/x-raw,format=YUY2,width=$(arg WIDTH),height=$(arg HEIGHT),framerate=$(arg FPS) ! videoconvert"/>
          <param name="frame_id" value="/v4l_frame"/>
          <param name="sync_sink" value="true"/>
          <remap from="camera/image_raw" to="$(arg aptpod_camera_name)"/>
       </node>
    
       <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="$(env INTDASH_EDGE_ROOT)/opt/vm2m/var/run/intdash/logger_200.tx" />
             <param name="fifo_rx_raw" value="$(env INTDASH_EDGE_ROOT)/opt/vm2m/var/run/intdash/logger_200.tx" />
             <param name="fifo_tx_json" value="$(env INTDASH_EDGE_ROOT)/opt/vm2m/var/run/intdash/logger_201.tx" />
             <param name="fifo_tx_h264_1" value="$(env INTDASH_EDGE_ROOT)/opt/vm2m/var/run/intdash/logger_001.tx" />
             <rosparam command="load" file="$(arg paramsfile)" />
       </node>
       </group>
    </launch>
    

6.1.2. 送信側intdash Edge Agentを設定する

intdash Edge Agentの設定ファイルmanager.confで、以下のように設定します。

主な設定内容:

  • 送信側エッジの認証情報(クライアントシークレット)とUUID( my_secretmy_id

  • intdashサーバーのホスト名+ドメイン名(FQDN) ( host )

  • intdash Bridgeからデータを受け取るFIFO( logger_001.tx を使用し、チャンネル1を付与)

注釈

旧来のエッジの認証情報(トークン)を使用する場合は、 my_secret の代わりに my_token をご使用ください。

manager.conf

{
   "manager":{
      "workdirs":[
         "/opt/vm2m/var/lib/intdash/meas",
         "/opt/vm2m/var/run/intdash"
      ],
      "rawdir":"/opt/vm2m/var/lib/intdash/raw",
      "meas_root":"/opt/vm2m/var/lib/intdash/meas",
      "basetime":"/opt/vm2m/var/run/intdash/basetime",
      "stat":"/opt/vm2m/var/run/intdash/manager.stat",
      "system_stat":"/opt/vm2m/var/run/intdash/system.stat",
      "process_stat":"/opt/vm2m/var/run/intdash/process.stat",
      "wwan_stat":"/opt/vm2m/var/run/intdash/wwan.stat",
      "filters":[]
   },
   "clients":[
      {
         "protocol":"mod_websocket.v2",
         "type":"realtime",
         "my_secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
         "my_id":"XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
         "connection":{
            "host":"xxxxxxx.intdash.jp",
            "path":"/api/v1/ws/measurements"
         },
         "fifo_rx":"/opt/vm2m/var/run/intdash/client_realtime.rx",
         "fifo_tx":"/opt/vm2m/var/run/intdash/client_realtime.tx",
         "path":"/opt/vm2m/sbin/intdash-edge-client",
         "stat":"/opt/vm2m/var/intdash/client_realtime.stat",
         "fast_net_check_cmd":"/opt/vm2m/bin/intdash-edge-networkd.sh -q -t"
      },
      {
         "protocol":"mod_http",
         "type":"resend",
         "my_secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
         "my_id":"XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
         "connection":{
            "host":"xxxxxxx.intdash.jp",
            "path":"/api/v1/measurements"
         },
         "fifo_rx":"/opt/vm2m/var/run/intdash/client_resend.rx",
         "fifo_tx":"/opt/vm2m/var/run/intdash/client_resend.tx",
         "path":"/opt/vm2m/sbin/intdash-edge-client",
         "stat":"/opt/vm2m/var/run/intdash/client_resend.stat",
         "fast_net_check_cmd":"/opt/vm2m/bin/intdash-edge-networkd.sh -q -t"
      }
   ],
   "loggers":[
      {
         "devicetype":"intdash_bridge",
         "path":"",
         "connections":[
            {
               "fifo_tx":"/opt/vm2m/var/run/intdash/logger_001.tx",
               "channel":1
            }
         ],
         "details":{
            "plugin":"fifo"
         }
      }
   ]
}

6.1.3. 送信側intdash Bridgeを設定する

intdash Bridge用パラメーター設定ファイル( /opt/vm2m/etc/params.yaml )を以下のように作成します。

ここでは、トピック "/sensors/image_raw"を、h264モードでintdashに送信するように設定しています。

params.yaml

outgoing:
  enabled: true
  buffering: false
  advertise_interval: 5
  max_array_size: 500
  topics:
  - topic_name: "/sensors/image_raw"
    send_mode: "h264_1"
    queue_size: 100
    pipeline : "\
      videoconvert ! \
      videorate ! \
      video/x-raw,framerate=5/1 ! \
      x264enc ! \
      video/x-h264, stream-format=byte-stream ! \
      queue ! \
      h264parse ! \
      queue ! \
      appsink name=appsink emit-signals=true"

incoming:
  enabled: false
  queue_size: 100
  suffix: ""

h264モードを指定したことにより、ROSメッセージは以下のようなデータポイントとしてintdashサーバーに送信されます。

  • データタイプ: H.264

  • データID: 0x0 0x1 0x8

  • チャンネル: 1

6.2. Data VisualizerでH.264用のデータ設定を準備する

H.264をData Visualizerで可視化するためには、H.264用のデータ設定が必要です。

  1. Data Visualizer画面左側の[Data Settings]( data-settings )をクリックします。

  2. [Add Group]をクリックします。

    ../_images/data-viz-add-group.png

    図 18 グループの追加

    New Data Groupが追加されます。

  3. New Data Groupの[Add Data]をクリックします。

    ../_images/data-viz-add-data.png

    図 19 データの追加

  4. データポイントをH.264型データとして扱うための設定をします。

    • Data Name: 分かりやすい任意の名前

    • Target Data:

      • Data Type: VIDEO(H.264,JPEG)

      • Data ID: VIDEO

      • Channel: 1

    ../_images/data-viz-jpeg-setting.png

    図 20 データ設定

  1. [OK]をクリックし、[x]をクリックして、元の画面に戻ります。

以上で、データ設定の準備は完了です。

6.3. Data Visualizerでビジュアルパーツを配置する

  1. Data Visualizer上にVideo Playerを配置します。

    ../_images/video-player-visual-part.png

    図 21 Video Player

  2. Data VisualizerでH.264用のデータ設定を準備する で作成した設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。

    ../_images/bind-data-h264.png

    図 22 送信側エッジを選択し、表示したいデータを選択する

  3. ライブモードになっていることを確認し( live-mode アイコンがピンク色)、 play をクリックして、表示を開始します。

6.4. メッセージの送信を開始する

ワークスペースで setup.bash を実行することによりワークスペースの設定を有効にし、 roslaunch により画像送信ノードと送信側intdash Bridgeを起動します。

$ cd ~/catkin_ws
$ source devel/setup.bash
$ roslaunch sender.launch

別のターミナルで、以下のコマンドを実行してintdash Edge Agentを起動します。

$ sudo LD_LIBRARY_PATH=/opt/vm2m/lib /opt/vm2m/sbin/intdash-edge-manager -C manager.conf

Data Visualizerに、送信側エッジからのH.264動画が表示されれば成功です。

../_images/h264.png

図 23 Video Playerでの画像の表示