初めに
Go1は電源をつけると自動で立ち上がりますが、開発で使用する場合、毎回ジョイスティックコントローラーで犬を伏せさせるのは手間ですよね。
また、Go1を立ったままにしておくと伏せた状態に比べて電力消費が大きくなり、バッテリーがゼロになれば倒れてしまうなどの問題もあります。
そこで、本記事ではGo1を自動で伏せさせる方法をご案内します。
環境
環境は、次のようなものを想定しています。
- 機種: R&D(Edu), R&D+(Edu+)(Proではないもの)
- unitree_legged_sdk: v3.5.1以上(本記事ではv3.8.6を使用)
本記事では、Go1を伏せさせるプログラムの作成およびGo1独自の自動起動(~/Unitree/autostart)を使用した自動伏せプログラムの実装方法について説明します。
1.運動系SDKの修正し、伏せさせるプログラムを作成する
まず、unitree_legged_sdkのexample_walk.cppを修正して、伏せを行うプログラムを作成します。
ダウンロードしたunitree_legged_sdk内にsrcフォルダを作成し、そこにexample_walk.cppをコピーします。コピーしたファイルをsit_down.cppという名前で保存します。
次に、example_walk.cppの運動を記述しているif文の部分を削除します:
その後、伏せさせるプログラムを記述します:
if (motiontime > 1000 && motiontime < 3000)
{
cmd.mode = 5;
}
if (motiontime > 3000 && motiontime < 4000)
{
cmd.mode = 7;
}
sleep(1);
if(custom.motiontime > 4000)
break;
※ コメントアウトした部分はEnterキーを押さなければならない箇所です
※ 伏せさせたらSDKを終了させなければならないので、while文内も変更します
最後に、CMakeLists.txtを修正します:
これで伏せるプログラムの作成が完了しました。
次は実際にプログラムを実行してみましょう。
2.作成したプログラムのコンパイル&実行
作成したunitree_legged_sdkをGo1の内部にあるRaspberry Piの適当な場所に配置し、コンパイルします:
$ cd unitree_legged_sdk-go1
$ mkdir build
$ cd build
$ cmake ..
$ make
そして実行します:
$ ./sit_down
Go1が伏せれば、成功です。
3.Go1の自動起動プログラムの修正を行う
Unitree Go1の自動起動プロセスの一部は、内部のRaspberry Piの~/Unitree/autostartディレクトリで行われます。
特に、~/Unitree/autostart/triggerSportは自動で立ち上がるプログラムを担当しています。
Unitree/autostart内の自動起動は、~/Unitree/autostart/.startlist.shで規定された一連のプログラムを順に実行する仕組みです。
以下の修正を行うと、triggerSportが無効になります:
ただし、triggerSportを無効にすると通常のジョイスティックコントローラーでの操作ができなくなります。
そのため、本記事では、triggerSportで立ち上がった後に最後に伏せる方法を採用します。
まず、~/Unitree/autostart内に、sitDownフォルダを作成します:
$ mkdir sitDown
$ cd sitDown
次に、以下の内容でsitDown.shを作成します:
#!/bin/bash
cd ~/ishika_ws/unitree_legged_sdk-go1/build;
./sit_down;
最後に、sitDown.shを実行可能にします:
$ chmod +x sitDown.sh
※ ./sitDown.shを実行した場合にも2.と同様の結果が得られるか確認しましょう。
これで準備が完了しました。
次に、~/Unitree/autostart/.startlist.shを修正して自動起動の設定を行います:
これで、電源を切ってから再び電源を入れると、自動でGo1が伏せてくれるはずです。
おわりに
Go1を自動で伏せさせる方法を見てきました。
この記事が少しでも役に立てたのなら幸いです。