
犬型ロボット Unitree Go2 の Python SDK をセットアップして動かしてみた
はじめに
こんにちは!AI 事業本部のこーすけです。
先日、かんのさんの「クラスメソッドに Unitree の Go2 がやってきた」という記事で犬型ロボット Go2 の紹介がありました。今回はこの Go2 を Python SDK でセットアップするところから、実際にいくつかの動きを試すところまでをまとめます。
前提
- ロボット:Unitree Go2 EDU
- PC:Linux(Ubuntu)
- 接続:PC と Go2 を有線 LAN で直結
- SDK:unitree_sdk2_python
unitree_sdk2_python とは
unitree_sdk2_python は、Unitree 社が公式に提供している Python SDK です。Go2 だけでなく G1、H1、B2 など複数のロボットに対応しています。
SDK の通信方式
SDK の通信基盤は DDS(Data Distribution Service) です。
DDS はリアルタイム分散システム向けの通信規格で、実装には Eclipse Cyclone DDS(バージョン 0.10.2)が使われています。PC と Go2 を LAN で接続し、UDP ベースのメッセージングでコマンドを送受信します。
例えば SportClient.Move() を呼ぶと、内部では API ID(例:Move = 1008)とパラメータを JSON で組み立て、DDS 経由で Go2 の Jetson に送信します。Jetson 側のファームウェアが API ID に応じた動作を実行します。
高レベル API と低レベル API
SDK には 2 つの制御レベルがあります。
| レベル | 概要 | 用途 |
|---|---|---|
| 高レベル API | SportClient を使い、「前進」「おすわり」などの動作をメソッド 1 つで実行 |
アプリケーション開発 |
| 低レベル API | 12 個のモーター(各脚 3 個 × 4 脚)の角度・速度・トルクを直接制御 | カスタム動作 |
今回は高レベル API(SportClient)を使います。メソッドを呼ぶだけでロボットが動きます。動作検証が目的ならまずはこちらで十分だと思います。
SDK が提供するクライアント
高レベル API には用途別にいくつかのクライアントが用意されています。今回はロボットを動かすことが目的なので、SportClientを使用します。
まだ検証できておりませんが、Go2に内蔵されているカメラやスピーカーも活用できそうです。
| クライアント | 機能 |
|---|---|
SportClient |
運動制御(歩行、姿勢、ジェスチャーなど) |
VideoClient |
前方カメラの画像取得(OpenCV で利用可能) |
ObstaclesAvoidClient |
障害物回避制御(自動回避のオン/オフ、目標位置指定) |
VuiClient |
音声ボリューム・LED 明るさの制御 |
RobotStateClient |
ロボット状態の管理(サービス一覧取得、モード切り替え) |
SportClient の API
今回使う SportClient は Go2 の運動制御を担当するクライアントです。かなり多彩な API が用意されています。
基本動作
| メソッド | 機能 |
|---|---|
Move(vx, vy, vyaw) |
速度指定で移動(前後・左右・回転) |
StopMove() |
移動停止 |
StandUp() / StandDown() |
立つ / しゃがむ |
BalanceStand() |
バランスを取って立つ |
RecoveryStand() |
転倒からの復帰 |
Euler(roll, pitch, yaw) |
姿勢制御(ラジアン指定) |
SpeedLevel(level) |
移動速度レベルの設定 |
Move() の引数は vx が前後方向(正で前進、負で後退)、vy が左右方向、vyaw が回転速度です。単位は m/s と rad/s です。
ジェスチャー・特殊動作
| メソッド | 機能 |
|---|---|
Sit() / RiseSit() |
おすわり / 立ち上がり |
Hello() |
挨拶(前足を上げて振る) |
Stretch() |
ストレッチ |
Dance1() / Dance2() |
ダンス(2 種類) |
Heart() |
ハートを描く |
FrontFlip() / BackFlip() |
前方 / 後方宙返り |
HandStand(flag) |
倒立 |
FrontJump() |
前方ジャンプ |
歩行モード
| メソッド | 機能 |
|---|---|
FreeWalk() |
自由歩行 |
ClassicWalk(flag) |
クラシック歩行 |
WalkUpright(flag) |
直立歩行(二足歩行) |
CrossStep(flag) |
クロスステップ |
SDK のセットアップ
unitree_sdk2_python の README に沿って進めます。
1. リポジトリのクローン
cd ~
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
2. SDK のインストール
sudo apt install python3-pip
pip3 install -e .
依存パッケージ(cyclonedds 0.10.2、numpy、opencv-python)も一緒にインストールされます。
PC と Go2 を接続する
1. 有線 LAN で直結
PC と Go2 を LAN ケーブルで直結します。Go2 に内蔵されている Jetson のデフォルト IP は 192.168.123.161 です。SDK のコマンドはこの Jetson を経由してロボットに送られます。

2. PC 側の IP 設定
LAN ケーブルを接続すると、Ubuntu のネットワーク設定に有線接続が表示されます。この接続の IPv4 設定を開き、以下のように手動で設定します。
- メソッド:手動
- アドレス:
192.168.123.XXX - ネットマスク:
255.255.255.0 - ゲートウェイ:空欄

Go2 の Jetson の IP が 192.168.123.161 なので、同じサブネット(192.168.123.0/24)内で161と被らなければ任意のアドレスで大丈夫です。
設定を適用したら、ifconfig で IP が反映されていることを確認します。
ifconfig

こちらのネットワークインターフェース名はプログラム実行時に必要になるので控えておきます。
3. 疎通確認
Go2 内部の Jetson に ping が通ることを確認します。
ping 192.168.123.161

レスポンスが返ってくれば接続完了です。
付属のサンプルコードで動作確認する
SDK にはサンプルコードが付属しています。まずはこれで動作確認してみます。
cd ~/unitree_sdk2_python
python3 ./example/go2/high_level/go2_sport_client.py <ネットワークインターフェース名>
引数には先ほど ifconfig で確認したネットワークインターフェース名を渡します。
起動すると対話モードになり、アクションに紐づく番号を入力すると Go2 が動きます。いくつか試してみます。

動きを試してみる
前進(3: Move)
Move(0.3, 0, 0) で前方に歩き出します。
しゃがむ・立つ(2: StandDown / 1: StandUp)
StandDown() でしゃがみ、StandUp() で立ち上がります。
倒立(7: HandStand)
HandStand(True) で倒立を開始し、数秒後に HandStand(False) で解除します。
サンプルにない動きも試してみる
付属のサンプルコードには Sit() や Hello() など一部のメソッドが含まれていません。ただ、SportClient にメソッドは用意されているので、スクリプトを書けばすぐに試せます。
おすわり(Sit)
import sys
import time
from unitree_sdk2py.core.channel import ChannelFactoryInitialize
from unitree_sdk2py.go2.sport.sport_client import SportClient
if __name__ == "__main__":
if len(sys.argv) > 1:
ChannelFactoryInitialize(0, sys.argv[1])
else:
ChannelFactoryInitialize(0)
client = SportClient()
client.SetTimeout(10.0)
client.Init()
print("Sit...")
client.Sit()
time.sleep(3.0)
print("RiseSit...")
client.RiseSit()
time.sleep(2.0)
print("Done.")
Sit() でおすわり、RiseSit() で立ち上がります。
挨拶(Hello)
import sys
import time
from unitree_sdk2py.core.channel import ChannelFactoryInitialize
from unitree_sdk2py.go2.sport.sport_client import SportClient
if __name__ == "__main__":
if len(sys.argv) > 1:
ChannelFactoryInitialize(0, sys.argv[1])
else:
ChannelFactoryInitialize(0)
client = SportClient()
client.SetTimeout(10.0)
client.Init()
print("Hello...")
client.Hello()
time.sleep(3.0)
print("Done.")
前足を上げて手を振るようなジェスチャーです。
おわりに
今回は Unitree Go2 の Python SDK(unitree_sdk2_python)をセットアップして、SportClient の高レベル API でいくつかの動きを試してみました。
SDK は DDS ベースの通信基盤の上に、高レベル API と低レベル API の 2 層が用意されており、アプリケーション開発なら高レベル API だけで十分にいろんな動きが試せます。セットアップも Ubuntu なら SDK の Readme の手順のみですぐに動かし始められました。
引き続き検証をしていきます。
最後までお読みいただき、ありがとうございました。











