1. はじめに
Go1をROSを用いて運動制御するために、Unitree社はunitree_ros_to_real パッケージを公開しています。
Go1の運動制御には二種類あり、ハイレベル制御はデフォルトの歩行パターンを利用するもので、ローレベル制御はそれを利用せず各モーターの角度や角速度、トルクを制御するものです。本稿では、Go1に無線接続をし、外部PC上からunitree_ros_to_real のハイレベル制御を実行する方法をご案内します。
※ Go1内部にはデフォルトでROSが含まれていますが、外部のROSのノードを内部のROSネットワークに接続するなどして内部・外部のROSをまたいで通信しようとすると、Go1の設計上では煩雑になります。
一方で、unitree_ros_to_real を外部PCで実行する場合では、内部のRaspberry PiにUDP通信することでGo1を動かしています。
Github unitree_ros_to_real: https://github.com/unitreerobotics/unitree_ros_to_real
2. 環境
以下の環境にて、この手順が有効であることを確認しています。
- 機種: R&D(Edu), R&D+(Edu+)
- 外部PC: Linux Ubuntu 20.04 (amd64)
- ROS: Noetic
- unitree_legged_sdk: v3.8.6
3. 手段
3.1 GO1への無線接続
外部PCをGo1からデフォルトで出ている「Unitree_Go〇〇〇〇〇〇A」というWi-Fiに接続し、パスワードを入力します。
$ ping 192.168.12.1
で、無線接続できていることを確認します。
3.2 パッケージのダウンロード
適宜にワークペース(ここではcatkin_ws)とソースディレクトリを作り、unitree_ros_to_real と依存パッケージのunitree_legged_sdk をクローンします。
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ git clone https://github.com/unitreerobotics/unitree_ros_to_real
$ git clone https://github.com/unitreerobotics/unitree_legged_sdk
3.3 宛先のIPアドレスの変更
接続したWi-FiでUDP通信を行いハイレベル制御をするためには、以下のようにros_udp.cpp 内の宛先のIPアドレスを192.168.12.1
に変更します。
変更後、ビルドします。
$ cd ~/catkin_ws
$ catkin_make
最後に、ワークスペースを有効化します。
$ source devel/setup.bash
3.4 実行
(1) はじめにローンチファイルを実行
$ roslaunch unitree_legged_real real.launch ctrl_level:=highlevel
または、キーボードで操作したい場合は、
$ roslaunch unitree_legged_real keyboard_control.launch
を実行する。サンプルでは、”w”/”s”/”a”/”d” で前後左右に動く、”j”/”l” で左右に曲がる、”q” で終了となっています。
(2) プログラムの実行
unitree_ros_to_real には、サンプルのプログラムが複数含まれています。ハイレベル制御については、
$ rosrun unitree_legged_real example_walk
動作の様子:
- ロボットからフィードバックを受け取る
$ rosrun unitree_legged_real state_sub
関連記事
【Unitree Go1】外部PC上でunitree_legged_sdkを実行する方法
【Unitree Go1】外部PC上から無線で unitree_ros_to_real を実行する:ローレベル制御