5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unitree Go2とROS 2と

Last updated at Posted at 2025-12-10

すっごい今更だけどみんな大好きUnitreeの4足歩行ロボットGo2をROS 2で動かしてみたので作業日記をシェアします。

Unitree Go2とは

Unitree Go2は、中国のUnitree Robotics社が開発・製造する四足歩行ロボットです。2023年7月に発売されたようです。

私はUnitreeの公式ショップから直接購入しました。ぽちぽちするだけで家に届きます。($2,800=44万円)

輸送費、関税など含めて60万円近くかかった気がします。

2025年2月に届いていましたが、いっしょにお散歩するくらいで実際にコードで動かしてみる、などをやるチャンスはなかなかありませんでした。先日ひさびさに触る機会を得たのでROS 2で動かすのをやってみました。

Go2の操作方法

以下の4つがある。

  • 専用コントローラー(物理)
  • アプリ
  • ROS 2 (humble / cyclondds)
  • webrtc API

ただし、Go2には以下の3つのタイプがあり、プログラマブルなのはEDUだけとされている。

  • Go2 AIR
  • Go2 PRO
  • Go2 EDU

EDUが一番高いのでプログラマはEDUを選びたくなるが、実はPROでも問題なくプログラム可能。AIRはハードウェア的に制限がいくつかあるので、ハックしている人もPROをお勧めしていた。

unitree_sdk

そもそも公式のSDKがあって、ヒューマノイドのG1とかも含め、プログラム出来るようになっている。C++でクライアントを書くことが出来る。

Go2のサンプル

go2_ros2_sdk

ROS 2で使いやすくしてくれたものがある。

そのままだと動かなかったのでPRを2つ投げて動くようにしておきました(無事マージしてもらえた)

https://github.com/abizovnuralem/go2_ros2_sdk/pull/217
https://github.com/abizovnuralem/go2_ros2_sdk/pull/218

これを使えば、みんな大好きrviz2で自律移動させるとか即できちゃう。

473676201-74a7c07c-2c2d-4022-9a23-94407f2c2a06.png
https://github.com/abizovnuralem/go2_ros2_sdk?tab=readme-ov-file

どうやらGo2は2つの動かし方があるらしい。

  • 無線LANを前提としたWebRTCでの通信
  • 有線LANを前提としたCyclon DDSでの通信

有線だとコンピュータをロボットに載せないといけないので今回はお手軽に無線でWebRTCを使ってみることにした。
ロボットは自分がアクセスポイント(AP)になるので、そこに任意のPCを無線LANつなげばROS 2で動かせる。

作ったアプリ

とりあえず隠しコマンドになっているバックフリップとかを気軽にできるようにしたかった。
そのため、任意のWebRTCコードをコントローラーにマッピングできるようにした。
コードはまだ作りかけだけど、AIで大体作った。
以下のようにjoystickのコマンドとボタンのマッピングをyamlで書いておくと、ROS 2のwebrtcコマンド用インタフェースに送り付けるアプリを書いた。ROS 2のクライアントがそもそも生のWebRTCコマンドを受け付けるサービスを用意してくれているので、そこにコマンドを投げただけ。
結局webrtcインタフェースに投げているのでROS 2感は薄い。その分自由度は高い。

joystick.yaml
/go2_joystick_actions_node:
  ros__parameters:
    joystick_actions:
      buttons:
        2:
          command: "BackFlip"
          parameter: '{ "data": true}'
        3:
          command: "FrontFlip"
          parameter: '{ "data": true}'
        4:
          command: "LeftFlip"
          parameter: '{ "data": true}'
        5:
          command: "RightFlip"
          parameter: '{ "data": true}'

システム図(雰囲気)

Go2 <--WebRTC--> PC ( ROS 2 Client <-> service <-作ったnode-> joy_node <- joystick)

コード

動画

これほどバックフリップフロントフリップをやりまくったり、無理やり移動中に発動させたりなどする動画もめずらしいのではないか。

注意

1つのロボットに1つのクライアントしかつながらない、というセキュリティーポリシーなので、アプリは落とした状態じゃないと接続はできない。コントローラー(物理)もゼロ速度を出し続けているのでコントローラーも電源を切った状態にしましょう。

今後の展望

webrtcコマンドじゃなくてもっと低レイヤのAPIも使ってみたい。そもそもそれが目的だったし。ただ触っているだけで非常に面白いロボットであり、60万円の価値はあると思う。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?