目次
初めに
本記事では、ユーザー側で用意した外部PCを用いて、SDK(unitree_sdk2)やROS(unitree_ros2)を動かす方法についてご案内します。
環境
環境は、次のようなものを想定しています。
- 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの)
- Docking Station or 外部PC:ubuntu20 / ROS2 foxy
0.参考公式ドキュメント
unitree_sdk2
unitree_ros2
1.環境設定
1-1. Docking Stationの場合
R&D版付属のDocking Staionで行う場合について。
有線でssh接続するには、
ssh unitree@192.168.123.18
- ユーザー名:unitree
- パスワード:123
- IPアドレス:192.168.123.18
になります。
また、内部にリポジトリをスムーズに入れるため、インターネット接続設定を先にしておきます。
(参照:【Unitree Go2】Docking Station のインターネット接続方法)
1-2. 外部PCの場合
市販の外部PCから行う場合は、下記のようにDocking Stationと外部PCをLANケーブルで接続します。
※ Docking Stationを外し、Go2本体に直接LANケーブルを差して使うこともできます。
その後、IPアドレスの設定を行います。
192.168.123.xxxという形で指定します。192.168.123.18と192.168.123.161は既に使われているため、これ以外を使用してください。
これで接続設定は完了しました。
設定がうまく行っていることを確認するために、外部PCとDocking Stationのそれぞれからpingコマンドを実行します。pingが通れば成功です。
$ ping 192.168.123.161
$ ssh unitree@192.168.123.18
$ ping 192.168.123.xxx
(xxxは先ほど決めたIPアドレス)
2.SDKを使う方法
2-1. build
Docking Station/外部PC の適当な場所に、unitree_sdk2を入れます。
その後、READMEの手順通りにbuildを行います。
$ cd /path/to/unitree_sdk2
$ sudo ./install.sh
$ mkdir build
$ cd build
$ cmake ..
$ make
2-2. 実行
例えば、下記のようにすることで、Go2のヘッドライトの明るさを段階的に変えることができます。
$ ./vui_client_example eth0
※仮想環境等を使う場合は、eth0ではない場合があります。ifconfigによって確認することができます
exampleについては詳しくは、下記のFAQをご覧ください。
【Unitree Go2】SDKの概要について【unitree_sdk2】
2-3. 実行時エラーについて
下記のようにreturn 3102となる場合は、接続がうまくいっていません。
(左がエラー時。右は成功時)
左のような場合は、次の2点をご確認ください:
① pingが通るか
$ ping 192.168.123.18
$ ping 192.168.123.161
② ifconfigで192.168.123.xxxと割り振られているものを探し、interface nameを間違えていないか
$ ifconfig
3.ROS2を使う方法
公式ドキュメントは、下記にあります。
※24/6/7追記
アップデートがあり、下記の手順は実際のやり方と少し異なります。具体的には、foxyで行う場合、aptでのcycloneddsのインストールとソースコードからのビルドの両方が必要な仕様になっています
sudo apt update
sudo apt install ros-foxy-rmw-cyclonedds-cpp
sudo apt install ros-foxy-rosidl-generator-dds-idl
として、aptでインストールを行った上で下記と同じ手順を行うと、正しくセットアップすることが可能です。
3-1. build
外部PCのhomeディレクトリ直下に、unitree_ros2を入れます。
homeディレクトリ直下にしない場合は、unitree_ros2_setup.shのpathを修正します。
また、有線ポート名を修正します。Docking Station上で行う場合はeth0になります。外部PC上で行う場合は、eth0ではない場合があります。ifconfigによって確認することができます。(ネットワーク確認ifconfig)
その後、READMEの手順通りにbuildを行います。
$ sudo apt install gedit
$ sudo gedit ~/.bashrc
この時、~/.bashrcにfoxyのsourceがある場合はコメントアウトします。
# source /opt/ros/foxy/setup.bash
そして、terminalを立ち上げなおした後、–packages-selectを用いて、cycloneddsのみをコンパイルします。
$ cd ~/unitree_ros2/cyclonedds_ws/src
$ git clone https://github.com/ros2/rmw_cyclonedds -b foxy
$ git clone https://github.com/eclipse-cyclonedds/cyclonedds -b releases/0.10.x
$ cd ..
$ colcon build --packages-select cyclonedds
buildが完了したら、引き続き同じterminalでfoxyのsetup.bashをし、その後全体のコンパイルをします。
$ source /opt/ros/foxy/setup.bash
$ colcon build
3-2. 実行
$ source ~/unitree_ros2/unitree_ros2_setup.sh
として実行可能です。
デフォルトで出ているros2 topicの確認などが可能です。
(なお、ROS_DOMAIN_ID は、0 にする必要があります。topic listが表示されない場合は ROS_DOMAIN_ID が異なるなどのケースが考えられます)
例えば、4D LiDAR L1の情報は、rviz2を立ち上げてから、/utlidar/cloudトピックで確認できます。
$ ros2 run rviz2 rviz2
frameは utlidar_lidar にします。
(LiDAR中心の座標系で表示されているため、上下が逆さまで表示されており、斜めの平面が地面を表している)
他には、/sportmodestateで各種情報を取得できます。
$ ros2 topic echo /sportmodestate
例えば足先の肉球を押すと、foorforceの値が大きくなる。
3-3. ROS2のexampleを動かす
ROS2のexampleもいくつか用意されており、下記のように行うことでコンパイルできます。
$ source ~/unitree_ros2/unitree_ros2_setup.sh
$ cd ~unitree_ros2/Go2_ROS2_example
$ colcon build
実行はドキュメントだと下記のように書かれています。
$ ./install/go2_demo/lib/go2_demo/read_motion_state
ただ、CMakeListsを下記補足2のように行えば、普通のROS2の方法でも問題なくできます。
$ . install/setup.bash
$ ros2 run go2_demo
3-おまけ. humble環境で行う場合
humble環境で行う場合は、rmw_cyclonedds(branch:humble)を同じような手順でコンパイルするとエラーが発生します。
ただrmwについてはaptでインストール可能なので、下記のようにhumbleのrmwを入れてあれば、rmwをコンパイルせずに進めて同じように行うことができます。
(参考:Eclipse Cyclone DDS / humble、Eclipse Cyclone DDS / foxy)
$ sudo apt install ros-humble-rmw-cyclonedds-cpp
$ sudo apt install ros-humble-rosidl-generator-dds-idl
$ cd cyclonedds_ws
$ colcon build
※unitree_go, unitree_apiのコンパイルは必須
※unitree_ros2_setup.shについては、export RMW_IMPLEMENTATION=rmw_cyclonedds_cppは必須
※24/6/7追記
humbleで使う場合は、aptでのインストールのみでよい。setup.shを下記のように修正する。基本的にはexport RMW以下の行を実行すればよい。例えば下記。なお、NetworkInterfaceはそのPCのインターフェイスに合わせる必要があります。
#!/bin/bash
echo "Setup unitree ros2 environment"
source /opt/ros/humble/setup.bash
#source $HOME/unitree_ros2/cyclonedds_ws/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces>
<NetworkInterface name="enp3s0" priority="default" multicast="default" />
</Interfaces></General></Domain></CycloneDDS>'
またexampleに移動してcolcon buildすれば、こちらのサンプルも問題なく使えます。
3-おまけ2. ros2 runで起動したい場合
通常のros2のノードを起動するように、ros2 runコマンドを使用したい場合はCMakeLists.txtのinstallの中のDESTINATIONの後の部分を追記し、コンパイルすることで行うことができます。
install(TARGETS
low_level_ctrl
read_low_state
read_motion_state
read_wireless_controller
sport_mode_ctrl
DESTINATION lib/${PROJECT_NAME})
おわりに
Go2のSDK/ROSの外部PCにおけるセットアップ方法を見てきました。
Go1の時に比べ、メーカーのドキュメントがしっかり書かれているため、基本的にはREADMEを見ながら進めて頂ければセットアップできるかと思います。
この記事が少しでも役に立てたのなら幸いです。