2025.04.08

Unitree G1 – ヒューマノイドのアプリケーション開発 最初の一歩

GMOインターネットグループのオフィスには,ヒューマノイドG1がいます。今回はこれを使って何かするための最初の一歩をご紹介します。

1.Unitree G1とは

Unitree G1は,中国のUnitree社が開発しているヒューマノイドです。身長130cm,体重35kgで,かなり小柄です。

この軽量・扱いやすいサイズ,というのがとても重要で,もしトラブルが起きても大人が支えることができたり,万が一転倒しても破損する可能性が低かったりします。
また,移動も大人2名で可能なので,展示やイベントの際にも取り回しが良いのも嬉しい点です。

G1は大学や企業が購入し,盛んに研究されています。Unitree自身もアグレッシブな動きをするモデルを組み込んだデモを公開しており,注目をあつめています。

そんなG1ですが,実は標準機能は非常に貧弱でして,言ってしまえば高級なラジコンです。できる動作といえば,バランスをとって歩いたり,手を振ったりする程度です。
ちょっとしたポーズを取るようなこともできず,標準機能では思った以上にできることが少ない,というのが現実です。
展示会等でもデモ機が立って手を振っているだけ,というのは,標準で搭載されているモーションがこれくらいしかないのが理由です。

さて,ではG1は何にもできないダメなやつなのかというと,そんなことはありません。
この歩く・バランスをとる,という標準の動作は非常にクオリティが高く,安定しています。

G1を押す
 

こちらは,自立しているG1を押してバランスが取れるかを実験している場面です。
強く押しているのですが,かなり反発力があり,安定して自立しています。

つまり,ハードウェアや初期搭載されている制御の性能は高いものの,その他は基本的な動作しか提供されていないので,ちょっとでも好きな動きをさせたければ自分で開発する必要がある,ということです。

G1の基本機能と,自分で開発が必要な動きをまとめてみました。

G1の開発が必要な部分
 

基本機能として,まずは自立してバランスを取る,という動作があります。この動作の上で,座ったり立ったり歩いたりする動作があり,さらにその上で握手や手を振るモーションが実現されています。

自分でモーションを開発する場合,これらの基本動作の上に作り込むこともできますし,全て使わずにゼロから作ることも可能です。

2.Unitree G1を動かしてみる(基本)

では,実際にG1に好きなポーズをさせるためには,何をするためにやるべきことを見ていきます。

G1をはじめ,ロボットの関節はサーボモータで実現されています。
つまり,各サーボモータのトルク・角速度・角度をプログラムで指示すれば,関節を任意の角度に設定=好きなポーズを実現可能というわけです。

Unitree G1のモータは,以下のようにトルクの直接指定,目標角速度,目標角度の設定が可能です。角速度と角度は,現在値との差分に対して係数をかけて自動で制御されます。係数も任意に設定が可能です。

Unitreeのモータ制御
 

実際にプログラムから制御する部分は,Unitreeのドキュメントやサンプルプログラムを参照してください。例えば,歩行状態を維持したまま上半身を任意に制御する方法は以下のページに記載があります。

https://support.unitree.com/home/en/G1_developer/sport_services_interface

プログラムは,G1のPC2(NVIDIA Jetson Orin)上で開発・実行するのが最も楽です。C++なら,とくにクロスコンパイルの設定等せずに,最初からインストールされているSDKのディレクトリをinclude pathに設定し,適宜必要なライブラリをリンクする設定を書けば,開発ができます。

ポーズだけであれば,この方法で実現できるのですが,歩行やジャンプなどの動きを1つ1つ角度指定で作り込むのは困難ですし,そこに外乱への耐性を持たせようとするとかなり厳しいです。
そこで,最近は深層強化学習などの手法を用いて,センサの値やサーボモータの現在角度などから,新しいサーボモータの指示値を出力するモデルを作成して制御するケースが増えています。

3.Unitree G1を動かしてみる(ちょっと応用)

ここまでの話で,関節を好きな角度に設定することができるようになりました。
せっかくなので,少し応用したアプリケーションを作ってみます。

物体検出タスクでよく登場するYOLOですが,実は姿勢推定も可能です。
今回は,これを利用してG1に人間のポーズを真似させてみます。

3次元空間上での姿勢なので,通常の画像+奥行き(深度)の情報が必要です。
G1には深度が取れるカメラRealSenseが搭載されているため,これを利用したいところですが,残念ながらG1のRealSenseは手元作業用で下を向いています。
そこで,今回はPCに付いているカメラで映像を取得,YOLOで姿勢推定,DPTで深度推定を行い,姿勢を計算します。
G1側では,外部からモータの角度情報を受け取り,その角度のモータを回転させる制御を実装します。

実際に動かした様子は,以下の通りです。

M2 MacBook上での実行だと,深度の推定に1〜2秒要するため,リアルタイムでの動作はできず,カクカクします。一方で,YOLOは2桁ミリ秒で推定が完了するため,RealSenseが使えればリアルタイムでいけそうですね。

姿勢の推定結果からモータの指示角度への変換は,ベクトルどうしの角度を計算したものをそのまま利用しています。肩は素直に値をそのまま使えば良いのですが,肘は肩の回転の影響を受けることに注意が必要です。

4.まとめ

Unitree G1は優れたヒューマノイドですが,好きな動きをさせるためには開発が必要です。今回はYOLOとDPTを使って任意のポーズを取らせるプログラムを作成しました。

次世代システム研究室では,グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。アプリケーション開発者の方,次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら,ぜひ募集職種一覧からご応募をお願いします。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事