【Unitree Go2】Mid360でSLAMを実行する

初めに


本記事では、オプションのMid360版を用いたSLAMの方法を案内します。
今回はFAST-LIOというものを使っていきます。

 

環境


環境は、次のようなものを想定しています。

  • 機種: Go2 R&D+(Edu+)(AIR/PROではないもの)
  • 付属LiDAR:Mid-360

※FAST-LIOはかなり重いので、Orin NXで行うことを前提とします。

 

1.mid360のip設定


【Unitree Go2】Mid360を動かしてみる
の1の項を見て、接続設定をします。

本記事では、下記のような設定として進めますが、IPアドレスが異なる場合は適宜置き換えて読み進めてくだされば問題ありません。

  • Mid360 IP:192.168.123.20
  • Docking Staion IP:192.168.123.18

 

2.FAST-LIOの導入


本記事では、FAST-LIOというSLAMアルゴリズムを用いた方法を解説します。
これは(おそらく)foxyに対応していませんので、dockerを用いたhumble環境をセットアップしていきます。

2-1. ネット接続

Docking Stationをネット接続します。
【Unitree Go2】Docking Station のインターネット接続方法

2-2. livox_ros_driver2とFAST-LIOのダウンロード

livox_ros_driver2とFAST-LIO(とdocker file)がまとめられたgitリポジトリ(https://github.com/Taeyoung96/FAST_LIO_ROS2)があったので、これを使います。ただ、これはAMD系対応のものなので、弊社でARMで使えるように修正しました。(https://github.com/TechShare-inc/FAST_LIO_ROS2
これをDocking Stationの適当な場所にダウンロードします。

$ git clone https://github.com/TechShare-inc/FAST_LIO_ROS2 --recursive
2-3. dockerイメージの作成

まず、nvidia-docker2のインストールします。

$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker

その後、dockerイメージを作成します。

$ cd /path/to/FAST_LIO_ROS2/docker
$ docker build -t fast-lio-ros2:latest .

※かなり時間がかかります

2-4. dockerコンテナの作成

コンテナを作成する際に、実行している様子の表示をNoMachine上で行えるようにするために、この時点でNoMachineから接続しGUI上のterminalからコンテナの作成を行います。
参考:【Unitree Go2】NoMachineでDocking StationのGUIを使う

$ cd /path/to/FAST_LIO_ROS2/docker
$ ./container_run.sh fast-lio-ros2 fast-lio-ros2:latest

これでdockerコンテナが作成されました。

※2024/11/5追記
最新のdockerをインストールすると下記のようなエラーが発生します。これはnvidia-dockerというコマンドが認識されていないためです。
この場合、nvidia-dockerではなく、シンプルにdokcerを使って同じように進めていただければ問題ありません。
参考:修正後のcontainer_run.shファイル

$ ./container_run.sh fast-lio-ros2 fast-lio-ros2:latest
Current working directory: /home/unitree/FAST_LIO_ROS2
./container_run.sh: line 24: nvidia-docker: command not found
2-5. コンパイル

コンパイルの前に、Mid360のipアドレスを修正します。
LiDAR IPと受け取り側のIPを設定します。

次にコンパイルします。

# cd ~/ros2_ws/src/livox_ros_driver2
# ./build.sh humble

これで、livox_ros_driver2とFAST-LIOの両方がコンパイルされました。

 

3.実行


3-1. livox_ros_driver2の実行

下記のように行うことで、MID360の点群取得をdocker/humble環境で行えます。

$ docker exec -it fast-lio-ros2 bash
# . install/setup.bash
# ros2 launch livox_ros_driver2 rviz_MID360_launch.py

※下記のようなエラーが発生する場合は、DISPLAYの設定がうまく行っていないことが原因です。一度dockerを閉じてから、`xhost +`コマンドをホスト側で実行してから起動し直すことでエラーが解消されます。
エラー対処方法:

$ xhost +
$ docker ps
$ docker start 6d600668a465
$ docker exec -it fast-lio-ros2 bash

エラー内容:

[ERROR] [rviz2-2]: process has died [pid 1471, exit code -6, cmd '/opt/ros/humble/lib/rviz2/rviz2 --display-config /root/ros2_ws/install/livox_ros_driver2/share/livox_ros_driver2/launch_ROS2/../config/display_point_cloud_ROS2.rviz --ros-args'].

3-2. FAST-LIOの実行

上記のlivox_ros_driver2を実行させた状態で、新しいterminalを開きFAST-LIOを実行します。

$ docker exec -it fast-lio-ros2 bash
# . install/setup.bash
# ros2 launch fast_lio mapping_mid360.launch.py

すると、マップが生成されます。
……が、少し歩かせているとマップが吹き飛んでいきます。
※1つ目の画像のようにmappingの方で`Failed to find match for field ‘reflectivity’.`と出力されますが、これで正常です。


これはMid360を斜めに取り付けていることと、Mid360の内臓のIMUの性能が低いことによります。
次の記事では、これを修正し、ちゃんと崩れないFAST-LIOを使っていきます。

次の記事:
【Unitree Go2】Mid360 on Go2でFAST-LIOを使う

 

おわりに

本記事ではMid360版を用いたSLAMの方法を見てきました。
この記事が少しでも役に立てたのなら幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です