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

用意したもの
- Livox MID360
- Livox 3線式航空コネクター
- マキタ18Vバッテリーアダプター
- Amass XT60
- マキタ18Vバッテリー
MID360の動作電圧が9〜27vなのでバッテリー直挿しで使っていますが、今の所問題になったことないです。また端子はXT60を使っています。必要に応じてはんだ付け作業を行ってください。
動作環境
- 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.pyとmsg_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)
参考
NuTech-Rは長岡技術科学大学のレスキューロボット開発チームです。レスキューロボットの競技会を通じてロボットの社会実装を目指して活動しています。sites.google.com/view/nutechr/home
Discussion