Velodyne VLP-32C を ros2 humble で動かした話
この記事は VLP-32C を購入した話と ros2 humble で動作させるまでにハマったことを中心に書きます.
背景
eBay でセンサを眺めていたら結構安めの金額で VLP-32C が販売されていたので入札してみたことが始まりでした.
思ったよりも競争相手がおらず,すんなりと購入できてしまいました.
ちなみに,金額は送料込みで7万円ほどでした.
購入から手元に届くまでの日程は以下の感じでした.
- 12/10 落札
- 12/12 発送
- 12/19 Global Shipping Center
- 12/26 成田空港
- 12/28 到着
買えてしまったので,せっかくだし使うかといったノリで始めました.
自分の LiDAR 使用歴は Hokuyo 2D LiDAR や VLP-16 などを大学生時代にすこし触っていた程度です.
コネクタをつくろう
購入した VLP-32C は M12M という型番がついており,以下のような interface box が付属していない種類になります.
以下が interface box のマニュアル
コネクタなどの付属品がないものを購入したためコネクタを作るところから始まります.
コネクタのピン配置
どんなピン配置で配置されているのかわからないため,とりあえず調べました.
その結果見つかったのが以下の3つほど
これらすべてはそもそも VLP-32C でない上に以下のようにピンの順番が異なっていました.
これは型番が違うものであると思われます.
ただ,VLP-32C だと配線はどれにすればよいのかいまいち見つけれませんでした.
そのため Velodyne にお問い合わせしてみましたが,年末で稼働していないようでした.
なので,velodynelider.com って書いてあるPDFのピン配置信用してみました.(博打)
つくってみた
電源は安定化電源を使用するものとして,以下の感じでコネクタが完成しました.
(いろいろ雑なのは愛嬌ということにしてください)
部品は全て Amazon で購入して合計2500円行かないくらいでした.
もしコネクタの配線図や購入元が知りたい場合は連絡ください.(整理するのがめんどうなので割愛)
使用した部品リスト
2022/12/30追記
- DCケーブル 2.5mm 5.5mm
https://amzn.asia/d/1aLMytP - RJ45
https://amzn.asia/d/gnXR6uR - M12 8pin
https://amzn.asia/d/gZXergh - 2 set ワンタッチコネクタ
https://amzn.asia/d/cWosXMU
動作確認
ros2 humble で以下のパッケージをインストールしました.
$ sudo apt install -y \
ros-humble-velodyne \
ros-humble-rviz2
以下のコマンドで VLP-32C と通信して点群情報に変換できます.
$ ros2 launch velodyne velodyne-all-nodes-VLP32C-launch.py
結果点群が得られていることが確認できました.
IPアドレスに関して,ここまで気にせずに動いたので購入した VLP-32C はデフォルトの 192.168.1.201/24
だったようです.
本格的に運用する際には,送信先がマルチキャストとして設定されているので,Host(Destination)のIPアドレスを送信先に設定するようにしましょう.
これをやらないと,ネットワークの負荷が大きくなります.
この設定は.192.168.1.201
など LiDAR に設定したIPアドレスをブラウザに入力することで変更できます.
長時間の動作確認
ここまで動いたし,1時間くらいはつけっぱにしても動くでしょと思って,つけっぱにしてご飯を作っていました.
しかし,以下のようなメッセージが表示されパケットの受信が止まっていました.
[velodyne_driver_node-1] [WARN] [1672224797.011575573] [velodyne_driver_node]: Velodyne poll() timeout
[velodyne_driver_node-1] [WARN] [1672224798.012182336] [velodyne_driver_node]: Velodyne poll() timeout
[velodyne_driver_node-1] [WARN] [1672224799.012246262] [velodyne_driver_node]: Velodyne poll() timeout
[velodyne_driver_node-1] [WARN] [1672224800.013302712] [velodyne_driver_node]: Velodyne poll() timeout
[velodyne_driver_node-1] [WARN] [1672224801.014111601] [velodyne_driver_node]: Velodyne poll() timeout
[velodyne_driver_node-1] [WARN] [1672224802.014433407] [velodyne_driver_node]: Velodyne poll() timeout
コネクタも自作したし,電源もいろいろあやしいし心当たりしかなかったわけです.
とりあえず現状の把握として,再現するか実験してみました.
このときの接続方法は,VLP-32C <--> PC で静的IPアドレスで接続しています.
結果として,3分おきにネットワークのリンクがダウンしていることがわかりました.
ネットワーク系っぽかったのでとりあえずjournalctl
とかみてみると,NetworkManagerが3分おきにDNSにIPアドレスの問い合わせをしているようでした.
これは,こちらのネットワーク設定がよろしくないために起きているので,電気系のトラブルでなく安心しました.
対策として,DHCPを停止するのが必要っぽいです.
ただ出来ることなら静的なIPアドレスだったり動的なIPアドレスだったりを繰り返したいポートでした.
しらべてみると,netplan renderer をNetworkManager
からnetworkd
に変更すると都合が良いようでした.
ちょっと,ここは知見がないので設定して様子を見てみることにします.
netplan rederer をNetworkManager
からnetworkd
に変更したところ,3時間ほど連続運転してもパケットが途切れることはなくなりました.
Discussion