🤖

[ROS2] FAST_LIO + Livox MID360で地図作る

に公開

概要

ロボカップレスキュー実機リーグに参加している者です。FAST_LIOとLIVOX MID-360を使って3D地図を作る方法についてまとめます。ネットの記事を参考にすれば簡単に動きますが、備忘録として記載します。またdockerを使わずにローカル環境で構築し、mid360のドライバをセットアップする段階からまとめます。下記の画像はこの記事を使って学校の野外で地図を作った時の写真です。

用意したもの

動作環境

  • OS: Ubuntu 22.04.3
  • ROS2 : Humble
  • PC: Thirdwave Corporation RL7C-R46-5N

1. ネットワークの設定

Livoxは通常静的IPアドレスモード(192.168.1.1XX)に設定されているのでコンピューター側もネットワーク部を合わせたIPアドレス設定を行います。

その後mid360の後ろに書かれたシリアル番号の後ろ2桁の数字を確認します。著者の環境は後ろ2桁が14でした。その後航空コネクタを用いてEthernetに接続し、ping接続を行ってください。

ping 192.168.1.114

2. Livox SDK2のインストール

cd ~
git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd ~/Livox-SDK2/
mkdir build
cd build
cmake .. && make -j4
sudo make install

3. livox_ros_driver2のインストール

公式が公開しているlivox_ros_driverでも問題ないらしいが、自分は有志が作ったドライバを使っているのでそちらをインストールする。

source /opt/ros/humble/setup.bash
mkdir -p ~/fastlio_ws/src
cd ~/fastlio_ws/src
git clone git@github.com:Ericsii/livox_ros_driver2.git -b feature/use-standard-unit
cd ..
colcon build --symlink-install

インストールが終わったら、MID360_config.jsonの変更を行う。MID360とホストPCのIPアドレスを正しく入力する。著者の環境ではホストPCが192.168.1.11でmid360が192.168.1.114であるので、次のようなファイル構成となった。

{
  "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.11",
      "cmd_data_port": 56101,
      "push_msg_ip": "192.168.1.11",
      "push_msg_port": 56201,
      "point_data_ip": "192.168.1.11",
      "point_data_port": 56301,
      "imu_data_ip": "192.168.1.11",
      "imu_data_port": 56401,
      "log_data_ip": "",
      "log_data_port": 56501
    }
  },
  "lidar_configs": [
    {
      "ip": "192.168.1.114",
      "pcl_data_type": 1,
      "pattern_mode": 0,
      "extrinsic_parameter": {
        "roll": 0.0,
        "pitch": 0.0,
        "yaw": 0.0,
        "x": 0,
        "y": 0,
        "z": 0
      }
    }
  ]
}

4. LiDARの接続テスト

livox_ros_driver2にはrviz_MID360_launch.pymsg_MID360_launch.pyの2つがあります。接続テストではrviz_MID360_launch.pyを使って表示確認を行います。

source ~/fastlio_ws/install/setup.bash
ros2 launch livox_ros_driver2 rviz_MID360_launch.py

5. FastLioのインストール

sudo apt update
sudo apt install -y libpcl-dev libeigen3-dev
cd ~/fastlio_ws/src
git clone -b ROS2 https://github.com/hku-mars/FAST_LIO.git  --recursive
cd ~/fastlio_ws
rosdep install --from-paths src --ignore-src -y
colcon build --symlink-install
source ~/fastlio_ws/install/setup.bash

6. FastLioの実行

ターミナル1

source ~/fastlio_ws/install/setup.bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py 

ターミナル2

source ~/fastlio_ws/install/setup.bash
ros2 launch fast_lio mapping.launch.py

マップ保存

ros2 service call /map_save std_srvs/srv/Trigger {}

fastlio_wsのディレクトリ上にtest.pcdが作成されます。Cloudcompareを使って開きます。

sudo apt remove cloudcompare
cd ~/fastlio_ws
cloudcompare.CloudCompare test.pcd

以上で終わりです。どなたかのお役に立てれば幸いです。

追記

大した機能ではないですが、fastlioの公式のリポジトリだとframeがcamara_initとbodyに固定されており、パラメータによる変更が実装されていません。下記のフォークしたリポジトリにパラメータとして変更できるように実装を足したのでよかったら使ってみてください。

frames:
    map_frame: "map"              # frame name of the map (world coordinate frame)
    base_frame: "base_footprint"  # frame name of the base (robot base frame)

https://github.com/NuTech-R/FAST_LIO

参考

https://www.sato-susumu.com/entry/fast_lio
https://zenn.dev/koide3/articles/144e97133234e2
https://qiita.com/porizou1/items/827d596acae993a61290

NuTech-R (長岡技術科学大学)

Discussion