ScratchからKinectを使ってPepperを制御する
今回はScratchからKinectを使ってPepperを制御してみた。
僕はアルデバランというPepperがうじゃうじゃいる所に行き、ワークショップに参加した。
ワークショップの内容は「ScratchとPepperを通信させる」こと。
申し込みWEBサイトをみたときは、目が点に・・・。とまではいかないが、本当に驚いた。
当日
道に迷い、開始時間に少し遅れてしまった。
急いでアルデバランの部屋に向かうとそこは満員電車と化していた。
石原さんに座れそうな場所を教えて頂き、やっと座れた。
部屋のすぐ外にはPepperの長蛇の列。
ちょっとPepper怖い。
さて、本題へ戻ろ。
会場にはScratchとPepperを通信させるための下準備をしてきた人は、ほとんどいなかった。
※下準備・・・下記の2つのWEBサイトに書かれたセットアップ手順に従い、ファイルをダウンロードすること。
①
②
僕はPepperを制御しようと思ったが、まだ下準備が完全には済んでいなかった。
Pepperのプログラムを開発するための「Choregraphe」をインストールしていなかったのだ。
だが、それはすぐに解消された。
スタッフの人のUSBにSetupするアプリケーションが入っていたのだ。
なんと親切な。
すぐさまChoregraphe 2.4.3Setupアプリケーションを起動し、インストール!
ポチッとな。
インストール中・・・・
タッタカターン♪
完了。
Choregraphe 2.4.3起動。
動いた。イェイ👍
さぁ、早速Pepper実機と接続だ。
WiFiのマークのような赤丸で囲ってある緑の接続ボタンを押し、繋げたいPepperを選択、接続。
これで良いはずなのだが、繫がらない😢
スタッフの人に聞くと「Windows10だからできないのかもしれない。」と言われ、急遽、会場にあったMacをお借りして繋げることに。
僕はMacを本格的にプログラミングなどで使うのは初めてだった。
今回のWSの主催者の谷口さんがMacの使い方を教えてくださった。
Macで再試行するとスムーズにPepperと繋げることができた。
そのため、「やっぱり、Windows10だから動かないのかな」と僕もこの時点では思っていた。
このまま、お借りしたMacでガンガン進めようと思ったが、このMacにはScratch1.4もScratch_OSC_Bridgeも入っていなかった。
つまり、Choregraphe 2.4.3以外必要なアプリケーションが入っていないのだ😱
そこへ、谷口さんが来て救いの手を差し伸べてくれた。(少々、大げさ)
「Windows10でScratch1.4をScratch_OSC_BridgeでPepperに繋ぎ、PepperのプログラムはMacのChoregraphe 2.4.3で開発すればいいじゃないか」と言われたのだ。
最初、僕は何を言われているのか分からなかった。
頭の回転速度がついていかなかったのだ。
だが、谷口さんは再度、敬語で優しく教えて下さった。
それもあり、理解することができた。
まず、MacのChoregrapheを立ち上げ、上記Webサイトの②のPepperのサンプルプログラムを開く。
次に、僕のWindowsPCのScratch1.4を立ち上げ、上記Webサイトの②のScratchのサンプルプログラムを開き、遠隔センサ接続を有効にする。
※遠隔センサ接続については下記WEBサイト参照。
Scratch(スクラッチ)を外部のプログラムなどとつなぐ「遠隔センサー接続」を解説する(その1) - 僕は発展途上技術者
そして、肝心のPepperとScratchを繋げるScratchOSCBrigeを立ち上げ、下記写真の赤枠部分に「Connected with Scratch」と表示された。
「よっしゃー!」と言いたいところだが、ここからが難関。(やり方もブログの書き方も(笑))
この後にPepperのIPアドレスとPortの入力、作成があります。
まず、黄色の枠部分にPepperのIPアドレスを入力し、橙色の枠部分のボタン「SET HOST IP-ADDRESS」をクリック。
次に紫色の枠部分の「9000」を「8000」に打ち替え、桃色の枠部分の「SET OUTGOING PORT」ボタンを押す。
これで良いはずなんだけど・・・。
ChoregrapheもScratchもプログラム実行。
うまくいかん😣
再度、設定しなおしたり、いじった。
理由はよくわからないが成功。
でも、この後の発表タイムで何見せよう。
とりあえず、家から持ってきたKinectV1(モーションセンサ)とScratchを「Kinect2Scratch SDK」で繋ぐ。
何を製作するかは、頭よりも体が先に動いていた。
まず、Pepperをアニメーションモード(目がオレンジ色になる)にする。(手の甲に触れると目が緑に変わり、触れている間、腕が自由に動かせる)
次に、発表タイムまで時間もないので大まかに「両腕あげた時」「両腕下げた時」「左腕あげて右腕下げた時」「左腕下げて右腕あげた時」の四つの動作を作る。
Choregrapheのプログラムの部分は、上記Webサイトの②のPepperのサンプルプログラムを応用し、Scratchから変数で制御できるようにするための「Switch Case(1)」の部分を改造。
僕の作った「Switch Case(1)」の部分はプログラムとしては汚いのでブログに載せたくない。ご勘弁を!"(-'''-)"と思ったが、Choregrapheのプログラム載せるよ。
※上記画像のプログラムはブログに書かれているプログラムとは異なる。
(四つの動作だから四つで良いのに六つある。)
Scratchのプログラムは、KinectV1(モーションセンサ)のセンサ値を使って作る。
kinectで左手、右手の位置(今回はY座標だけ)の値を使い、大まかにPepperが人の手の高さに合わせて腕をあげるか、あげないかを認識し、腕を上げ下げする。
まず、もし〇〇ならブロックを使い、左腕があがっている時に右腕があがったら両腕をあげる。
これを右腕も同様に作る。
そして、腕を下げるプログラムも左腕、右腕と作る。
もし〇〇ならの間の六角形の部分に、演算の不等号ブロックを六角形にはめ込む。
演算の不等号ブロックのある片方に「調べる」の(スライダー)センサの値をドラッグし、そのブロックの小さな下向き黒三角▼をクリックして「HandLeft_y」を選ぶ。
この後が凄く大変な作業。
Kinectでの左手の高さの判別方法はだいたい数値が0の時が腕を地と平行にしたくらいなので0以上か、0以下かで動作(腕をあげるか、あげないか)を判別する。
すると、下記のようなプログラムが出来上がる。
サンプルプロジェクトでも使われている変数「test」で動作を指示している。
これでプログラミング完了👌
さぁ、ScratchとChoregrapheのプログラム実行!!
準備中・・・・
KinectでPepperを操作してみる。
プログラム通り動いた~~😝
後は自分の発表タイムを待つのみ。
そして、僕の発表タイムだ。
下記写真複数からも分かるように僕の手の動きに合わせ、Pepperも手をあげることに参加者の方もスタッフの方も驚いてくれた。
特に両腕があがった時は拍手喝采だった。
スタッフの方は、「この短時間でよく作れたね。」と褒めてくれた。
ワークショップの雰囲気が良くて楽しかった。「わからない所は同じテーブルの参加者同士で教えあって下さい。」と主催者の方から何度かアナウンスがあったおかげで、あちこちで大人も子供も関係なく和気あいあいと教えあう雰囲気があって、とてもやりやすかった。
下記写真はワークショップ終了後、体験してくれた男の子。
僕の作ったもので遊んでくれて、嬉しくてあたたかい気持ちになった。
kinectは結構距離がないとうまく反応してくれない。会場は人が一杯でスペースを確保できなかったため、上半身だけで認識するように位置を調節していた。
そのため、男の子に体験してもらった時は、身長が大人よりも低いため、男の子の体の大きさ・人として認識される位置・腕の長さに合わせてKinectの位置を変えた。
下記の写真が、今回の会場での僕の開発風景。人が一杯の時は埋もれて見えなかったので、改めて写真にして説明を加えてみた
そして、今回のワークショップの主催者の皆さんとの記念写真。
左から、梅田さん、谷口さん、石原さん。
会場には他にもたくさんのスタッフの方がみえました。
皆さん、楽しい体験をさせていただきありがとうございました。
おまけ:発表タイム後。デモが成功し、和やかな雰囲気になり、ほっとして笑顔の僕。
ワークショップ終了後、「Windows10でやっていた人がいたよ。」と聞いたので、
僕のPCでできなかった理由が「Windows10だから。」というわけではないことがわかった。
これについては、別の日にアルデバランに行き、一時間程試行錯誤して僕のWindowsPCでもできるようになった。やったー🙌