ViVi PLENのキャリブレーションをTCP通信でコマンド直打ちでやっていたのだが、あまりにもまどろっこしいので、純正のPLEN Control Serverで行えないかを試してみた。
いくつか試行錯誤はあったが、何とか動くところまでこぎつけたので記録。
PLEN Control Serverとは:
PLEN2は無線通信をBlueToothによるシリアル通信で行っているが、その通信を請け負い、かつWebサーバとしてふるまうことでアプリケーションの開発を容易にできるもののようだ。
アプリケーション版とPython版の2種類があるが、当然ながらアプリケーション版は動かず。
そこでPython版をGithubから落としてきて中身を見てみた。
https://github.com/plenprojectcompany/plen-ControlServer
結論から言ってしまうと、次の3点を修正すればとりあえず動いた。
1.Control ServerとPLEN2の間のシリアル通信を確立させるのに、デバイス'Arduino Micro'をサーチし、接続を行っていた。ViVi Plenとの接続は有線シリアルなので、返り値として(自分の環境では)'COM3'を決め打ちにする。
2.通信速度の設定が自動で調整されない。115200で決め打ち。
3.自分の開発環境がPython3であったためと思われる違いを修正。
Print分の構文
Serial.write()に与える値がUTFでエラーを吐くため、Strに変更。Serial.write(str.encode())
しかしここで問題が発生。
現在のPLEN2とViVi PLENでは、ベースになっているバージョンが違うらしく、モーションファイルをViViにダウンロードさせようとしても出来なかった。
PLEN2のファームについて、該当部分をViVi PLENに移植を検討。
2020/05/10追記
ViVi PLENでは、モーションファイルをSPIFFSのファイルとして扱う。
それが2Mb、ほかのファイルが合計8Kb使うので、ArduinoIDEの設定でFSを3Mb確保する必要がある。
2020/05/16追記
firmware.ino
void setMotionHeader()内のm_header_tmpへの代入をオリジナルに合わせて変更
Protocol.cpp
30, // MOTION HEADER
を
35, // MOTION HEADER
に変更
JointController.cpp
組み立て説明書通りだとピンの位置とサーボの位置が一致しなかったので、
const unsigned char servo_map[PLEN2::JointController::SUM] = {16, 7, 6, 5, 4, 3, 2, 1, 0, 18, 19, 20, 17, 8, 9, 10, 11, 12, 13, 14, 15, 21, 22, 23};
の3番目と4番目の値を入れ替え
const unsigned char servo_map[PLEN2::JointController::SUM] = {16, 7, 5, 6, 4, 3, 2, 1, 0, 18, 19, 20, 17, 8, 9, 10, 11, 12, 13, 14, 15, 21, 22, 23};
これでシリアル経由だがPLEN Control ServerとViViが繋がった。