ROSでVelodyne LiDARを運用する際の設定


Velodyne使用時に困ってたこと

Velodyne LiDARのROSドライバーを使用しVelodyne LiDARを運用していた際,個人的に詰まってしまったことのメモ書きです.

使用環境

OS Ubuntu 16.04
kernel 4.15
ROS kinetic
Velodyne-ros ros-kinetic-velodyne
Velodyne LiDAR VLP-16-HiRes

LiDARを角度変換したときの点群がおかしい

Velodyne LiDAR VLP-16-HiRes(以下VLP-16-HiRes)を角度変換できる雲台に設置し,角度を変えながらの運用を試みたところ,以下の問題が発生しました.
以下の画像は,VLP-16-HiResで取得した点群データをrvizで可視化したものです.

VLP-16-HiResの角度が水平のとき

VLP-16-HiResの角度をピッチ角に45 deg傾斜させたとき

2枚目の画像は,VLP-16-HiResをピッチ角に45 deg角度変換したときの点群データです.斜めに表示されているのは床を捉えた点群データです.正しく3次元座標を計測できていれば,床の点群は水平に表示されているはずです.

原因:キャリブレーションファイル設定の不備

原因としては,キャリブレーションファイルを指定する設定に不備がありました.
Velodyne LiDARは,LiDARと一緒にUSBが付属されており,USBの中にLiDARのキャリブレーションデータが.yamlファイルで入れられています.
このキャリブレーションデータはLiDARの型式によって異なり,同じVLP-16でも通常版と高解像度版(HiRes)で違うキャリブレーションデータを使用する必要があります.

角度変換時に点群データの角度がおかしくなるのは,VLP-16-HiRes(VLP-16の高解像度版)を使用しているにも関わらず,VLP-16のキャリブレーションデータを用いていたことが原因でした.

ROSドライバーでVelodyne LiDARを運用する場合の,キャリブレーションデータの設定方法ですが,velodyne_pointcloudパッケージ内のlaunchファイルを編集することで設定します.

例えば,VLP-16系列を動かす場合,VLP16_points.launchを編集します.
launchファイル内のcalibrationに使うLiDARに適したキャリブレーションデータのパスを指定します.

VLP16_points.launch
1 <!-- -*- mode: XML -*- -->
2 <!-- run velodyne_pointcloud/CloudNodelet in a nodelet manager for a VLP-16 -->
3
4 <launch>
5
6 <!-- declare arguments with default values -->
7 <arg name="calibration" default="<ここに適したキャリブレーションデータのパスを設定>"/>
8 <arg name="device_ip" default="" />
9 <arg name="frame_id" default="velodyne" />
....

これで,角度変換をしても点群データの座標が適切に取得されるようになりました.