【Unitree Go1】超音波センサー値の取得方法について

初めに


Unitree Go1の一部機種には、頭部、右脇腹、左脇腹の3カ所に超音波センサーが搭載されています。(2022年7月以前にご購入の場合)
本稿では、Unitree Go1に搭載された超音波センサーの値を取得する方法についてご案内します。

基本的には、以下の3つの方法が考えられます。

  1. ROSのtopicより取得する方法
  2. rangeObstacleより取得する方法
  3. includeファイルを用いて取得する方法

順番に説明していきます。

 

目次


 

環境


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

  • 機種: 超音波センサー搭載のR&D(Edu), R&D+(Edu+)(Proではないもの)
  • unitree_legged_sdk: v3.8.0(v3.5.1でも問題ないです)

 

1.ROSのtopic


Go1の電源をつけると、デフォルトでRaspberryPiを中心としたROSのネットワークが起動します。その際、流れるtopicに、

/range_ultrasonic_face
/range_ultrasonic_left
/range_ultrasonic_right

がありますので、こちらより超音波センサーのデータ取得が可能です。
具体的な手順例は以下の通りです:

Step.1

Go1内部にアクセスします。
今回はデフォルトで起動するGo1のWi-Fiから無線接続で行ってみます。
Wi-Fiに接続後、ターミナルから次のコマンドを入力します:

$ ssh pi@192.168.12.1


passwordは123を入力。

Step.2

Go1内部のRaspberryPiに入りましたら、次のコマンドを入力します:

$ rostopic echo /range_ultrasonic_right


上のようなものが高速で流れていれば、成功です。
対応関係はそれぞれ、

/range_ultrasonic_face:頭部の超音波センサー
/range_ultrasonic_left:左脇腹の超音波センサー
/range_ultrasonic_right:右脇腹の超音波センサー

と対応しています。

 

2.rangeObstacle


unitree_legged_sdkのHighStateにあるrangeObstacleより、超音波センサーのデータ取得が可能です。

Step.1

Go1内部のRaspberryPiに接続し、unitree_legged_sdkに移動します。
今回は、example_walk.cppを編集して、超音波センサーの値を取得しようと思います。

具体的には、example_walk.cppについて、if文を削除&以下のprint文を追加

printf(“rangeObstacle= [ %f, %f, %f, %f]\n”, state.rangeObstacle[0], state.rangeObstacle[1], state.rangeObstacle[2], state.rangeObstacle[3]);


これをexample_walk-edit.cppという名前で保存することにします。

Step.2

作ったexample_walk-edit.cppをコンパイルするために、CMakeLists.txtに以下の行を追加します:

add_executable(example_walk-edit example/example_walk-edit.cpp)
target_link_libraries(example_walk-edit ${EXTRA_LIBS})

Step.3

ビルドして実行します:

$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./example_walk-edit


上のようなものが高速で流れていれば成功です。
周りとの対応が取れているはずです。

対応関係はそれぞれ、

/rangeObstacle[0]:頭部の超音波センサー
/rangeObstacle[1]:左脇腹の超音波センサー
/rangeObstacle[2]:右脇腹の超音波センサー

と対応しています。

3.includeファイル


Go1内部RaspberryPiの~/Unitree/autostart/utrack/ultrasonic_listener_exampleに、超音波のサンプルプログラムがあります。(環境によってはPATHが少々異なるかもしれません)
このフォルダ内にあるincludeファイルを用いれば、2次開発における利用が可能となっています。
具体的な手順例は以下の通りです:

Step.1

Go1内部のRaspberryPiに接続し、ultrasonic_listener_exampleに移動します:

$ cd ~/Unitree/autostart/utrack/ultrasonic_listener_example

Step.2

include/lcm_msgs内で、ヘッダーファイルを生成します:

$ cd include/lcm_msgs
$ lcm-gen -x ultrasonic_data.lcm


ヘッダーファイルが生成されていれば、成功です。

Step.3

ビルドして実行します:

$ cd ~/Unitree/autostart/utrack/ultrasonic_listener_example
$ mkdir build
$ cd build
$ cmake ..
$ make
$ cd ../bin
$ ./ultrasonic_listener_lcm



上のようなものが高速で流れていれば、成功です。

Step.4

実際にunitree_legged_sdkで超音波センサーの値を用いる場合(特にLOW LEVEL)、ultrasonic_data.hppをincludeすれば超音波センサーの値の取得が可能となります。

本記事ではこれ以上は扱いませんが、2次開発で使いたい方はultrasonic_listner_lcm.cppを参考にしてみてください。

 

おわりに


ROS、SDK問わず超音波センサーの値が取得できることを見てきました。

この記事が少しでも役に立てたのなら幸いです。

コメントを残す

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