目次
初めに
Unitree Go1の一部機種には、頭部、右脇腹、左脇腹の3カ所に超音波センサーが搭載されています。(2022年7月以前にご購入の場合)
本稿では、Unitree Go1に搭載された超音波センサーの値を取得する方法についてご案内します。
基本的には、以下の3つの方法が考えられます。
- ROSのtopicより取得する方法
- rangeObstacleより取得する方法
- 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問わず超音波センサーの値が取得できることを見てきました。
この記事が少しでも役に立てたのなら幸いです。