【Unitree Go2】Go2の2次開発デモを作ってみた

【Unitree Go2】Go2の2次開発デモを作ってみた

初めに


本記事では、Go2を用いて2次開発を行ってみるという内容になります。 具体的には、ROS2とapriltagを用いて、特定のマーカーを見つけたらGo2が動くというような簡易デモを作成してみます。 ※ハンズオンセミナー用セミナーPDF
 

環境


環境は、次のようなものを想定しています。
  • 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの)
  • Docking Staion:ubuntu20 / ROS2 foxy (Orin Nano/NX、どちらでも可。外部PCでも可)
 

1.Go2内部搭載のカメラを用いてapriltagの検出を行う



1-1. gstreamerを用いた画像取得

まずgstreamerを用いることで画像取得を行ってみます。 これを行うために、DockingStationのGUIをNoMachineを用いて表示できる環境を用意します。 (参照:【Unitree Go2】NoMachineでDocking StationのGUIを使う) そして、公式ドキュメントのように、gstreamerを用いることで画像取得を行うことができます。
  1. $ gst-launch-1.0 udpsrc address=230.1.1.1 port=1720 multicast-iface=eth0 ! queue ! application/x-rtp, media=video, encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
gstreamerを用いたシンプルな画像取得と表示
Go2の状態

1-1-補足. ROS2によるカメラ画像取得について

カメラ画像の取得をROS2トピックで行うことは、直接はサポートされていません。 例えば、下記のようなものを用いて、GSTからtopicに変換してください。 画像をトピックで配信するサンプルコード

1-2. apritlagを用いたマーカー検出

次にapriltagを用いてマーカー検出を行います。 apriltagとはマーカー検出のオープンソースです。 適当な場所にapriltagをダウンロードし、インストールします。
  1. $ git clone https://github.com/AprilRobotics/apriltag.git $ cd apriltag $ mkdir build $ cd build $ cmake .. $ make $ sudo make install
その後、適当な場所に弊社で作成したapriltag検出のc++プログラムもダウンロードし、コンパイルします。
  1. $ git clone https://github.com/TechShare-inc/simple_apriltag $ cd simple_apriltag $ mkdir build $ cd build $ cmake .. $ make
最後に実行します。
  1. $ ./example_detect_gst
apriltag(36h11)の印刷を行い、カメラに映るようにすると下記画像のように検出してくれるはずです。 この後でid:303番(36h11)のapriltagを使用しますので、303番だけは印刷しておいてください。 マーカー検出 これでapriltagの検出はできるようになりましたが、今回はROS2を用いてデモを作成するので、このコードをROS2にします。

1-3. マーカー検出をROS2 serviceで行う

適当な場所にworkspaceを作り、弊社で作成したROS2 service型のマーカー検出プログラムを用いて、マーカー検出を行います。
  1. $ mkdir detect_apriltag_ws $ cd detect_apriltag_ws $ mkdir src $ cd src $ git clone https://github.com/TechShare-inc/simple_apriltag -b foxy_service --recursive $ cd .. $ colcon build
※detect_apriltag_wsの名前は任意 colcon buildというのがROS2におけるbuildシステムであり、これによりc++コードをコンパイルします。 今回の実装では、serviceというタイプの実装です。 serverは、client側からリクエストを受けると検出を行い、client側にresponseを返すという構造になっています。 なお、unitree_ros2で構築したunitree_ros2_setup.shで環境設定をしておかないとうまくいかないことがあるため、それをしてから実行します。 terminal 1: (service server)
  1. $ source /path/to/unitree_ros2/unitree_ros2_setup.sh $ source install/setup.bash $ ros2 run apriltag_service service_server_gst
terminal 2: (service client)
  1. $ source /path/to/unitree_ros2/unitree_ros2_setup.sh $ source install/setup.bash $ ros2 run apriltag_service service_client
※/path/to/unitree_ros2/unitree_ros2_setup.shはunitree_ros2の実際のパスに合わせる
 

2.Go2の2次開発デモ



2-1. 運動制御nodeを作成する

まず前提として、unitree_ros2を導入できている状態にします。 (参照:【Unitree Go2】SDK or ROSを使う方法) 適当な場所にworkspaceを作り、弊社で作成したGo2デモプログラムをダウンロード、コンパイルします。
  1. $ mkdir go2_demo_ws $ cd go2_demo_ws $ mkdir src $ cd src $ git clone https://github.com/TechShare-inc/go2_unitree_ros2 $ cd .. $ source /path/to/unitree_ros2/unitree_ros2_setup.sh $ source /path/to/detect_apriltag_ws/install/setup.bash $ colcon build
※go2_demo_wsの名前は任意 ※/path/to/unitree_ros2/unitree_ros2_setup.shはunitree_ros2の実際のパスに合わせる ※/path/to/detect_apriltag_ws/install/setup.bashは1で作成したtag検出プログラムの実際のパスに合わせる

2-2. 実行

terminal 1: (service server)
  1. $ source /path/to/unitree_ros2/unitree_ros2_setup.sh $ source install/setup.bash $ ros2 run apriltag_service service_server_gst
terminal 2: (service client)
  1. $ source /path/to/unitree_ros2/unitree_ros2_setup.sh $ source install/setup.bash $ ros2 run go2_demo tag_move_demo

id:303(36h11)のapriltagを見つけると180度回転する。  

おわりに

Go2の2次開発デモを実際に作る方法を見てきました。 この記事が少しでも役に立てたのなら幸いです。  
    • Related Articles

    • 【Unitree B2】B2の開発環境概要

      初めに 本記事では、B2の開発環境についてご案内します。 参考資料: B2 SDK Development Guide - UnitreeRobotics 環境 環境は、次のようなものを想定しています。 機種: B2 1.概要 結論から述べると、B2の開発環境はGo2とほぼ同じになります。 例えば、弊社FAQで紹介している2次開発デモ(【Unitree Go2】Go2の2次開発デモを作ってみた)をそのままB2で行っても問題なく動作することが確認できました。 ...
    • 【Unitree Go2】SDKの概要について【unitree_sdk2】

      初めに Go2 R&Dがついに日本上陸しました。 SDKもGo1の時から大幅アップデートしています。 本記事では、Go2 SDKのexampleの概略についてご案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 実行コンピュータ:ubuntu20 ...
    • 【Unitree Go2】SDK or ROSを使う方法

      初めに 本記事では、ユーザー側で用意した外部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 Obtain SDK - Go2 SDK ...
    • 【Unitree Go2】メーカー資料について

      本記事ではGo2のメーカー公式資料等についてご案内します。 (1) スマホアプリ Unitree Go - Google Play Unitree Go - Apple Store app 注意:12/4現在開発中のため、一部動作しない機種がございます。 (2) オンラインSDK資料 R&D(EDU)版について: Go2 SDK Development Guide - UnitreeRobotics R&D(EDU)版githubになります: unitree_sdk2 - github ...
    • 【Unitree Go2】NoMachineでDocking StationのGUIを使う

      初めに 本記事では、ユーザー側で用意した外部PCからDocking StationのGUIを使う方法を案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 外部PC:ディスプレイがあるWindows/Mac/Linux 1.環境設定 何らかの方法でDocking Stationにssh接続します。 有線接続の場合は、【Unitree Go2】外部PCからSDK or ...