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

初めに


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

※ハンズオンセミナー用
セミナーPDF
記事の内容をひとまとめにしたgithub

 

環境


環境は、次のようなものを想定しています。

  • 機種: 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を用いることで画像取得を行うことができます。

$ 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をダウンロードし、インストールします。

$ git clone https://github.com/AprilRobotics/apriltag.git
$ cd apriltag
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

その後、適当な場所に弊社で作成したapriltag検出のc++プログラムもダウンロードし、コンパイルします。

$ git clone https://github.com/TechShare-inc/simple_apriltag
$ cd simple_apriltag
$ mkdir build
$ cd build
$ cmake ..
$ make

最後に実行します。

$ ./example_detect_gst

apriltag(36h11)の印刷を行い、カメラに映るようにすると下記画像のように検出してくれるはずです。
この後でid:303番(36h11)のapriltagを使用しますので、303番だけは印刷しておいてください。

マーカー検出

これでapriltagの検出はできるようになりましたが、今回はROS2を用いてデモを作成するので、このコードをROS2にします。

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

適当な場所にworkspaceを作り、弊社で作成したROS2 service型のマーカー検出プログラムを用いて、マーカー検出を行います。

$ 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)

$ source /path/to/unitree_ros2/unitree_ros2_setup.sh
$ source install/setup.bash
$ ros2 run apriltag_service service_server_gst

terminal 2: (service client)

$ 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デモプログラムをダウンロード、コンパイルします。

$ 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)

$ source /path/to/unitree_ros2/unitree_ros2_setup.sh
$ source install/setup.bash
$ ros2 run apriltag_service service_server_gst

terminal 2: (service client)

$ 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次開発デモを実際に作る方法を見てきました。
この記事が少しでも役に立てたのなら幸いです。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です