犬型ロボット Unitree Go2 の Python SDK をセットアップして動かしてみた

犬型ロボット Unitree Go2 の Python SDK をセットアップして動かしてみた

2026.04.22

はじめに

こんにちは!AI 事業本部のこーすけです。

先日、かんのさんの「クラスメソッドに Unitree の Go2 がやってきた」という記事で犬型ロボット Go2 の紹介がありました。今回はこの Go2 を Python SDK でセットアップするところから、実際にいくつかの動きを試すところまでをまとめます。

https://dev.classmethod.jp/articles/unitree-go2/

前提

  • ロボット:Unitree Go2 EDU
  • PC:Linux(Ubuntu)
  • 接続:PC と Go2 を有線 LAN で直結
  • SDK:unitree_sdk2_python

https://github.com/unitreerobotics/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 を経由してロボットに送られます。

IMG_0200

2. PC 側の IP 設定

LAN ケーブルを接続すると、Ubuntu のネットワーク設定に有線接続が表示されます。この接続の IPv4 設定を開き、以下のように手動で設定します。

  • メソッド:手動
  • アドレス192.168.123.XXX
  • ネットマスク255.255.255.0
  • ゲートウェイ:空欄

スクリーンショット 2026-04-22 140942

Go2 の Jetson の IP が 192.168.123.161 なので、同じサブネット(192.168.123.0/24)内で161と被らなければ任意のアドレスで大丈夫です。

設定を適用したら、ifconfig で IP が反映されていることを確認します。

ifconfig

スクリーンショット 2026-04-22 141008

こちらのネットワークインターフェース名はプログラム実行時に必要になるので控えておきます。

3. 疎通確認

Go2 内部の Jetson に ping が通ることを確認します。

ping 192.168.123.161

スクリーンショット 2026-04-22 141058

レスポンスが返ってくれば接続完了です。

付属のサンプルコードで動作確認する

SDK にはサンプルコードが付属しています。まずはこれで動作確認してみます。

cd ~/unitree_sdk2_python
python3 ./example/go2/high_level/go2_sport_client.py <ネットワークインターフェース>

引数には先ほど ifconfig で確認したネットワークインターフェース名を渡します。

起動すると対話モードになり、アクションに紐づく番号を入力すると Go2 が動きます。いくつか試してみます。

スクリーンショット 2026-04-22 150023

動きを試してみる

前進(3: Move)

Move(0.3, 0, 0) で前方に歩き出します。

https://youtu.be/24LGNBhrQHU

しゃがむ・立つ(2: StandDown / 1: StandUp)

StandDown() でしゃがみ、StandUp() で立ち上がります。

https://youtu.be/NGay4ex6zv0

倒立(7: HandStand)

HandStand(True) で倒立を開始し、数秒後に HandStand(False) で解除します。

https://youtu.be/5yynGPMZOVY

サンプルにない動きも試してみる

付属のサンプルコードには 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.")

https://youtu.be/yOWgcG2GY6o

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.")

https://youtu.be/yOWgcG2GY6o

前足を上げて手を振るようなジェスチャーです。

おわりに

今回は Unitree Go2 の Python SDK(unitree_sdk2_python)をセットアップして、SportClient の高レベル API でいくつかの動きを試してみました。

SDK は DDS ベースの通信基盤の上に、高レベル API と低レベル API の 2 層が用意されており、アプリケーション開発なら高レベル API だけで十分にいろんな動きが試せます。セットアップも Ubuntu なら SDK の Readme の手順のみですぐに動かし始められました。

引き続き検証をしていきます。
最後までお読みいただき、ありがとうございました。

この記事をシェアする

関連記事