Velodyne VLP-16を使って、部屋の中で自動運転用のマップを作成してみる。
台車
計測用に台車を作ってみた。
(※最終的にはモーターを付けて走らせる予定)
Velodyneのnodeを起動
方法1. AutowareのUIで
ARMのSensingタブでVLP-16をクリックする。
points_rawトピックでデータが流れてくる。
方法2. ROSコマンドで
$ roscore&
$ roslaunch velodyne_pointcloud VLP16_points.launch &
$ rosnode list
$ rostopic echo /velodyne_points //データが来ているのが分かる
velodyne_pointsトピックでデータが流れてくる。
ROSBAGで記録
方法1. AutowareのUIで
ROSBAGボタンをクリック。
方法2. ROSコマンドで
$ rosbag record -a //すべてのノードを記録
$ rosbag record -O vlp-16.bag /velodyne_points //ファイル名を指定してVelodyneノードのみ記録
vlp-16.bagファイルが生成される。
注:記録中はRVizで見ながらゆっくり移動させる。
ポイントクラウドへ
- 記録したbagファイルを再生し、一時停止。
- Computiongタブのndt_mappingのチェックボックスにチェックを入れる。
- .bagファイルの一時停止を解除。しばらくして再度一時停止する。
- Computiongタブのndt_mappingの、appボタンからポップアップを開き、保存先を指定して「PCD OUTPUT」ボタンを押す。
- .pcdファイルが生成される。
※参考:https://project.nikkeibp.co.jp/mirai/jusk1906/day3.pdf
topic名が「points_raw」でないと、pcdファイルに記録されないようなので、
「velodyne_points」で記録した場合は、topic名を下記で転送する。
https://qiita.com/misoragod/items/6d9ce990eb19c105dd96#3d-map%E4%BD%9C%E6%88%90
$ rosrun topic_tools relay /velodyne_points /points_raw
ちなみに、参考PDFにあるndt_mapping.rvizは見つけることができなかった。
$ find ./ -name ndt_mapping.rviz
// ヒットしない。
作成したマップの確認
RVizで確認する。ARMのMapタブで、TFを押した上で、Rvizボタンから起動すると下記のように表示された。
設定値について
狭い場所や室内のマップでは、Computing>ndt_mappingで、minimum Scan rangeを0.25などに設定
各種エラーについて
下記のようなエラーが出るときがあった。
// TF指定がされていない場合
For frame [velodyne]: No transform to fixed frame [world]. TF error: [Lookup would require extrapolation into the past. Requested time 1609378636.168447000 but the earliest data is at time 1609383678.572532467, when looking up transform from frame [velodyne] to frame [world]]
// MapタブのTFが定義されてない場合
Global Status:Error
Fixed Frame [world] does not exist
// Velodyne座標がWorld座標とリンクしていない場合
Points Raw:
Status: Error
For frame [velodyne]: Fixed Frame [world] does not exist
// Velodyne座標がWorld座標とリンクしていない場合
For frame [velodyne]: No transform to fixed frame [world]. TF error: [Could not find a connection between 'world' and 'velodyne' because they are not part of the same tree.Tf has two or more unconnected trees.]
// Minimum_range
For frame [velodyne]: No transform to fixed frame [world]. TF error: [Lookup would require extrapolation into the future. Requested time 1609686391.451981000 but the latest data is at time 1609686288.021054000, when looking up transform from frame [velodyne] to frame [world]]
https://qiita.com/dendensho/items/959c6d510593546f4020
これはうまくできなかった。
rosrun tf static_transform_publisher 0 0 0 0 0 0 map frame 100
フレーム/TFのリンク方法
座標系を、world→map→base_link(車両)→velodyne とリンクさせてあげる必要がある。
- world→map:MapタブでTFを押す
- map→base_link:Computingタブでndt_mappingを押す
- base_link→velodyne:SettingタブでTFを押す
TFツリーを可視化して確認
$ rosrun tf view_frames
このコマンドを打つことで、ツリー構造図がPDF出力され分かりやすい。