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