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
注釈
この章は前章のチュートリアルから独立しており。この章のチュートリアルのみを実施することが可能です。
6.1. 送信側エッジを準備する¶
送信側の環境に、 使用方法 の手順に従ってintdash Edge Agentおよびintdash Bridgeをインストールしてください。 その上で、以下のように設定を行います。
6.1.1. ROSノードを設定する¶
以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します
$ mkdir -p ~/catkin_ws/src
ワークスペース内に、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
ビルドを実行します。
$ cd ~/catkin_ws/ $ sudo rosdep install --from-paths src --ignore-src -y $ catkin_make
画像変換に必要なGStreamerプラグインをインストールします。
$ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
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_secret
とmy_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用のデータ設定が必要です。
Data Visualizer画面左側の[Data Settings]( )をクリックします。
[Add Group]をクリックします。
New Data Groupが追加されます。
New Data Groupの[Add Data]をクリックします。
データポイントをH.264型データとして扱うための設定をします。
Data Name: 分かりやすい任意の名前
Target Data:
Data Type:
VIDEO(H.264,JPEG)
Data ID:
VIDEO
Channel:
1
[OK]をクリックし、[x]をクリックして、元の画面に戻ります。
以上で、データ設定の準備は完了です。
6.3. Data Visualizerでビジュアルパーツを配置する¶
Data Visualizer上にVideo Playerを配置します。
Data VisualizerでH.264用のデータ設定を準備する で作成した設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。
ライブモードになっていることを確認し( アイコンがピンク色)、 をクリックして、表示を開始します。
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動画が表示されれば成功です。