【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設定
- 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. ネット接続
2-2. 本記事で使用するpkgのダウンロード
$ 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名などのパラメーターを修正している
$ 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イメージを作成します。
$ cd docker
$ docker build -t go2-humble:latest .
※かなり時間がかかります
なお、dockerはデフォルトでは入っていないため、例えば下記のコマンドでdockerを入れます。
$ 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コンテナの作成
$ cd humble_ws
$ bash ../docker/humble.sh
これでdockerコンテナが作成されます。
ここでもし、「nvidiaがunknown」とエラーが出る場合は、2-3節のdockerのインストールコマンドを実行する必要があります。(イメージのbuildはもう一度やる必要はありません)
2-5. コンパイル
前項でコンテナを作成し、コンテナの中にいる状態で、下記のようにコンパイルします。
# cd /external
# colcon build --symlink-install
2-6. unitree_ros2の環境設定
unitree_ros2の環境を設定します。
下記のように、unitree_ros2/setup.shを修正します。
本記事では、rvizを無線接続された外部PCで実行するので、無線インターフェイスwlan0も含めて指定しています。
こうすることでDockingStationから配信されるtopicはwlan0と同じネットワーク上のコンピューターにも配信されます。
#!/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の実行
下記のように行うことで、実行できます。
# 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ではない可能性があります)
#!/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を起動します。
$ 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 ...