【Unitree Go2】XT16 on Go2でD-LIOを使う【SLAM】

【Unitree Go2】XT16 on Go2でD-LIOを使う【SLAM】

初めに


本記事では、Unitree Go2 XT16版を用いたSLAMの方法を案内します。 SLAMのアルゴリズムにはいろいろな種類がありますが、今回はD-LIOというものを使っていきます。 本記事のゴール(SLAMの様子): ↓詳しくは下記動画 本記事のゴール(XT16のSLAM走行の動画)
 

環境


環境は、次のようなものを想定しています。
  • 機種: Go2 R&D+(Edu+)(AIR/PROではないもの)
  • 付属LiDAR:XT16
※D-LIOはかなり重いので、Orin NXで行うことを前提とします。  

1.xt16のip設定


【Unitree Go2】XT16を動かしてみる の1の項を見て、接続設定をします。 本記事では、下記のような設定として進めますが、IPアドレスが異なる場合は適宜置き換えて読み進めてくだされば問題ありません。
  • XT16 IP:192.168.123.20
  • Docking Staion IP:192.168.123.18
 

2.D-LIOの導入


本記事では、D-LIOというSLAMアルゴリズムを用いた方法を解説します。 Docking Station(Orin NX)上で行うことを前提とします。

2-1. ネット接続

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

2-2. 本記事で使用するpkgのダウンロード

  1. $ git clone https://github.com/TechShare-inc/faq_go2_xt16.git
使用するものは、
  • unitree ros2 : go2をROS2で扱うため
  • imu_publisher : go2に搭載されたimuの情報をpublishするもの。弊社作成
  • Hesai LiDAR SDK : xt16を使うためのSDK。弊社でかなり手を加えたもの。timestampやフォーマットの関係上公式のSDKをそのままで使用できないため、修正している
  • dlio : 今回使用するSLAMアルゴリズム。オープンソースのROS2ブランチを使用。今回に記事用にtopic名などのパラメーターを修正している
  1. $ cd humble_ws/src $ git clone https://github.com/TechShare-inc/go2_unitree_ros2.git -b imu_publisher $ git clone https://github.com/TechShare-inc/HesaiLidar_ROS2_techshare.git $ git clone https://github.com/unitreerobotics/unitree_ros2.git $ git clone https://github.com/TechShare-inc/direct_lidar_inertial_odometry.git
弊社で実機で行った時の様子:

2-3. dockerイメージの作成

本記事はros2 humble環境で実装するため、dockerイメージを作成します。
  1. $ cd docker $ docker build -t go2-humble:latest .
※かなり時間がかかります なお、dockerはデフォルトでは入っていないため、例えば下記のコマンドでdockerを入れます。
  1. $ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io $ sudo usermod -aG docker $USER $ newgrp docker $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list $ sudo apt-get update $ sudo apt-get install -y nvidia-docker2 $ sudo systemctl restart docker
弊社で実機で行った時の様子:

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

  1. $ cd humble_ws $ bash ../docker/humble.sh
これでdockerコンテナが作成されます。 ここでもし、「nvidiaがunknown」とエラーが出る場合は、2-3節のdockerのインストールコマンドを実行する必要があります。(イメージのbuildはもう一度やる必要はありません)

2-5. コンパイル

前項でコンテナを作成し、コンテナの中にいる状態で、下記のようにコンパイルします。
  1. # cd /external # colcon build --symlink-install

2-6. unitree_ros2の環境設定

unitree_ros2の環境を設定します。 下記のように、unitree_ros2/setup.shを修正します。 本記事では、rvizを無線接続された外部PCで実行するので、無線インターフェイスwlan0も含めて指定しています。 こうすることでDockingStationから配信されるtopicはwlan0と同じネットワーク上のコンピューターにも配信されます。
  1. #!/bin/bash echo "Setup unitree ros2 environment" #source /opt/ros/foxy/setup.bash source unitree_ros2/cyclonedds_ws/install/setup.bash export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces> <NetworkInterface name="eth0" priority="1" multicast="default" /> <NetworkInterface name="wlan0" priority="2" multicast="default" /> </Interfaces></General></Domain></CycloneDDS>'

 

3.実行



3-1. D-LIOの実行

下記のように行うことで、実行できます。
  1. # cd /external/src # catmux_create_session test_catmux.yaml
正しく実行できていれば下記のような画面になります。 imu_publisher HesaiLiDARSDK dlio
 

3-2. 可視化

Docking Station(Orin NX)上で描画すると、かなりメモリが使われてしまうため、外部PCで描写を行います。 外部PCを同じ無線ネットワークに接続し、外部PCで下記のようなsetupを行うと、Docking Station(Orin NX)で配信されているトピックを見ることができます。(環境によってはwlan0ではない可能性があります)
  1. #!/bin/bash echo "Setup unitree ros2 environment" #source /opt/ros/foxy/setup.bash source $HOME/unitree_ros2/cyclonedds_ws/install/setup.bash export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces> <NetworkInterface name="wlan0" priority="default" multicast="default" /> </Interfaces></General></Domain></CycloneDDS>'
dlio pkgにあるdlio.rvizを外部PCにコピーしておきます。 その後、その設定でRvizを起動します。
  1. $ rviz2 -d direct_lidar_inertial_odometry/launch/dlio.rviz
  起動直後のRvizの画面 少し犬を歩かせると、うまくいっていれば下記のように点群が現れ、さらに歩かせると軌跡が表示される。 このように動けば成功です。 なお、伏せたり立たせたりすると自己位置が吹っ飛びやすいので、立たせた状態からSLAMをすることを推奨します。 ↓結果の動画 本記事のゴール(XT16のSLAM走行の動画)
 

おわりに

本記事ではGo2内蔵のIMUとXT16を用いたGo2 SLAMサンプルの実行方法を見てきました。 この記事が少しでも役に立てたのなら幸いです。
    • Related Articles

    • 【Unitree Go2】Mid360 on Go2でFAST-LIOを使う

      初めに 本記事では、【Unitree Go2】Mid360でSLAMを実行するの続きになります。 前回の記事では犬を少し歩かせると、地図が崩れてしまいました。 本記事ではGo2内蔵のIMUを用いて、安定的なSLAMを実現します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D+(Edu+)(AIR/PROではないもの) 付属LiDAR:Mid-360 ※FAST-LIOはかなり重いので、Orin NXで行うことを前提とします。 ...
    • 【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の項を見て、接続設定をします。 ...
    • 【Unitree Go2】Mid360のデフォルトサンプルの使い方(現在使用できません)

      初めに 本記事では、オプションのMid360/XT16版を用いたメーカーの用意したSLAMの使い方を案内する予定です。 ただし、メーカーに確認したところ、現状はうまく動作せず、2024年の年末頃に更新予定とのことです。(24/8/5現在) 使用するためにTechShareで用意した使用例(点群取得とSLAM)が下記のようにございます: TechShareで用意したサンプル(点群取得とSLAM) Mid360の場合 【Unitree Go2】Mid360を動かしてみる 【Unitree ...
    • 【Unitree Go2】一問一答FAQ

      初めに 本記事では、Unitree Go2を購入されたお客様からよくあるご質問内容を、一問一答形式でまとめたものになります。 一問一答(すべての機種について) Q: Go2を歩かせると、右方向に行くことがあまりにも多いですがこれは正常ですか? A: 初期姿勢が少しずれていると、右に行きやすくなることは他のGo2でも確認されています。初期姿勢が正しいか今一度確認ください。 ...
    • 【Unitree Go2】SDK or ROSを使う方法

      初めに 本記事では、ユーザー側で用意した外部PCを用いて、SDK(unitree_sdk2)やROS(unitree_ros2)を動かす方法についてご案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) Docking Station or 外部PC:ubuntu20 / ROS2 foxy 0.参考公式ドキュメント unitree_sdk2 Obtain SDK - Go2 SDK ...