Unitree Go2をAIから扱う前に、ROS 2で「見えている」と「動かせる」を分ける。最初の到達点は歩行ではなく、公式topicから姿勢・速度・エラーを継続して読めることである。物理動作は、その後に高レベルSportModeだけを狭く開ける。
本稿は2026年8月20日にUnitree公式リポジトリを確認した構成で、ロボ図鑑では実機確認を終えていない。実機を動かしていない手順を実測済みとは扱わない。
0. 動かす前の安全条件
Go2の周囲を空け、人・ペット・階段・壊れ物から離す。無線コントローラを手元に置き、停止操作を人が即座に行える状態にする。最初は脚を浮かせたり低レベルmotor commandを送ったりせず、床上で状態取得だけを行う。
現行の公式go2_sport_clientはtest_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_cpp、CYCLONEDDS_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/requestへunitree_api::msg::Requestを送り、応答を受ける経路である。公式のSportClient exampleにはStandUp、Move、StopMove、Dampなどが実装されている。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へ入れない。必要な制御器がある場合だけ、シミュレータと専用安全監視を通した別プロセスに隔離する。
完了判定
- 専用EthernetでGo2のROS 2 topic一覧を取得できる
- sportmodestateのtimestamp・姿勢・速度を継続して読める
- 高レベル操作は上限付き関数へ閉じている
StopMoveと人の停止手段が先に確認されている/lowcmdを汎用AIへ公開していない
機種の接続口とWebRTC経路はUnitree Go2の標本を参照。