ロボ図鑑

Unitree Go2をROS 2へつなぐ — 状態取得から高レベル制御まで

公開: 2026-08-20

Unitree Go2をAIから扱う前に、ROS 2で「見えている」と「動かせる」を分ける。最初の到達点は歩行ではなく、公式topicから姿勢・速度・エラーを継続して読めることである。物理動作は、その後に高レベルSportModeだけを狭く開ける。

本稿は2026年8月20日にUnitree公式リポジトリを確認した構成で、ロボ図鑑では実機確認を終えていない。実機を動かしていない手順を実測済みとは扱わない。

0. 動かす前の安全条件

Go2の周囲を空け、人・ペット・階段・壊れ物から離す。無線コントローラを手元に置き、停止操作を人が即座に行える状態にする。最初は脚を浮かせたり低レベルmotor commandを送ったりせず、床上で状態取得だけを行う。

現行の公式go2_sport_clienttest_mode引数を受け取り、起動500ms後に選択された制御を始める。モードには起立・速度移動・Damp・StopMoveなどがある。名前がexampleでも観察用とは限らないため、ソースとモードを確認せずに実行しない。

1. 公式が確認している環境へ寄せる

公式READMEの検証済み組み合わせはUbuntu 20.04 + ROS 2 Foxy、またはUbuntu 22.04 + ROS 2 Humbleで、Humbleが推奨されている。通信はUnitree SDK2と同じCycloneDDSを使う。

git clone https://github.com/unitreerobotics/unitree_ros2
cd unitree_ros2

HumbleではCycloneDDSを独自ビルドする工程を省略できる。Foxyでは公式READMEが示す0.10.x系のCycloneDDSを組み立てる。異なるROS環境を同じshellで重ねるとDDS実装が混ざるため、Unitree用のshellを分ける。

2. 専用Ethernetを設定する

PCとGo2をEthernetで接続し、PC側インターフェースを公式例どおり次へ設定する。

address: 192.168.123.99
netmask: 255.255.255.0

インターフェース名はenp3s0など実機の値へ置き換える。setup.shではROS 2とUnitree workspaceをsourceし、RMW_IMPLEMENTATION=rmw_cyclonedds_cppCYCLONEDDS_URIのNetworkInterfaceへその名前を指定する。

source ~/unitree_ros2/setup.sh
ros2 topic list

ここでtopicが出なければ、制御コードへ進まない。NIC名、PCのIPv4、ケーブル、Go2の起動状態、CycloneDDSの選択を順に戻る。

3. 状態取得だけを完了させる

公式READMEは/sportmodestateまたはlf/sportmodestateから位置、速度、IMU、歩容、障害物距離などを取得できると説明している。まずtopicを直接読む。

ros2 topic echo /sportmodestate

公式exampleをbuildした場合は、読取専用のread_motion_stateを使える。

cd ~/unitree_ros2/example
colcon build
source install/setup.bash
./install/unitree_ros2_example/bin/read_motion_state

position、velocity、IMU rpyが継続して出れば、AIが判断に使う観測面は成立している。通信が途切れた状態を「静止」と誤認しないよう、timestampと更新間隔も見る。

4. 高レベル制御だけをAIへ渡す

SportMode制御は/api/sport/requestunitree_api::msg::Requestを送り、応答を受ける経路である。公式のSportClient exampleにはStandUpMoveStopMoveDampなどが実装されている。LLMへROS topicの生publish権限を渡さず、次のような狭い関数で包む。

read_motion_state()
stand_up()
move(vx, vy, yaw_rate, duration_ms)
stop_move()
damp()

moveには速度と継続時間の上限を固定し、タイムアウト後は必ずStopMoveへ落とす。動作中も状態topicの更新が止まったら追加コマンドを送らない。最初の実機試験は低速・短時間・人の承認付きにする。

5. 低レベル制御は別系統に隔離する

/lowcmdは各motorの位置・速度・トルク・ゲインへ直接届く。公式READMEにも脚motorが実際に回るexampleがある。これは「もっと細かく動かせる便利な口」ではなく、姿勢崩壊や転倒を起こせる別の危険面である。汎用LLMのtool catalogへ入れない。必要な制御器がある場合だけ、シミュレータと専用安全監視を通した別プロセスに隔離する。

完了判定

機種の接続口とWebRTC経路はUnitree Go2の標本を参照。

出典(2026-08-20確認)

他のガイド