Unitree G1開発向けのLowレベル制御ライブラリの調査
はじめに
こんにちは、インターン生の王です。今回はUnitree G1ロボットの制御方法について調べました、それについて共有します。
調査背景
Unitree G1 とはなにか?
Unitree G1 とは直近ネット上で多くの話題を引き寄せている中国企業 UNITREE のヒューマンロイド型のロボットのこと指しています。
画像引用元:https://kyodonewsprwire.jp/release/202405160872
このロボットは直近世界で話題になっています、SNS での動画ををみてみると、膝の投げが滑らかで腰の捻りも人間らしい歩き方をしています。
動画によってはヌルヌル動くものとカタカタ動くものの両方がありましたので、念の為載せときます
カタカタするものの動画
ぬるぬるの動画
また、最近 AI 技術の爆発的な成長が成し遂げているのも背景に、人型ロボットが AI 搭載したら、今より、生産力が大幅に上昇する見込みがありますがロボットが簡単な動きしかできないと AI を搭載しても、頭がいい赤ちゃんみたいなもんなので、ロボットに複雑な動きができる研究が進められています。ここでいくつか話題となった事例を紹介します。
- Apple Vison Pro を通して、ロボットを操作する
- UCSD医学部が G1 を用いて医療分野での開発を行なった、具体的には患者さんに対して身体検査、緊急介入、精密針タスクを含む7つの医療手順で評価され、システムは有望な結果を示した。
G1 はすごいロボットだとわかった。では、これを**自分で制御するにはどうすればいいか?**を調査しました。
調査結果
ざっくりと Unitree の公式ドキュメントを読んでみました。ロボットを思い通りに動かすには、実は制御の考え方が2種類あることを知る必要があります、それぞれ、Low レベル制御とHihg レベル制御です。
まず最初に、Low レベル制御です、これはロボットが特定の動きをするために、開発者がモーターの動きを直接定義します。その一方でHihg レベル制御は、開発者が定義したLow レベルの動きを制御する。
この説明だとややこしいのでさらに噛み砕いて説明します。
例えば、仰向けのロボットを起立させたいと考えます。Low レベル制御は立つときに、まず足を何度曲げて、次にどのぐらいの力を入れてやることを指します。
High レベル制御はこの仰向けになったロボットに立ってという命令だけを出せばいいです。
ここまできたら分かったと思うのですが、G1 開発においてlow レベルでのモーターや間接をの制御をするのがめんどくさく、楽に制御できるようなライブラリーが欲しいから。ここで使えそうなライブラリーがあるかを調査しました。
ここで出てきたのがSDK です
これはロボット開発用ソフトウェアキットのことを指します。これを使うとロボットの状態取得、モーター制御、高レベル動作指示、通信処理などを行うことができます。
残念ながらLow レベルを楽にするようなライブラリーはなかったです、G1を新しい動きをさせるためには自分でLow レベル制御を書かなければいけません。
1. UNITREE 公式SDK の全体像
画像出典:https://support.unitree.com/home/zh/G1_developer/sdk_overview
G1 はDDS をミドルウェアとしています。
DDS(Data Distribution Service /リアルタイム分散システム)とは、データをリアルタイムに届ける通信ミドルウェアです、簡単に言えばG1の神経回路と考えてもいいです。
■ 公式に提供されるSDK2 シリーズ
Unitree Robotics はG1 を含めた最新機種(Go2/B2/H1/G1 など)向けの「Unitree SDK2」を公式にオープンソースで公開しています。リポジトリはGitHub で入手可能で、C++ コアのほか公式Pythonラッパー(unitree_sdk2_python
)も整備。だれでもダウンロードし、すぐに開発を始められます。
入手場所
Unitree Robotics GitHub SDK2
Unitree Robotics GitHub SDK2_Python
参考ドキュメント
unitree_sdk2_python README
■ 何ができる? SDK2 の主な特徴
Low レベル/High レベル制御どちらにも対応
歩行や姿勢制御といった「ハイレベル命令」も、各関節ごとのトルク・位置指令といった「ローレベル命令」もAPI で統一的にサポート。
C++/Python どちらでも使える
開発用途やリアルタイム性に応じて、C++、またはpip install で利用できるPython のどちらでも開発が可能。
高度なリアルタイム通信機構を内蔵
通信インフラはDDS(Data Distribution Service, CycloneDDS)ベース。詳細な通信知識がなくとも、API を使えば高速でロボットとやりとり可能。
導入が簡単
公式ドキュメントに導入の手順を書いてていますので、すぐに手に入れられます。サンプルコードやデモプログラムも充実しています。
■ 具体的な使用例と導入のポイント
スポーツモードによる高水準制御
移動命令や直立・着席動作命令をSDK経由で簡便に発行できます。
低レベル制御のフロー
ハイレベル制御を明示的に無効化
全関節に対しトルク・角度・速度などを個別に指令(例:特定関節だけ1Nm でキープ)
開発環境例
内蔵PC(Jetson 等)上でC++ またはPython プログラムを動作
ビルド済みサンプルを即時実行可能
サンプルとして実際の関節やアームの動作デモも付属
足首のスイングや両腕の簡易動作などから、自作アルゴリズムの実験まで対応
2. コミュニティ発:外部ライブラリと拡張プロジェクトの動向
■ 基本は公式 SDK ベース、一部拡張ツールも
現時点で純粋なサードパーティー製の低レベル制御ライブラリは公式SDK2 に集約されており、これが事実上の標準となっています。
とはいえコミュニティからは以下のような拡張・補助プロジェクトが発表されています。
▽ 公式 Unitree DDS Wrapper
Python でのDDS 通信をさらに抽象化したラッパー
SDKの内部構造を意識せず、より手軽に関節制御ロジックだけを書きたい時に最適
▽ ROS/ROS2 連携やシミュレーション環境
Unitree公式のunitree_ros/ros2 パッケージ
Gazebo/MuJoCo 連携で仮想G1を制御→実機送信できる
ROS で独自Low レベル制御を作り、SDK 経由で実ロボへ送信する研究用途も
▽ ユーザーコミュニティプロジェクト例
Apple Vision Pro によるG1遠隔操作
XR機器からロボット各関節をリアルタイム制御する事例も公開
強化学習やMPC を使った歩行・操作制御
Unitree 社自身による強化学習コードや、有志研究者によるMPC 制御コードも随時GitHub に上がっています
まとめ
G1 を自在に動かすには、まずLowレベル制御の理解と実装が不可欠です。High レベル制御は、Low レベル制御を組み合わせることでより簡単に操作できる手段となります。
結論:G1 のLow レベル制御は「公式SDK 」×「コミュニティ資源」で最適化せよ
まずは公式 SDK(C++/Python) を主軸に開発を始めましょう。
必要に応じてコミュニティ拡張プロジェクト、補助ツール、ROS 連携・シミュレーションを活用しましょう。
GitHub にはサンプルコードや参考プロジェクトが多数。SDK のデモから自作アルゴリズムの移植まで、幅広く応用できます。
この記事では、G1 向けの公式ライブラリやコミュニティ資源についてまとめています。
参考リンク
Unitree Robotics 公式GitHub (unitree_sdk2, unitree_sdk2_python など)
TechShare公式:G1 SDK解説記事
Discussion