livox_mappingを動かすまでの手順(livox mid-70)_Ubuntu 20.04 ROS Noetic

memo

やろうとしていることの概要

Livox社のLiDAR「mid-70」を用いて、3Dスキャナ的なもの(ハンディレーザースキャナ)を作ろうと考えた。LiDARを設置して計測する場合(設置型レーザースキャナ的な使い方をする場合)、Livox社の動作確認用ソフトであるLivox Viewerで事足りる。が、設置型にした場合、計測範囲の死角を埋めるために複数個所から計測し、点群の位置合わせと合成を行う必要がある(面倒)。そこで計測装置一式を手に持って周囲を計測できるようなシステム(ハンディレーザースキャナ)を作ろうと考えた。

本記事では、ROSの勉強とLiDAR(mid-70)の動作確認を兼ねて、LiDARの点群だけでSLAM(自己位置推定と周囲の計測)をやってくれるプログラム「livox_mapping」を動かすまでの手順を検討し、まとめたものを記す。

なお、mid-70のスペックで重要な部分を強調しておくと、計測可能な距離は90m(反射率10%)、FOVが70度(円形)、10万点/秒(※1)で計測可能である(※2)。また、Livox社のLiDARはDJIストアでも購入可能だが、在庫が切れていることが多いため正規代理店である光響から買うのもオススメである(※3)。どの機種・どんな機材(電源など)を買うべきか、などについては別記事にていずれまとめたいと思う。

※1:ここでいう「秒」は、角度でなく時間のこと。
※2:別途所有しているRiegl社のレーザースキャナLMS-Z620のは超高精度&10倍遠くまで計測できるが、1万点/秒しか計測できない
※3:価格が「問い合わせ」でちょっと手を出しづらい感があるが、自分が買ったときはちょうどセールをやっていたのでDJIストア(在庫なし)から買うよりも安かった。

前提条件

ここでは、Raspberry Pi 4 model B (Ubuntu 20.04)にROS Noeticを入れて、Livox mid-70を使ってlivox_mappingを使用するために実行した手順を示す。よって本記事では、ユーザー名はRaspberry PiのデフォルトであるPiとして各種操作を実行した事例を示すので、本記事を参考に同じ操作を実行する際は、ユーザー名やディレクトリ名については各自の環境に合わせて適宜読み替える必要がある点に注意が必要である。
なお、Raspberry PiにUbuntu 20.04を入れる手順や、USBフラッシュメモリなどを使用したポータブルなUbuntu環境の構築手順などについては、別途記事で説明する。

ROSのインストール

基本的に以下のページの通りの手順で、ROSをインストールする。
qiita.com/H-Ando-robo/items/2502043c3701e270818e

ROS Noeticのインストール

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo rosdep init
rosdep update
mkdir -p ~/catkin_ws/src
cd catkin_ws/
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

ROSのインストール確認

こちらも以下のページの通り。
qiita.com/H-Ando-robo/items/2502043c3701e270818e

echo $ROS_PACKAGE_PATH
roscore

(参考)何故か日本語入力できなかったときの対策:ubuntuで日本語入力できるようにする

基本的に、日本語対応版のUbuntu 20.04を入れていれば以下の手順を実行する必要はないが、インストール時のネットワークに問題があったりなんかすると以下の手順を実行しないと日本語が入力できなくなったりするっぽい?

sudo apt autoremove ibus-mozc
sudo apt install ibus-mozc

livox-mapping実行までの手順

こちらは基本的に以下の資料を参考に実施する。ただし、こちらの資料はおそらくROS Melodicを対象としており、ROS Noeticの場合そのままではうまく動作しないところがあったので、本記事はその辺が差分となる。
www.h.chiba-u.jp/lab/gmet/media/Livox_SLAMのインストール.pdf

依存関係のパッケージをインストール

参考資料に記載のコマンドも一通り記載しているが、不要なものはその旨記載している。

sudo apt install libpcl-dev※不要
sudo apt install cmake※不要
cd
git clone https://gitlab.com/libeigen/eigen.git
sudo apt-get install libopencv-dev python3-opencv※不要

cd
sudo apt install cmake※不要
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install

cd
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src
cd ws_livox
catkin_make
source ./devel/setup.sh

livox-mappingのインストール

cd
mkdir -p catkin_ws/src
cp -r ~/ws_livox/src/livox_ros_driver ~/catkin_ws/src/
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_mapping.git
cd ..
catkin_make※エラーが出る

※以下のようなエラーを含め、2つほど要修正点がある。次以降のセクションの通り修正する必要がある。

/home/pi/catkin_ws/src/livox_mapping/src/laserMapping.cpp:39:10: fatal error: opencv/cv.h: そのようなファイルやディレクトリはありません

エラーの修正①:opencv関連

「/home/pi/catkin_ws/src/livox_mapping/src」にある
「laserMapping.cpp」「scanRegistration.cpp」「scanRegistration_horizon.cpp」の3つのファイルにおいて、「#include <opencv/cv.h>」を「#include <opencv2/opencv.hpp>」に直す。

エラーの修正②:camera_init関連

上記の修正を行った後catkin_makeを行うと、今度はこんなエラーが出る。

[ERROR] [1686097831.328476455]: Error transforming odometry 'Odometry' from frame '/camera_init' to frame 'camera_init'

「laserMapping.cpp」において、「/camera_init」を、「camera_init」に修正する(先頭の「/」をとる)。修正箇所は以下の5か所
405行目: odomAftMapped.header.frame_id = “camera_init”;
1120行目: laserCloudSurround3.header.frame_id = “camera_init”;
1126行目: laserCloudSurround3_corner.header.frame_id = “camera_init”;
1144行目: laserCloudFullRes3.header.frame_id = “camera_init”;
1174行目: br.sendTransform( tf::StampedTransform( transform, odomAftMapped.header.stamp, “camera_init”, “/aft_mapped” ) );

catkin_makeの再実行

以下の通り、catkin_make以降の手順を再実行する。

catkin_make※もう一度やり直す、多分うまく行く
source ~/catkin_ws/devel/setup.bash

保存場所の設定

参考資料の通り、点群ファイル保存場所の設定やSLAMの詳細設定を行う。が、なんだかうまくいかない。とりあえず意図しない場所ではあるが後述する方法でbagファイルの保存ができたので、ここの作業はまあいいか。

点群ファイル保存場所の設定:
mkdir /home/<ユーザー名>/testfiles
 ~/catkin_ws/src/livox_mapping/launch/mapping_mid.launchを開き、9行目を変更
<param name=“map_file_path” type=“string” value="/home/<ユーザー名>/testfiles" />

SLAMの詳細設定:~/catkin_ws/src/livox_ros_driver/launch/livox_lidar.launchを開く
◆ 11行目を変更
<arg name="rosbag_enable" default="true"/>
◆ 39行目を変更
<node pkg="rosbag" type="record" name="record" output="screen"args="-a -O /home/<ユーザー名>/testfiles/test.bag"/>


IPアドレスの変更

livoxのLidarと通信するため、PCのIPアドレス設定を行う。基本的にLivox社のマニュアル通りに実行すればよい。ここでは、Mid-70のデフォルト設定で、PCとMid-70を直接接続した場合のIPアドレス設定の例を示す。以下の画像の通り、「IPv4」タブでIPアドレスを「手動設定」、PCのIPアドレスを「192.168.1.50(50の部分はLidarと重複しなければなんでもいい)」、ネットマスクを「255.255.255.0」、ゲートウェイを「192.168.1.1」とした。

IPアドレスの設定例

実行

以上でlivox_mappingを実行する環境が整ったので、いよいよ実行する。

ログデータ(rosbag)を記録しながら実行する場合

rosbagを記録しておくことで、リアルタイム処理時のセンサーの生データ的なものを記録して、後から処理をやり直したりできるらしい。例えば、処理能力の低いコンピュータでrosbagを記録して、処理能力の高いコンピュータで後から処理しなおす、なんていうときに便利そう。

roslaunch livox_mapping mapping_mid.launch
roslaunch livox_ros_driver livox_lidar.launch rosbag_enable:="true"

ログデータ(rosbag)を再生して実行する場合

以下のコマンドで、上記の手順で取得したrosbagを用いて処理をやり直せるらしい。しかも、再生速度を指定したりなんかできるようなので、例えば0.5倍速で再生することで本来ならリアルタイム処理が追い付かない程度のへぼいコンピュータで無理やり処理をさせるなんてこともできそう。

roslaunch livox_mapping mapping_mid.launch
rosbag play .bag -r 0.5

以上。

コメント