【Unitree Go2】SDK or ROSを使う方法
初めに
環境
環境は、次のようなものを想定しています。
- 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの)
- Docking Station or 外部PC:ubuntu20 / ROS2 foxy
0.参考公式ドキュメント
unitree_sdk2
unitree_ros2
1.環境設定
1-1. Docking Stationの場合
R&D版付属のDocking Staionで行う場合について。
有線でssh接続するには、
ssh unitree@192.168.123.18
- ユーザー名:unitree
- パスワード:123
- IPアドレス:192.168.123.18
1-2. 外部PCの場合
市販の外部PCから行う場合は、下記のようにDocking Stationと外部PCをLANケーブルで接続します。
※ Docking Stationを外し、Go2本体に直接LANケーブルを差して使うこともできます。
その後、IPアドレスの設定を行います。
192.168.123.xxxという形で指定します。192.168.123.18と192.168.123.161は既に使われているため、これ以外を使用してください。
これで接続設定は完了しました。
設定がうまく行っていることを確認するために、外部PCとDocking Stationのそれぞれからpingコマンドを実行します。pingが通れば成功です。
$ ping 192.168.123.161
$ ssh unitree@192.168.123.18
$ ping 192.168.123.xxx
(xxxは先ほど決めたIPアドレス)
2.SDKを使う方法
2-1. build
Docking Station/外部PC の適当な場所に、
unitree_sdk2を入れます。
その後、READMEの手順通りにbuildを行います。
$ cd /path/to/unitree_sdk2
$ sudo ./install.sh
$ mkdir build
$ cd build
$ cmake ..
$ make
2-2. 実行
例えば、下記のようにすることで、Go2のヘッドライトの明るさを段階的に変えることができます。
$ ./vui_client_example eth0
2-3. 実行時エラーについて
下記のようにreturn 3102となる場合は、接続がうまくいっていません。
(左がエラー時。右は成功時)
左のような場合は、次の2点をご確認ください:
① pingが通るか
$ ping 192.168.123.18
$ ping 192.168.123.161
② ifconfigで192.168.123.xxxと割り振られているものを探し、interface nameを間違えていないか
$ ifconfig
3.ROS2を使う方法
公式ドキュメントは、下記にあります。
※24/6/7追記
アップデートがあり、下記の手順は実際のやり方と少し異なります。具体的には、foxyで行う場合、aptでのcycloneddsのインストールとソースコードからのビルドの両方が必要な仕様になっています
sudo apt update
sudo apt install ros-foxy-rmw-cyclonedds-cpp
sudo apt install ros-foxy-rosidl-generator-dds-idl
として、aptでインストールを行った上で下記と同じ手順を行うと、正しくセットアップすることが可能です。
3-1. build
外部PCのhomeディレクトリ直下に、
unitree_ros2を入れます。
homeディレクトリ直下にしない場合は、unitree_ros2_setup.shのpathを修正します。
また、有線ポート名を修正します。Docking Station上で行う場合はeth0になります。外部PC上で行う場合は、eth0ではない場合があります。ifconfigによって確認することができます。(
ネットワーク確認ifconfig)
その後、READMEの手順通りにbuildを行います。
$ sudo apt install gedit
$ sudo gedit ~/.bashrc
この時、~/.bashrcにfoxyのsourceがある場合はコメントアウトします。
# source /opt/ros/foxy/setup.bash
そして、terminalを立ち上げなおした後、--packages-selectを用いて、cycloneddsのみをコンパイルします。
$ cd ~/unitree_ros2/cyclonedds_ws/src
$ git clone https://github.com/ros2/rmw_cyclonedds -b foxy
$ git clone https://github.com/eclipse-cyclonedds/cyclonedds -b releases/0.10.x
$ cd ..
$ colcon build --packages-select cyclonedds
buildが完了したら、引き続き同じterminalでfoxyのsetup.bashをし、その後全体のコンパイルをします。
$ source /opt/ros/foxy/setup.bash
$ colcon build
3-2. 実行
$ source ~/unitree_ros2/unitree_ros2_setup.sh
として実行可能です。
デフォルトで出ているros2 topicの確認などが可能です。
(なお、ROS_DOMAIN_ID は、0 にする必要があります。topic listが表示されない場合は ROS_DOMAIN_ID が異なるなどのケースが考えられます)
例えば、4D LiDAR L1の情報は、rviz2を立ち上げてから、/utlidar/cloudトピックで確認できます。
$ ros2 run rviz2 rviz2
frameは utlidar_lidar にします。
(LiDAR中心の座標系で表示されているため、上下が逆さまで表示されており、斜めの平面が地面を表している)
他には、/sportmodestateで各種情報を取得できます。
$ ros2 topic echo /sportmodestate
例えば足先の肉球を押すと、foorforceの値が大きくなる。
3-3. ROS2のexampleを動かす
ROS2のexampleもいくつか用意されており、下記のように行うことでコンパイルできます。
$ source ~/unitree_ros2/unitree_ros2_setup.sh
$ cd ~unitree_ros2/Go2_ROS2_example
$ colcon build
実行はドキュメントだと下記のように書かれています。
$ ./install/go2_demo/lib/go2_demo/read_motion_state
ただ、CMakeListsを
下記補足2のように行えば、普通のROS2の方法でも問題なくできます。
$ . install/setup.bash
$ ros2 run go2_demo
3-おまけ. humble環境で行う場合
$ sudo apt install ros-humble-rmw-cyclonedds-cpp
$ sudo apt install ros-humble-rosidl-generator-dds-idl
$ cd cyclonedds_ws
$ colcon build
※unitree_go, unitree_apiのコンパイルは必須
※unitree_ros2_setup.shについては、export RMW_IMPLEMENTATION=rmw_cyclonedds_cppは必須
※24/6/7追記
humbleで使う場合は、aptでのインストールのみでよい。setup.shを下記のように修正する。基本的にはexport RMW以下の行を実行すればよい。例えば下記。なお、NetworkInterfaceはそのPCのインターフェイスに合わせる必要があります。
#!/bin/bash
echo "Setup unitree ros2 environment"
source /opt/ros/humble/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="enp3s0" priority="default" multicast="default" />
</Interfaces></General></Domain></CycloneDDS>'
またexampleに移動してcolcon buildすれば、こちらのサンプルも問題なく使えます。
3-おまけ2. ros2 runで起動したい場合
通常のros2のノードを起動するように、ros2 runコマンドを使用したい場合はCMakeLists.txtのinstallの中のDESTINATIONの後の部分を追記し、コンパイルすることで行うことができます。
install(TARGETS
low_level_ctrl
read_low_state
read_motion_state
read_wireless_controller
sport_mode_ctrl
DESTINATION lib/${PROJECT_NAME})
おわりに
Go2のSDK/ROSの外部PCにおけるセットアップ方法を見てきました。
Go1の時に比べ、メーカーのドキュメントがしっかり書かれているため、基本的にはREADMEを見ながら進めて頂ければセットアップできるかと思います。
この記事が少しでも役に立てたのなら幸いです。
Related Articles
【Unitree Go2】 SDK,ROSから障害物検知ON/OFFにする方法
初めに 本記事では、デフォルト機能の障害物検知機能を2次開発で活用する方法についてご案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 外部PC or Docking StaionのOrinを使用する 1.障害物検知機能を使える条件 結論から書くと、ROS2トピックには障害物検知のON/OFFを制御できるトピックはなく、SDKからのみ障害物検知のON/OFFが制御できます。 ...
【Unitree Go2】NoMachineでDocking StationのGUIを使う
初めに 本記事では、ユーザー側で用意した外部PCからDocking StationのGUIを使う方法を案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 外部PC:ディスプレイがあるWindows/Mac/Linux 1.環境設定 何らかの方法でDocking Stationにssh接続します。 有線接続の場合は、【Unitree Go2】外部PCからSDK or ...
【Unitree Go2】一問一答FAQ
初めに 本記事では、Unitree Go2を購入されたお客様からよくあるご質問内容を、一問一答形式でまとめたものになります。 一問一答(すべての機種について) Q: Go2を歩かせると、右方向に行くことがあまりにも多いですがこれは正常ですか? A: 初期姿勢が少しずれていると、右に行きやすくなることは他のGo2でも確認されています。初期姿勢が正しいか今一度確認ください。 ...
【Unitree Go2】SDKの概要について【unitree_sdk2】
初めに Go2 R&Dがついに日本上陸しました。 SDKもGo1の時から大幅アップデートしています。 本記事では、Go2 SDKのexampleの概略についてご案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 実行コンピュータ:ubuntu20 ...
【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で行うことを前提とします。 ...