すっごい今更だけどみんな大好き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で自律移動させるとか即できちゃう。

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感は薄い。その分自由度は高い。
/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万円の価値はあると思う。