はじめに
主にロボットの開発はROSを使用したものが多いですが、学習コストが高いのでロボット開発をしたことない人にとっては敬遠しがちです。そこで公式のレポジトリを使用してROSを使わずにPythonだけでの開発方法をご紹介したいと思います。
開発環境
Go2本体:EDU (二次開発可能版)
外部PC:Ubuntu 20.0.4 LTS
事前準備
事前に外部PCからDocking Stationへ接続できるようにする必要があります。
SDKのダウンロード&インストール
事前にUbuntuにPython3がインストールされていることを確認してください。
$ python -V
公式のSDKをクローンします。
$git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
Python依存関係
- Python >= 3.8
- cyclonedds == 0.10.2
- numpy
- opencv-python
こちらのコマンドを実行してSDKに必要なライブラリをインストールします。
$pip install unitree_sdk2py
Helloworldの実行
ライブラリが正しくインストールされているかの動作確認のためExampleにあるHellowordを実行します。
下記コマンドをそれぞれのターミナルで実行してください。成功していれば、DDSコミュニケーションでPublisherの内容がSubscriberで表示されていることが確認できます。
$ python3 ./example/helloworld/publisher.py
$ python3 ./example/helloworld/subscriber.py

サンプルプログラムの実行
Docking Stationとの接続に使用しているインターフェースの確認が必要なので、下記コマンドを実行して確認します。有線を使用しているので、192.168.123.222と書かれているenp3s0がインターフェースになります。
ハイレベルモード
Unitree側で提供されている動作を呼び出すことができ、IDか動作名を入力することで実機をコントロールすることができます。※思わぬ動作をする可能性があるため広い場所で実行してください。コマンド一覧についてはこちらを参考してください。
$ python3 ./example/go2/high_level/go2_sport_client.py enp3s0

option_list = [
TestOption(name="damp", id=0),
TestOption(name="stand_up", id=1),
TestOption(name="stand_down", id=2),
TestOption(name="move forward", id=3),
TestOption(name="move lateral", id=4),
TestOption(name="move rotate", id=5),
TestOption(name="stop_move", id=6),
TestOption(name="switch_gait", id=7),
TestOption(name="switch_gait", id=8),
TestOption(name="balanced stand", id=9),
TestOption(name="recovery", id=10),
TestOption(name="recovery", id=10),
TestOption(name="left flip", id=11),
TestOption(name="back flip", id=12),
TestOption(name="free walk", id=13),
TestOption(name="free bound", id=14),
TestOption(name="free avoid", id=15),
TestOption(name="walk stair", id=16),
TestOption(name="walk upright", id=17),
TestOption(name="cross step", id=18),
TestOption(name="free jump", id=19)
]
ローレベルモード
下記スクリプトを実行することで各関節ごとに指令を出すことが可能です。こちらのサンプルでは立ち上がりと伏せが行われます。
$ python3 ./example/go2/low_level/go2_stand_example.py enp3s0
カメラ映像取得
Go2本体の頭に設置されているカメラの映像を取得します。
実行するとフロントカメラの映像が別ウィンドウで表示されます。裏側でOpenCVを使用して画像をリタルタイムで表示しています。
$ python3 ./example//front_camera/camera_opencv.py
写真の撮影も行うことができます。撮影された画像はプロジェクトフォルダのルートに保存されます。
$ python3 ./example/front_camera/capture_image.py

LED/スピーカー音量のステータス取得と操作
こちらのサンプルで正面のLEDの明るさとスピーカー音量の操作を行うことができます。
$ python3 example/vui_client/vui_client_example.py

ジョイスティックのステータス取得
スティックや各種ボタンの値を取得することができます。先ほどのハイレベルモードと組み合わせることで、ボタンに別の動作を割り当てることが可能になります。
デフォルトのコードが二足歩行向けになっているので下記修正が必要となります。
$ python3 example/wireless_controller/wireless_controller.py
# Uncomment the following two lines when using Go2、Go2-W、B2、B2-W、H1 robot
# from unitree_sdk2py.idl.default import unitree_go_msg_dds__LowState_
# from unitree_sdk2py.idl.unitree_go.msg.dds_ import LowState_
# Uncomment the following two lines when using G1、H1-2 robot
from unitree_sdk2py.idl.default import unitree_hg_msg_dds__LowState_
from unitree_sdk2py.idl.unitree_hg.msg.dds_ import LowState_

おわりに
一通りサンプルを動かしてみました。これでROSを使用しなくても画像検知と組み合わせた動作であったりがPythonの知識だけで実装できるのではないでしょうか。