2023年9月15日金曜日

LIVOX MID360のpoint cloudをros2で表示


背景

MID360とは、横360度、縦52 ~ -7度の点群を取れるLidar(レーザー距離測定装置)です。
ドローンで有名なDJIの Open innovation program を通して出来たLivoxという会社が作っています。

前回ネットワークの設定を施してpingを通しました。
今回はLivoxのドライバやros2のプログラムを動かすときに詰まったことを共有します。

使ったもの

  • Ubuntu22.04にros2 humbleをインストールしたノートPC
  • MID360
  • Livox 3線式航空コネクタ
    何とケーブルが別売りです
  • USB 有線LANアダプタ
    amazonで買いました
  • 12V DC電源
    電源です。
    MID360は9から27Vの入力で動くので、24Vでも良いです。
  • DCジャックスクリュー端子台
    はんだ付けせず、ねじ留めでDCジャック対応ケーブルにできる変換装置です
  • ワイヤストリッパー(ニッパーやハサミでも可)とねじ回し
    ケーブルの被覆を向いて端子台を固定します。

接続

MID360にケーブルを繋ぎ、12V電源と通信相手を接続します。


12Vを繋いでも動かないことがありますが、その場合は一度12Vを外して繋ぎ直すと動きます。
電源の出力を上回る突入電流を要求し、不足したら起動が失敗することがあるのだと思います。

前回の記事を参考にpingを通してください

pingでMID360を認識できた環境を使います。
LIVOX MID360にubuntuからUSB有線LANドングル経由でpingを通す

この記事の接続設定はこちらです
接続元のノートPC 192.168.1.5
接続先のLidar MID360: 192.168.1.168

Livox SDK2をインストール

記事を書いている時点ではlivox_ros_driver2を動かすにはLivox SDK2が要るので、まずはLivox SDK2をインストールします。
手順は公式のREADMEを参照にしました。

gitprojectsの中にSDKのコードを配置してビルドしてインストールするコマンドを共有します。
sudo apt install git cmake
mkdir ~/gitprojects
cd ~/gitprojects
git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd Livox-SDK2
mkdir build
cd build
cmake .. && make
sudo make install

公式の手順では「make -j」でmakeしていますが、利用しているPCだとメモリが不足するのかmakeが落ちてビルド出来なかった(その後ビルドを試みても最後の統合処理でエラーになる)ので「-j」無しで実施しました

livox ros driver2をビルド

livox_ros_driver2のREADMEに従いダウンロードしてビルドします。
Livox SDK2は先程でインストールしたので飛ばします。

ダウンロードしてビルドしたコマンドを共有します。
cd ~/ros2/humble/ws_livox
git clone https://github.com/Livox-SDK/livox_ros_driver2.git
cd ~/ros2/humble/ws_livox/livox_ros_driver2

source /opt/ros/humble/setup.sh
./build.sh humble

ビルドが済んだらsetupファイルを読み込みます。
この読み込みはros2を起動する度に必要です。
source ~/ros2/humble/install/setup.bash

livox ros driver2の設定ファイルの接続元と接続先のIPを変更

ros driver2のビルドで生成されるinstallフォルダ内にpoint cloudプログラムの設定ファイルが出来ます。

~/ros2/humble/install/livox_ros_driver2/share/livox_ros_driver2/config/MID360_config.json
{
"lidar_summary_info" : {
"lidar_type": 8
},
"MID360": {
"lidar_net_info" : {
"cmd_data_port": 56100,
"push_msg_port": 56200,
"point_data_port": 56300,
"imu_data_port": 56400,
"log_data_port": 56500
},
"host_net_info" : {
"cmd_data_ip" : "192.168.1.5",
"cmd_data_port": 56101,
"push_msg_ip": "192.168.1.5",
"push_msg_port": 56201,
"point_data_ip": "192.168.1.5",
"point_data_port": 56301,
"imu_data_ip" : "192.168.1.5",
"imu_data_port": 56401,
"log_data_ip" : "",
"log_data_port": 56501
}
},
"lidar_configs" : [
{
"ip" : "192.168.1.12",
"pcl_data_type" : 1,
"pattern_mode" : 0,
"extrinsic_parameter" : {
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0,
"x": 0,
"y": 0,
"z": 0
}
}
]
}

この設定ファイルには接続元(この記事ではノートPC)のIPが192.168.5として、接続先LidarのIPが192.168.12として記載されいるため、point cloudを意図通りに表示するには環境に合わせて書換えが必要です。

この記事を試している環境ではLidarを接続している192.168.1.*のネットワークはPCが192.168.1.5、Lidarが192.168.1.168なので、下記のように書換えます。

~/ros2/humble/install/livox_ros_driver2/share/livox_ros_driver2/config/MID360_config.json の書換え内容
「192.168.1.5」の4箇所は、PCのIPが「192.168.1.5」なのでそのまま維持(それ以外なら書換えててください)
「192.168.1.12」の1箇所はLidarに合わせて「192.168.1.168」に変更

書換えた設定ファイルを利用してpoint cloudを表示

下記コマンドでros2とlivox_ros_driver2を有効化してMID360のpoint cloudを表示できます。
source /opt/ros/humble/setup.sh
source ~/ros2/humble/install/setup.bash
ros2 launch livox_ros_driver2 rviz_MID360_launch.py


おわり

前回pingを通したMID360のpoint cloudをros2を利用して表示できました。
Livox SDKのmakeで「-j」を付けてビルドするとPCによってはビルドが失敗することと、point cloud実施のためにPCとLidarのIPを設定ファイルに反映させる必要があったのが詰まりどころでした。

参考

ライブラリのリポジトリです。
Livox-SDK2
livox_ros_driver2

livoxのプログラム構成が変わってインストールコマンドは古くなって動きませんでしたが、インストールより後の書換えやコマンドは参考になった記事です。
Livox Mid-360をROS1/ROS2で動かしてみた

0 件のコメント :