2台以上のvelodyneを同時に接続する方法


2つ以上のvelodyneを同時に起動した場合どうするのか.
この疑問を解決するためにインターネットの深淵まで覗いてきたので備忘録として方法を書いていこうと思います.
ちなみに1台をつなぐ場合はこの記事 (https://qiita.com/Takayamashi/items/970b232e732f5675f6be) をご覧ください.

といってもこのissue (https://github.com/ros-drivers/velodyne/issues/108) を読めば全部わかるでしょうが...
ちなみに今回説明するのはVLP16を2台使用する方法ですが,複数台のときも少し工夫するだけでOKです.

環境はUbuntu16.04,ROS kineticです.

概要

まず2台以上velodyneを接続する際に重要なことは各機のIPアドレス等の設定(velodyne側の設定)とROS側の設定です.慣れていない方はROSでセンサを使う際にROS側の設定とセンサ側の設定をごっちゃにしてしまって難しいように感じてしまうかと思いますが,ここをきちんと分けて考えていきましょう.
というわけでまずは2台のvelodyneを接続する方法を考えていきましょう.

velodyne側の設定

まずvelodyne側のIPアドレスが被ってしまいますと同時には接続できません.
というわけで以下が設定です.

Sensor 1:
Network Address 192.168.1.201
Network Mask 24 (255.255.255.0)
Network Gateway 0.0.0.0
Host Address 192.168.1.100
Data Port 2368
Telemetry Port 8308

Sensor 2:
Network Address 192.168.2.201
Network Mask 24 (255.255.255.0)
Network Gateway 0.0.0.0
Host Address 192.168.2.100
Data Port 2268
Telemetry Port 8208

基本的に変更するのはNetwork AddressとHost Address,Portの部分ですね.このあたりを変えておくことでそれぞれを別のvelodyneだと認識してくれます.

そして次はvelodyneとPC間の接続の設定です.

Ethernet connection 1 (Sensor 1との接続):
Address 192.168.1.100
Mask 24 (255.255.255.0)
Gateway 0.0.0.0

Ethernet connection 2 (Sensor 2との接続):
Address 192.168.2.100
Mask 24 (255.255.255.0)
Gateway 0.0.0.0

これでvelodyne側の設定は完了です.
ここまできてブラウザでSensor 1, 2のIPアドレスを入力するとvelodyneの設定画面が出てくるかと思います.

ROSの設定

さて次にROSの設定です.
前回はROS側の設定は行わなかったですが今回は一緒にやっていきましょう.といっても最終目標はトピックを複数起動する用のlaunchファイルを作るだけです.
まずvelodyneのドライバをインストールしちゃいましょう.

velodyneドライバのインストール
sudo apt-get install ros-VERSION-velodyne

これをインストールするだけで今回作成するlaunchファイルを使うには十分なんですが,せっかくなんでvelodyne関係のworkspaceを作成してまとめておきましょう.

workspaceの作成とmake
mkdir -p catkin_ws/src
cd ~/catkin_ws/src/ && git clone https://github.com/ros-drivers/velodyne.git
cd .. && rosdep install --from-paths src --ignore-src --rosdistro YOURDISTRO -y
catkin_make

次にこのworkspaceの ~/catkin_ws/src/velodyne/velodyne_pointcloud/launch 内に以下のファイルを作成しましょう.

multiVLP16.launch
<launch>

  <!-- calibration file path -->
  <arg name="velodyne_calib" default="$(find velodyne_pointcloud)/params/VLP16db.yaml"/>

<group ns="vlp_1">

    <include file="$(find velodyne_pointcloud)/launch/VLP16_points.launch">
      <arg name="calibration" value="$(arg velodyne_calib)"/>
      <arg name="device_ip" value="192.168.1.201"/>
      <arg name="frame_id" value="vlp201"/>
      <arg name="port" value="2368"/>
    </include>
</group>

<group ns="vlp_2">
    <include file="$(find velodyne_pointcloud)/launch/VLP16_points.launch">
      <arg name="calibration" value="$(arg velodyne_calib)"/>
      <arg name="device_ip" value="192.168.2.201"/>
      <arg name="frame_id" value="vlp202"/>
      <arg name="port" value="2268"/>
    </include>
</group>

</launch>

これでROS側の設定は完了です!!

起動

velodyneの接続を行った後以下のコマンドでROSのトピックを発信しましょう.

ROSトピックの発信
source ~/catkin_ws/devel/setup.bash
roslaunch velodyne_pointcloud multiVLP16.launch

これでrviz等で複数トピックを閲覧できるようになっているかと思います!!
3台以上接続したいときは新しいvelodyneのIPアドレスとポートの変更, multiVLP16.launch の編集を同様に行うと大丈夫です!!

参考文献