【Unitree Go2】SDK or ROSを使う方法

【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

unitree_ros2

 

1.環境設定



1-1. Docking Stationの場合

R&D版付属のDocking Staionで行う場合について。 有線でssh接続するには、
  1. ssh unitree@192.168.123.18
  • ユーザー名:unitree
  • パスワード:123
  • IPアドレス:192.168.123.18
になります。 また、内部にリポジトリをスムーズに入れるため、インターネット接続設定を先にしておきます。 (参照:【Unitree Go2】Docking Station のインターネット接続方法

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が通れば成功です。
  1. $ ping 192.168.123.161
  1. $ 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を行います。
  1. $ cd /path/to/unitree_sdk2 $ sudo ./install.sh $ mkdir build $ cd build $ cmake .. $ make

2-2. 実行

例えば、下記のようにすることで、Go2のヘッドライトの明るさを段階的に変えることができます。
  1. $ ./vui_client_example eth0
※仮想環境等を使う場合は、eth0ではない場合があります。ifconfigによって確認することができます exampleについては詳しくは、下記のFAQをご覧ください。 【Unitree Go2】SDKの概要について【unitree_sdk2】

2-3. 実行時エラーについて

下記のようにreturn 3102となる場合は、接続がうまくいっていません。 (左がエラー時。右は成功時) 左のような場合は、次の2点をご確認ください: ① pingが通るか
  1. $ ping 192.168.123.18 $ ping 192.168.123.161
② ifconfigで192.168.123.xxxと割り振られているものを探し、interface nameを間違えていないか
  1. $ ifconfig
 

3.ROS2を使う方法


公式ドキュメントは、下記にあります。
※24/6/7追記 アップデートがあり、下記の手順は実際のやり方と少し異なります。具体的には、foxyで行う場合、aptでのcycloneddsのインストールとソースコードからのビルドの両方が必要な仕様になっています
  1. 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を行います。
  1. $ sudo apt install gedit $ sudo gedit ~/.bashrc
この時、~/.bashrcにfoxyのsourceがある場合はコメントアウトします。
  1. # source /opt/ros/foxy/setup.bash
そして、terminalを立ち上げなおした後、--packages-selectを用いて、cycloneddsのみをコンパイルします。
  1. $ 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をし、その後全体のコンパイルをします。
  1. $ source /opt/ros/foxy/setup.bash $ colcon build

3-2. 実行

  1. $ source ~/unitree_ros2/unitree_ros2_setup.sh
として実行可能です。 デフォルトで出ているros2 topicの確認などが可能です。 (なお、ROS_DOMAIN_ID は、0 にする必要があります。topic listが表示されない場合は ROS_DOMAIN_ID が異なるなどのケースが考えられます) 例えば、4D LiDAR L1の情報は、rviz2を立ち上げてから、/utlidar/cloudトピックで確認できます。
  1. $ ros2 run rviz2 rviz2
frameは utlidar_lidar にします。 (LiDAR中心の座標系で表示されているため、上下が逆さまで表示されており、斜めの平面が地面を表している) 他には、/sportmodestateで各種情報を取得できます。
  1. $ ros2 topic echo /sportmodestate
例えば足先の肉球を押すと、foorforceの値が大きくなる。

3-3. ROS2のexampleを動かす

ROS2のexampleもいくつか用意されており、下記のように行うことでコンパイルできます。
  1. $ source ~/unitree_ros2/unitree_ros2_setup.sh $ cd ~unitree_ros2/Go2_ROS2_example $ colcon build
実行はドキュメントだと下記のように書かれています。
  1. $ ./install/go2_demo/lib/go2_demo/read_motion_state
ただ、CMakeListsを下記補足2のように行えば、普通のROS2の方法でも問題なくできます。
  1. $ . install/setup.bash $ ros2 run go2_demo

3-おまけ. humble環境で行う場合

humble環境で行う場合は、rmw_cyclonedds(branch:humble)を同じような手順でコンパイルするとエラーが発生します。 ただrmwについてはaptでインストール可能なので、下記のようにhumbleのrmwを入れてあれば、rmwをコンパイルせずに進めて同じように行うことができます。 (参考:Eclipse Cyclone DDS / humbleEclipse Cyclone DDS / foxy
  1. $ 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のインターフェイスに合わせる必要があります。
  1. #!/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の後の部分を追記し、コンパイルすることで行うことができます。
  1. 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で行うことを前提とします。 ...