Abudoriです。今回は3D LiDARをROS 2で動かせる準備をします。 高性能なSLAMやLocalization、周辺の環境認識をするには3D LiDARが非常に強力です。 今回はVelodyneの16ラインセンサのVLP-16、HESAIの32ラインセンサのPandar XT32をROS 2でトピック通信で使用できるまで準備を行います。
この記事はつくちゃれ2024の記録の一部です。 この記事の続きやロボットの他の実装などはこちらにツリーとしてリンクを貼っております。ぜひご覧ください。
スポンサードリンク
VLP-16とPandar XT32
それぞれの外観です。ただの自慢です。いいでしょ〜。早く触ってみましょう。
Velodyne LiDAR VLP-16
HESAI LiDAR Pandar XT32
LiDARを接続する
VLP-16はEhternetケーブルで接続し、PCとはネットワークで接続します。USBケーブルさして終わりではありません。以下のような繋がり方があります。
・直接1対1で繋げる
Ethernetケーブルをパソコンに直接繋げる方法です。今回のように、センサの動作確認や小規模のロボットでは、この繋ぎ方で十分です。
・ルータを介してロボット内でLANを形成する
Ethernetケーブルをパソコンと直接繋ぐのではなく、ルータに繋ぎます。 ロボットにルータを搭載していれば、ロボット内で複数のパソコンや複数のセンサ同士で通信することができます。 また、ROS 2では、LANの中に所属するだけでトピック通信ができるため、ロボットにルータが搭載されていると拡張性が高く便利です。
ただ、WiFiルータのWiFi接続だとうまくいきません。接続もできるし、正常に動作しますが、速度が出ません。10HzでPointCloudが出てくるはずなのに、0.5~1Hzくらいで間欠に情報が飛んでくるといったことが発生します。
パソコンを増やした場合
センサを増やした場合
ロボット前方を3D LiDAR1に、ロボット後方を3D LiDAR2に設定し、2つのLiDARのセンサ値を合算してSLAMをするといったことが実現します。
図
有線Ethernetケーブルで接続したあとには、ネットワーク設定をしましょう。 有線Ethernet接続の設定から、IPv4の設定をします。画像のように手動IPに設定し、アドレスを“192.168.1.100”、サブネットを“255.255.255.0”に設定しましょう。 WiFi接続は別で設定がありますから、この変更を適用しても影響はありません。通常のインターネット検索はそちらで自動的に接続されます。もし、有線ネットワークでインターネット接続をしている場合は、ルータ側の設定をセンサに合わせるか、センサのIPアドレスをルータに合わせる必要があります。
今回紹介するセンサはどちらも192.168.1.201でアクセスされるため、同じ操作でどちらも動作することができます(老舗のVelodyneに他のセンサが倣ったという方が正しいですが…)。
3D LidarをROS 2で動かしてみよう
ROS 2はインストールされている状態から始めます。インストール方法はこちらをご覧ください。
Humbleインストール
Velodyne を動かしてみる
VLP-16をコンピュータと接続します。ここでは、1対1で接続します。 上記では、1対1の接続とロボット内でLANを形成する接続を紹介しましたが、ソフトウェアとしては操作に代わりありません。
VelodyneのROSパッケージはaptパッケージマネージャで配布されているためapt installするだけで環境が手に入ります。
sudo apt-get install ros-humble-velodyne
別のROSディストリビューションの方は、ros-distro-velodyneの“distro”の部分を変えてください。
ROSパッケージを実行します。
ros2 launch velodyne velodyne-all-nodes-VLP16-launch.py
この状態でトピックは出ているのですが、確認したいのでRViz2でみてみましょう。
新しい端末で
rviz2
Velodyneのトピックを見るために、FixedFrameを“velodyne”に、ByTopicからvelodyne_pointsを選択して表示させます。
うまくいけばこのような画面になっているはずです。
Pandar XT32 を動かしてみる
Pandar XT32をコンピュータと接続します。これも、1対1で接続します。 上記では、1対1の接続とロボット内でLANを形成する接続を紹介しましたが、ソフトウェアとしては操作に代わりありません。
colcon_ws/srcに移動してソースコードを利用します。 HESAI社が提供する公式のリポジトリはこちら
まずは、依存パッケージをインストールします。 必要なものはBoostライブラリとyamlです。最近のUbuntuであれば最初から入っていそうですが、念のため確認しましょう(こういうところで確認を怠るといつかコケる日がやってきます笑)。
sudo apt update sudo apt install libboost-all-dev sudo apt install libyaml-cpp-dev
次にビルドします。 colcon_ws/src/内で次のコマンドを入力してリポジトリのソースをクローンします。
git clone --recurse-submodules https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0.git
ここで注意が、--recurse-submoduesを必ず入れることです。Audoriはなにも考えずにこのページの.gitファイルをクローンすればええんやろ!とクローンしてビルドできませんでした笑。
なぜうまく行かないかというと、src/driver/内にHesaiLidar_SDK_2.0がリンクで埋め込まれているからです。--recurse-submoduesを入れるとリンク先のコードを自動的に再帰的にクローンしてくれます。
次に、colcon_ws/srcからcolcon_wsに移動して、ビルドをします。
colcon build --symlink-install
--symlink-installをいれれば、他のパッケージがたくさんあるときにはビルド時間が短縮されます。
ビルドが終われば実行します。
ros2 launch hesai_ros_driver start.py
このとき、hesai_...で補間が効かなかったり、not foundになったりする方は、colcon_wsでビルドしたパッケージのバイナリファイルのアクセスパスを入れられてないかもしれません。 以下のコマンドを.bashrcに入れましょう。
colcon_ws/install/setup.bash
これを入れるには、適当なテキストエディタで~/.bashrcで追記しましょう。
ノードを立ち上げます。以下のコマンドを入力します。
ros2 launch hesai_ros_driver start.py
実行すると、RViz2ごと起動し、見ることができます。
Abudoriは--recurse-submoduesをつけずに、自分でSDKをコピペしてました。なんとビルドは通るけど、センサデータが全く出力されない…と30分ほど悩みました笑。
人の話を聞いていなかった。。。
— あぶどり@AbudoriLab. (@abudori_imgproc) 2024年7月15日
SDKは付属していないけど必要なので、Hesai_Driver_SDKを別でDLしてdriversディレクトリにコピーしなきゃだめなのか。コンパイラくんに教えてもらわないとわからんぞこれ
スポンサードリンク
3D LiDARを活用しよう
一旦記事はここまでにします。複数台のLiDARを使用したり、TF2の設定をしたりするのは、またの機会に書くかもです。
ROS 2のトピックで出力さえされてしまえば、SLAMパッケージを持ってきてお試ししたり、PCLを使って何かを分析することがすぐできるようになります。 みなさまも、楽しい3Dライフを!
新手法、3D SLAMのGLIMを試します。次の記事に続きます。