きみを見つめる生きものロボットを作ろう!(PoseNet2Scratch)
今回の記事では、拡張機能のなかでも機械学習が体験できる「PoseNet2Scratch」を使ってみます。
PoseNet2Scratchも、ML2Scratchと同様に@jishihaさまの作成された拡張機能を利用させていただいております。
詳細については、下記を御覧ください。
https://github.com/champierre/posenet2scratch/blob/master/README.ja.md
こちらについても、とてもわくわくする拡張機能を開発および使用させていただき、ユカイ工学スタッフ一同感謝しております。
PoseNet2Scratchとは、
人の姿勢を検出し、身体の各部分のxとyの位置を取得できるScratch拡張ブロックを追加することができます。リアルタイムの姿勢検出をおこなうためにPoseNetを使っています。Kinectのような特別なデバイスを使うことなく、普通のウェブカメラで素早く高精度で検出できるところが大きな特徴です。
つまり、Webカメラさえあれば、顔を追尾するようなロボットがつくれる!かもしれません。
今回は、カメラに写っている顔の位置を取得し、生きものロボットがご主人さまのほうを向くようなプログラムを作ってみましょう。
(生きものロボットキットでは、高性能なモータやセンサを搭載していないのでなんとなくの動きとなってしまうことをご了承ください。)
この記事では、このようなことができます!
iOSは、この記事に対応しておりません。
iOSのWebBLE/Bluefyアプリではカメラを使うことができないため、他の端末をご利用いただくようお願いいたします。
用意するもの
・動かしたい生きものロボット(ココロキット搭載済み)
・カメラを搭載したPCまたはタブレット
[注意]
今回使用する拡張機能では、お使いのPCまたはタブレットの性能によって処理速度が大きく変わってしまいます。(演算をたくさん行うため)
高性能なPCを利用することをおすすめいたします。
拡張機能をロード
左下の青い拡張機能ボタンから、一覧を表示します。今回は、まず、「ビデオモーションセンサー」をロードしてから「PoseNet2Scratch」をロードしてください。(PoseNet2Scratchのみのロードだと、カメラの映像が画面表示できないため)
次に、「ココロキット」の拡張機能もロードしてください。
PoseNet2Scratchを使ってみよう
まずはためしに使ってみましょう。拡張機能をロードすると、体の各部位のブロックが表示されます。上の2つ、鼻のx座標とy座標の左側のチェックボックスをチェックしてみてください。
すると、上の画像のように、右側に数字が表示されます。この数字の意味は、カメラで取得する画像に上に示すようなx軸、y軸が定義されていて、写っている鼻の位置が座標でいうと(x, y) =(-13, -10)の場所にあるよ、ということを示しています。画面の中央が(0, 0)という座標です。
では、リアルタイムで鼻の位置にスプライトを表示させてみましょう。プログラムはこちらです。
スプライトが自分の鼻の位置に追従して動きます!おもしろい!
ひとを見つめるアルゴリズムを考えよう
ここまでのステップで、カメラの画像の中で体の部位の位置座標が取れることがわかりました。そこでこの情報を使ってロボットをどのように動かしたら、見つめることができるのかを考えましょう。
なるべくシンプルな動きにしたいので、下記のようにします。
・鼻のx座標が、-60よりも小さいとき、ロボットは左に進む。
・鼻のx座標が、60よりも大きいとき、ロボットは右に進む。
・鼻のx座標が-60と60の間に入っているとき、ロボットはとまる。
プログラムを作る
if文と演算ブロックを組み合わせて、条件を決めていきます!
さあ、動かしてみよう!
いかがでしたか?正確には、このアルゴリズムだけだと、完全に追尾することはできないのですが、まずはシンプルなアルゴリズムで、ロボットの面白さを体験してもらえればと思ってます。
この作例のプログラムはこちらからもダウンロードできます。
これを作ってくれたら、ハッシュタグ#kurikitをつけて見せてもらえると嬉しいです!
この記事が気に入ったらサポートをしてみませんか?