ultraArmをmyBlocklyで動かしてみた

前回はスイッチサイエンスで発売前のultraArmをいち早く試しました。

supernove.hatenadiary.jp

このときはPythonを使って操作をしていましたが、せっかくならmyCobotの時みたいにビジュアルプログラミングで動かしたいわけです。

というわけで今回はmyBlocklyでultraArmを動かしてみます。

動作環境

  • Windows10(Ubuntuでやろうとしたら起動できなかったです…)
  • Python 3.10.11(3.5以上であれば問題なさそうです:参考)

インストール

Pymycobotをインストール

PowerShellコマンドプロンプトを開き、以下のコマンドでPymycobotをインストールします。

pip install pymycobot --upgrade --user

シリアルドライバをインストール

ultraArmとシリアル通信をするためにこちらのドライバをインストールします。

myBlocklyをインストール

こちらからインストーラーをダウンロードしてインストールをします。

簡単に手順を書きましたが、これで必要なセットアップはできました。

プログラミング

今回は前回のように動き回るようなフローを作成しました。

動かす前には【Go zero】ブロックでキャリブレーションしないとアームの姿勢を制御できませんでした。(Pythonでは起動時に必ずキャリブレーションするっぽい?)

上のスクショのフローを読み込めるJSONは以下です。このフローを使うときは以下のJSONを適当なファイル名で保存してmyBlocklyからファイルを読み込みます。

{"mode":"single","json":{"blocks":{"languageVersion":0,"blocks":[{"type":"init_mycobot","id":"{Ba_ap)xGJRhC()o!d)k","x":10,"y":10,"fields":{"ROBOT":"ultraArm","PORT":"COM7","BAUD":"115200"},"next":{"block":{"type":"mypalletizerprolite_go_zero","id":"cXC1zxmMLBPaIMY*$Q~a","next":{"block":{"type":"mypalletizerprolite_sleep","id":"U8`Y54l=AD@BkKY$|uOZ","inputs":{"TIME":{"shadow":{"type":"math_number","id":"JNj$%~c9)Nw_]b]pI2P}","fields":{"NUM":1}}}},"next":{"block":{"type":"mira_set_angles","id":"%4YtOoy;BG%2t7)POMdo","inputs":{"J1":{"shadow":{"type":"mira_j1_slider","id":"GAGtn:0~Q^{uQCNLzgZ}","fields":{"NUM":0}}},"J2":{"shadow":{"type":"mira_j2_slider","id":"]W)rU1=36!?!A/r~mXOz","fields":{"NUM":0}}},"J3":{"shadow":{"type":"mira_j3_slider","id":"7[2$t6UY3v$n_8(QO%Uz","fields":{"NUM":0}}},"F":{"shadow":{"type":"mira_speed_slider","id":"!8d=:4E8dz1=yJVs~zge","fields":{"NUM":50}}}},"next":{"block":{"type":"mypalletizerprolite_sleep","id":"$=NudmkD?Lp@0$i%ZebS","inputs":{"TIME":{"shadow":{"type":"math_number","id":")9+?5?33rK84ObMoaG^/","fields":{"NUM":1}}}},"next":{"block":{"type":"mira_set_angles","id":"|i?VrIwe:auc*O7:Bw=m","inputs":{"J1":{"shadow":{"type":"mira_j1_slider","id":"@H@k[b]BE??Hh7?pk9*N","fields":{"NUM":-45}}},"J2":{"shadow":{"type":"mira_j2_slider","id":"[#O.,/gdprf/BluPz{mG","fields":{"NUM":-20}}},"J3":{"shadow":{"type":"mira_j3_slider","id":"+JTQa@|IaEx7LYShcHRV","fields":{"NUM":50}}},"F":{"shadow":{"type":"mira_speed_slider","id":"{^6WZl6Plqxlx,Zuo3ty","fields":{"NUM":50}}}},"next":{"block":{"type":"mypalletizerprolite_sleep","id":"Wr[j63N_vUVBf.Jyu4!o","inputs":{"TIME":{"shadow":{"type":"math_number","id":"2mM,yS,+.Rhg?3Bt!~UI","fields":{"NUM":1}}}},"next":{"block":{"type":"mira_set_angles","id":"i^og:^?;DFhe+({pwpBp","inputs":{"J1":{"shadow":{"type":"mira_j1_slider","id":":R4c5iMrq^:zqj$y+$9/","fields":{"NUM":110}}},"J2":{"shadow":{"type":"mira_j2_slider","id":"kk*wn@MZGC;lnC?!sXi6","fields":{"NUM":50}}},"J3":{"shadow":{"type":"mira_j3_slider","id":",kZ6m)1*s1^ststT#Ld,","fields":{"NUM":10}}},"F":{"shadow":{"type":"mira_speed_slider","id":"rjW|;fYW%O(X$vG9-q`c","fields":{"NUM":50}}}},"next":{"block":{"type":"mypalletizerprolite_sleep","id":"d28@{kGo/HvsdEb!teX.","inputs":{"TIME":{"shadow":{"type":"math_number","id":"Lx7CUn8+`LrH0.tXp[/k","fields":{"NUM":1}}}},"next":{"block":{"type":"mira_set_angles","id":"mr%7dWSJ=;Ab~c9]9]WJ","inputs":{"J1":{"shadow":{"type":"mira_j1_slider","id":"V3z96M!WB1YH-?(-sFb0","fields":{"NUM":0}}},"J2":{"shadow":{"type":"mira_j2_slider","id":"I1uPC;4^X_y4}=gyUh~p","fields":{"NUM":0}}},"J3":{"shadow":{"type":"mira_j3_slider","id":"~%x/.f-x7L}plJRhvc{!","fields":{"NUM":0}}},"F":{"shadow":{"type":"mira_speed_slider","id":"8l?k1BuN26@Q|v,#y8mc","fields":{"NUM":50}}}},"next":{"block":{"type":"mypalletizerprolite_release_all_servos","id":"quz(9*~=3$WgjYM-|zre"}}}}}}}}}}}}}}}}}}}}}]}}}

JSONファイルを読み込むときは、エディタ右上の青いアイコンから「Load」をクリックすることでフローを読み込めます。

読み込む前にInitブロックで使用するロボットアームの名前とポート番号をしておかないと読み込んだフローが削除されます。

フローを作成したらエディタの右上の「Run」ボタンをクリックするとなめらかな動きをします。

まとめ

今回はultraArmをmyBlocklyで動かしてみました。

myCobotの時みたいに手軽にプログラムをできましたが、公式ドキュメントではサンプルが無かったので所見だと動かし方がよく分からなかったので、メモ的な感じで手順をまとめてみました。

いち早くultraArmを触っているので、myBlocklyで動かしたい人たちの参考になったら嬉しいです!