【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で行う場合は、内部にリポジトリをスムーズに入れるため、インターネット接続設定を先にしておきます。
(参照:【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が通れば成功です。

$ 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

※仮想環境等を使う場合は、eth0ではない場合があります。ifconfigによって確認することができます

exampleについては詳しくは、下記のFAQをご覧ください。
【Unitree Go2】SDKの概要について【unitree_sdk2】

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のインストールとソースコードからのビルドの両方が必要な仕様になっています

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を立ち上げなおした後、package-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 にします。

他には、/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 

ただ、普通のROS2の方法でも問題なくできます。

$ . 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

$ 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

#!/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='
                            
                        '

またexampleに移動してcolcon buildすれば、こちらのサンプルも問題なく使える。なお、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を見ながら進めて頂ければセットアップできるかと思います。
この記事が少しでも役に立てたのなら幸いです。

 

コメントを残す

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