3K Views
July 14, 25
スライド概要
OpenCVではじめよう ディープラーニングによる画像認識、OpenCVプログラミングブックの中の人(の一人).Computer Vision/OpenCV/GPGPU/ROS/AR/インタラクティブアート/ニコニコ技術部
第52回ロボティクス勉強会 Livox Mid-360をROS 2で使いこなす @dandelion1124
自己紹介 ● 吉村康弘( @dandelion1124) ○ 専門はロボティクス、コンピュータビジョン、ソフトウェア高速化 ○ OpenCVコントリビューター ■ ○ OpenCV書籍執筆 ● https://gihyo.jp/book/2022/978-4-297-12775-6 2023年10月よりサイバーエージェント AI Labで人物行動理解に関する研究に従事 dandelion1124 atinfinity
Mid-360とは LiDARのオススメ5選-2024年 - arutema47's blog から引用 10万を切る LiDARながら、 360°水平スキャンと干渉回避機能を持った コスパお化けです。 ハイエンドLiDARに比べればノイズは少し大きいですが、 一般使用には問題ない範囲です。 ロボティクスから3Dスキャンまで多用途に 使えると思います。 [1] https://www.livoxtech.com/jp/mid-360
Mid-360データ取得例
Mid-360のスペック[2] 項目 値 検知範囲 40 m @ 10% reflectivity 70 m @ 80% reflectivity FOV(deg) Horizontal: 360° Vertical: -7°~52° フレームレート 10 Hz (typical) ブラインドエリア 0.1 m Data Port 100 BASE-TX Ethernet [2] https://www.livoxtech.com/jp/mid-360/specs
Mid-360のスペック 垂直方向の FOVが広い [3] [3] https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/Livox/Livox_Mid-360_User_Manual_EN.pdf
Mid-360のスペック[2] 項目 値 IMU Built-in IMU Model: ICM40609 IP Rating IP67 幅 × 奥行 × 高さ(mm) 65 × 65 × 60 重量 265 g 消費電力 6.5 W (average) Power Supply Voltage Range 9 ~ 27 V DC [2] https://www.livoxtech.com/jp/mid-360/specs
PCとの接続例[3] 電力供給 PCとの接続は Ethernet経由 [3] https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/Livox/Livox_Mid-360_User_Manual_EN.pdf
座標系[3] Livoxロゴがある向きが X軸の正方向 反対側にコネクタ(オス)がある [3] https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/Livox/Livox_Mid-360_User_Manual_EN.pdf
Mid-360本体のIPアドレス ● 初期出荷時は静的 IPアドレスが設定されている ○ 本体に貼られているシリアルNoから静的IPアドレスがわかる[4] Livox Mid-360は、静的IPアドレスモードのみ対応しています。 すべてのLivox Mid-360 LiDARセンサーは、初期設定で静的 IPアドレスモード (IPアドレス 192.168.1.1XX)に設定されます。 (XXは、Livox Mid-360 LiDAR センサーのシリアル番号の末尾 2桁です)。 ● Livox Viewer 2からIPアドレスを変更できる ○ https://github.com/Livox-SDK/livox_ros_driver2/issues/135 参照 [4] https://dl.djicdn.com/downloads/Livox/Mid-360/QSG/Livox_Mid-360_Quick_Start_Guide_multi.pdf
アクセサリ ● Livox 3線式航空コネクター [5] ○ 電力供給、データ通信のためのコネクター ○ 自作する人は以下のページが参考になる ■ https://qiita.com/Nyanziba/items/0c3cf779da7fa0b3f9ae ■ https://www.sato-susumu.com/entry/mid360_cable 電力供給 コネクタ(メ ス) 電力供給 [5] https://store.dji.com/jp/product/livox-three-wire-aviation-connector?vid=117441 コネクタ(メ ス)
アクセサリ ● Livox AC電源アダプター [6] ○ Livox(Avia/Mid-70/Tele-15)用なのでジャックサイズが異なる ■ Mid-360に使うときは変換アダプタを使うとよい ■ ジャックサイズは5.5mm x 2.5mm 変換アダプタ Power Cable [6] https://store.dji.com/jp/product/livox-ac-power-adapter?vid=50121 Power Cable
電力供給 ● USB PD給電 ○ USB PD給電する際は https://zenn.dev/koide3/articles/144e97133234e2 が参考になる
ビューア ● Livox Viewer 2がhttps://www.livoxtech.com/downloads で配布されている ● Windows、Linux版がある
ドキュメント ● マニュアルは https://www.livoxtech.com/downloads からダウンロードできる。よ く読むであろうドキュメントは以下の2つ。 ■ Mid-360 User Manual ■ Mid-360 Quick Start Guide ● 公式Wikiページは以下にある。中国語版の方が情報が多い。 ○ https://livox-wiki-cn.readthedocs.io/zh-cn/latest/ ○ https://livox-wiki-en.readthedocs.io/en/latest/
ファームウェア更新 ● Livox Viewer 2を使ってMid-360本体のファームウェア更新が可能 ● ファームウェアの更新履歴は https://www.livoxtech.com/jp/mid-360/downloads の「Livox Mid360 Release Notes」参照 ○ 高速化、バグ修正の更新が入っているので要チェック ● 本発表時点の最新ファームウェアの更新内容は以下の通り
購入 ● DJI Store ○ https://store.dji.com/jp/product/livox-mid-360?vid=130851 ● 株式会社光響(正規代理店) ○ https://www.symphotony.com/lidar/livox/mid-360/ ○ https://x.com/kokyolidars
FAQ 公式FAQは https://www.livoxtech.com/jp/mid-360/faq 参照。 この中からいくつかをピックアップして紹介。
FAQ 時刻同期 Q. Which time synchronization methods are supported by Livox Mid-360? A. There are two ways to synchronize data with the Mid-360: IEEE 1588-2008 (PTP v2) and GPS. 直射日光が差し込む環境で使えるか Q. Can I use Livox Mid-360 in direct sunlight? A. Yes. Livox Mid-360 is unaffected by bright-light environments, while maintaining noise at a low level.
FAQ 内蔵IMUについて Q. Is Livox Mid-360 designed with a built-in IMU? What is the model? A. Mid-360 comes with a built-in IMU, and the model is ICM40609, in which the measurement range of the accelerometer and gyroscope is ±4 g and ±2000 Deg/s respectively. Users can turn on or off the switch for pushing IMU data through Livox Viewer 2 or SDK. When the switch is enabled, Mid-360 starts to push IMU data at a frequency of 200 Hz.
FAQ 入力電圧 Q. Are there any requirements on the input voltage for Livox Mid-360? A. The working voltage range of Mid-360 is from 9 V to 27 V, and the Mid-360 has a working power of 6.5 W when working normally. The maximum startup power can reach 18 W (which lasts for about 8 seconds). データのバンド幅 Q. What is the data bandwidth of the Livox Mid-360 point cloud? A. The maximum data bandwidth is 2.8 Mbps.
SDK ● 公式SDK ○ https://github.com/Livox-SDK/Livox-SDK2 ■ 名前が似ている https://github.com/Livox-SDK/Livox-SDK は Mid-360をサポートしていないので注意(下図参照) ○ 公式SDKには以下の問題がある ■ Ubuntu 22.04以降のデフォルトのコンパイラでビルドできない ■ READMEにあるビルド手順だと Releaseビルドになっていない
SDK ● 筆者改造版 ○ https://github.com/atinfinity/Livox-SDK2 ○ 以下の変更が入っている ■ ビルドエラー修正 ■ READMEにあるビルド手順をReleaseビルドに
SDK ● コンフィグファイル ○ よく使う設定項目に絞って紹介 パラメータ名 内容 host_net_infoのxxx_xxx_ip ホストのIPアドレス
SDK ● コンフィグファイル ○ よく使う設定項目に絞って紹介 パラメータ名 内容 lidar_configs/ip Mid-360本体のIPアドレス。 複数台キャプチャする場合は複数列挙。
ROS 2ドライバ ● 公式ROS 2ドライバ ○ https://github.com/Livox-SDK/livox_ros_driver2 ○ 名前が似ている https://github.com/Livox-SDK/livox_ros2_driver は Mid-360をサポートしていないので注意 ○ 公式ROS 2ドライバにはいくつか問題点がある ■ ROS 1、ROS 2両対応のパッケージ構成になっていて、ビルド手順、コードが煩 雑 ■ colcon buildでビルドできない ■ ビルド用スクリプトがビルド前に過去のビルド中間生成物を削除するので毎回 フルビルドが必要 ■ 公式READMEの手順だとReleaseビルドになっていない
ROS 2ドライバ ● 筆者改造版 ○ https://github.com/atinfinity/livox_ros_driver2 ○ 以下の変更が入っている ■ ROS 1コードを削除してコードを簡略化 ■ ROS 2 Humble、Jazzy対応 ● https://github.com/atinfinity/livox_ros_driver2/tree/humbl e ● https://github.com/atinfinity/livox_ros_driver2/tree/jazzy ■ colcon buildできるように ■ ビルド手順をReleaseビルドに ■ コンフィグファイルからframe_idを設定できるように(詳細は後述)
ROS 2ドライバ ● トピック仕様 トピック名 メッセージタイプ /livox/lidar sensor_msgs/msg/PointCloud2 /livox/imu sensor_msgs/msg/Imu
ROS 2ドライバ ● コンフィグファイル ○ よく使う設定項目に絞って紹介 パラメータ名 内容 publish_freq キャプチャレート。デフォルトは 10Hz。 最大100Hzまで指定可能。 multi_topic LiDARデバイスごとにトピックを分けるか。 0:同一トピック 1:デバイスごとにトピックを分ける 備考 multi_topic=1の場合、トピック名 にIPアドレスが付与される 例: /livox/lidar_192_168_1_111 /livox/imu_192_168_1_111
ROS 2ドライバ ● コンフィグファイル ○ よく使う設定項目に絞って紹介 パラメータ名 内容 xfer_format 0:Livox pointcloud2(PointXYZRTLT) pointcloud format 1:Livox customized pointcloud format 2:Standard pointcloud2 (pcl :: PointXYZI) frame_id トピックのframe_id 備考 筆者改造版固有のパラメータ
ROS 2ドライバ ● 出力点群フォーマット ○ PointXYZRTLT形式 次ページ参照 [7] https://github.com/Livox-SDK/livox_ros_driver2/blob/master/README.md#32-livox-ros-driver-2-internal-main-parameter-configurationinstructions
ROS 2ドライバ ● 出力点群フォーマット ○ PointXYZRTLT形式[7] ■ tagとは? ● ざっくり言うと、マルチエコー情報、ノイズ情報が格納されていて、この情 報を使ってノイズ除去(埃、雨など)に使える ● 詳細は LiDAR Class | How to use Tag Information in Livox LiDAR Point Cloud 参照 ● ただし、この情報だけでうまく消せないことがあるので空間的な情報を使 うのがよい ● autoware_livox_tag_filter というノイズ除去パッケージがある
ROS 2ドライバ ● 出力点群フォーマット ○ Livox customized pointcloud形式(CustomMsg.msg) 次ページ参照
ROS 2ドライバ ● 出力点群フォーマット ○ Livox customized pointcloud形式(CustomPoint.msg)
ROS 2ドライバ ● 出力点群フォーマット ○ Livox customized pointcloud形式 ■ livox_ros_driver2::msg::CustomMsgから sensor_msgs::msg::PointCloud2に変換するパッケージが公開されてい る ● https://github.com/porizou/livox_to_pointcloud2/blob/mai n/src/livox_to_pointcloud2.cpp ● 気になる方は 【ROS2】LiDARで取得したlivox独自形式データを PointCloud2形式に変換してみた - 佐藤百貨店 参照
ROS 2ドライバ ● 出力点群フォーマット ○ pcl :: PointXYZI形式 ■ PCLで定義されている形式 ● https://pointclouds.org/documentation/structpcl_1_1_poin t_x_y_z_i.html ■ 点毎にX, Y, Z, Intensityが格納されている
Tips:複数台接続 ● Mid-360本体のIPアドレスを調べる ○ 本体に貼られているシリアル番号を確認する、Livox Viewer 2から確認するなど ● frame_idの不具合に対する修正を適用する ○ 複数台同時にキャプチャしたとき、トピックのframe_idが同一になる不具合がある ■ 同一のframe_idだとどのLiDARで取得したデータか見分けられず、結合する ときに困る ○ そのため、公式ROS 2ドライバを使う場合はLivox-SDK/livox_ros_driver2#85 を取り込む必要あり ○ 筆者改造版はこの修正適用済
Tips:複数台接続(注意点) ● LiDAR #1 LiDAR #2 configファイルのカスタム ○ 個人的には複数台接続するときは multi_topic=1にすることを強く推奨 ■ multi_topic=0にするとこうなる(イメージ図) ● ドライバがよしなに結合してくれるわけではなく、デバイスそれぞれのタイ ミングでトピックが配信される ● なぜかtopic名、frame_idが同一なので結合できずに詰む /livox/lidar /livox/lidar /livox/lidar /livox/lidar /livox/lidar /livox/lidar /livox/lidar /livox/lidar
Tips:点群を結合する ● 複数のPointCloud2を結合するROS 2パッケージ ○ https://github.com/atinfinity/pointcloud_concatenate_ros2 ○ 主要なパラメータは以下の通り。 パラメータ名 説明 clouds 結合元の点群トピック数 target_frame 結合後の点群の frame_id cloud_out 結合後の点群トピック名
Tips:点群を結合する ● 複数のPointCloud2を結合するROS 2パッケージ ○ https://github.com/atinfinity/pointcloud_concatenate_ros2 ○ 結合結果の例を以下に示す(左:結合前、右:結合後)
Tips:DDSチューニング(Cyclone DDS) 3D点群はデータ転送量が多くなりやすいため、 DDSチューニングをした方がよい。 ● 1. ネットワーク設定 ○ /etc/sysctl.d/10-cyclonedds.confに以下の記述をし、OSを再起動する。 net.core.rmem_max=2147483647 net.core.rmem_default=2147483647 net.core.wmem_max=2147483647 net.core.wmem_default=2147483647 net.ipv4.ipfrag_time=3 net.ipv4.ipfrag_high_thresh=134217728 [8] https://autowarefoundation.github.io/autoware-documentation/main/installation/additional-settings-for-developers/network-configuration/dds-settings/
Tips:DDSチューニング(Fast DDS) 3D点群はデータ転送量が多くなりやすいため、 DDSチューニングをした方がよい 。 ● 1. ネットワーク設定 ○ /etc/sysctl.d/10-fastdds.conf に以下の記述をし、OSを再起動する。 net.core.rmem_max=2147483647 net.core.rmem_default=2147483647 net.core.wmem_max=2147483647 net.core.wmem_default=2147483647 net.ipv4.ipfrag_time=3 net.ipv4.ipfrag_high_thresh=134217728 [8] https://autowarefoundation.github.io/autoware-documentation/main/installation/additional-settings-for-developers/network-configuration/dds-settings/
Tips:DDSチューニング(Fast DDS) 3D点群はデータ転送量が多くなりやすいため、 DDSチューニングをした方がよい。 ● 2. コンフィグファイル作成 ○ https://github.com/TheGoncaloSilva/middleware_test/blob/main/p ublisher/src/DEFAULT_FASTRTPS_PROFILES.xml の内容を記述した $HOME/fastdds.xmlを作る。
Tips:DDSチューニング(Fast DDS) 3D点群はデータ転送量が多くなりやすいため、 DDSチューニングをした方がよい。 ● 3. 作成したコンフィグファイルの有効化 ○ $HOME/.bashrcに以下の記述を追記し、今回作成したコンフィグファイルを参照 するようにする。 ○ 追記後、ターミナルを開き直す。 export FASTRTPS_DEFAULT_PROFILES_FILE=$HOME/fastdds.xml export RMW_FASTRTPS_USE_QOS_FROM_XML=1
Tips:GLIMを動かす ● 1. コンフィグファイル入手 ○ https://koide3.github.io/glim/demo.html からconfig_versatile.tar.gzを ダウンロードする ● 2. コンフィグファイル編集 ○ config/livox/config_ros.json で以下の変更をする ■ 変更前 ● "points_topic": "/livox/points", ■ 変更後 ● "points_topic": "/livox/lidar",
Tips:GLIMを動かす ● 3. GLIM実行 ros2 run glim_ros glim_rosbag <ROSBAG2_PATH> --ros-args -p config_path:=$HOME/config/livox
Tips:nav2_amclを動かす ● 広域だとslam_toolboxでループがうまく閉じず、地図が歪むことがある ○ 歪んだ地図を使って自己位置推定をすると自己位置推定精度が落ちる(それはそ う)
Tips:nav2_amclを動かす ● GLIMで得られた3D点群から占有格子地図作成 ○ GLIMで得られた3D点群だと歪みが少ない ○ この3D点群地図から占有格子地図に変換 ○ この地図を使うとnav2_amclでも十分安定 [6] https://github.com/atinfinity/pointcloud_to_2dmap
Acknowledgment 本研究は、JSTムーンショット型研究開発事業、JPMJMS2011の支援を受けたものです。
参考URL ● https://proc-cpuinfo.fixstars.com/2023/01/livox-mid360-ros1-ros2/ ● https://qiita.com/porizou1/items/827d596acae993a61290 ● https://fastriver.dev/2024/12/08/mid360-teardown/ ● https://qiita.com/Nyanziba/items/0c3cf779da7fa0b3f9ae ● https://www.sato-susumu.com/entry/mid360_cable ● https://www.sato-susumu.com/entry/livox_to_pointcloud2 ● https://www.sato-susumu.com/entry/connect_mid360 ● https://zenn.dev/koide3/articles/144e97133234e2 ● https://aru47.hatenablog.com/entry/2024/10/26/222214