放課後のtoioあそび:VisualProgrammingでキューブの前後左右操作(基本&座標制御)
(本投稿は個人的趣味で書いています)
しばらくサボってました。。が、ネタがたまってきて記事だけ書けないまま放置してしまってもったいないので今後地道に投稿します。
toioのVisual Programmingはとても簡単にロボットプログラミングが出来て、動かしているだけでも楽しいので、基本的なところから紹介していきたいと思います。体系的な説明にこだわらず、ネタ的な物も気ままに書きたいと思います。
本記事の概要
まずはロボットを動かす基本中の基本、「前後左右にマニュアルで動かす」ところから(いわゆるラジコン操作)、ということで遠隔操作のサンプルです。キーボードの矢印キーで上下左右キー前後左右の動きを割り当てます。いくつかハマりがちなポイントがあるのでそちらも紹介します。
後半では、toioならではとも言える、絶対座標を使ってマットからはみ出ないように制御する例や、マスの面を使って上下左右に1マスずつ正確に動く例など、普通のロボットではなかなか出来ない絶対位置制御を用いた例を簡単に紹介します。
(解説は後半にあります)
動かした様子:
前半は後述する「解説1:基本動作」、後半は「解説2:はみ出ない制御」のです。
使うもの:
・キューブ:toio本体セット付属のtoio コア キューブ(キューブ)
・マット:トイオ・コレクション付属のマット
・Mac(Scratch Link 1.1.46をインストール済みの、macOS 10.13以上を搭載かつ、Bluetooth® 4.0対応のMac)
※使い始めるまでの詳細はこちら(toio公式サイト):
サンプルコード:
下記からダウンロードしてください。AS/IS、自己責任にてお願いします。CC0 1.0で公開します。
読み込み方法:Scratch Linkインストール済みのMac上のChrome等でtoioのビジュアルプログラミングにアクセスし、「ファイル」から「コンピューターから読み込む」を選択して上記ダウンロードしたファイルを読み込んでください。
解説1:基本動作
ここからが本題です。まずは動画をご覧ください。
基本的な動作として、キーボード操作でtoioを前後左右に動かすサンプルです。絶対位置・座標は使っていません。単純に矢印キー上下左右とキューブの動きの前後左右がマッピングされています。上下左右キー、もしくは1~4の数字キーを押すと上下左右に動きます。1~4キーを割り当てているのはやや個人的に将来的に別の用途で使いたいから、です。
具体的には下記のようなコードになります。
全体としては無限ループで方向キーのイベント制御とキューブの動きを画面に反映する描画を行っています。
キーボードのスキャンを無限ループで行っています(通称ポーリング)が、これは下記のようなキーイベントで動かす方式だとキーを押し続けた時に動きがガタガタになるためです。
動かす時間は0.05秒にしていますが、適当にいじっていただければと思います。今のところ、この時間が小気味良く操作できる印象でした。
最下部の二行は「キューブの位置と角度を画面上のスプライトの位置に合わせる」もので、動きには関係ないのですが、マットの上で動いている場合はキューブの動きが画面上でも見られるようになります。
以上のコードで、単純な遠隔操作がキーボードのキーでできるようになりました。サンプルでは速度は控えめにしてありますのでぜひ各スピードをいじってみてください。
解説2:はみ出ない制御(絶対位置を使った位置制御)
先ほどはキューブの動作に座標を使った制御は入っていませんでしたが、今度は絶対座標を用いてキューブをマット上のある範囲から自動ではみ出ないように制御してみます。やることは単純で、「ある範囲からはみ出たら強制的に戻し、それ以外は解説1の通り自由にキーボード操作を受け付ける」というものになります。
上記動画を見ていただくと、後半でいくらキーボード操作でマットから飛び出そうとしても強制的に内側に戻る様子がわかるかと思います。
サンプルコードを試すには、下記の最上部に緑の旗(スタート)を配置してください(ほかのコードから移動すること・並列動作しないように注意)。
コードについてですが、遠隔操作部分は解説1と同じです。
強制的に戻すところにちょっとしたコツがあり、下記のように、X軸方向だけ戻したい場合はY軸は現在の自分の位置をターゲット位置に設定することで「Y軸を変更しない=X軸のみ移動させる」ということができます。
これをX軸・Y軸のプラス方向マイナス方向それぞれに対応するようにはみ出ない制御をすれば、マットの上を自由に動き回りつつ一定範囲に収まる操作ができるようになります。範囲は±180の範囲で好みで設定してください。180に設定してしまうとほぼはみ出てしまうのである程度の余裕が必要です。
解説3:マスを使った操作
今度は上記2つとは異なり、マットの裏面にあるカラフルな「マス」(グリッド/格子)を使って制御してみます。マスは「行・列」で位置を指定することができ、行列とも±4(9マスx9マス)の範囲で指定できます。
ちなみに、変数としての列・行も使えますし、そのよこのチェックボックスをチェックすると現在キューブがどのマスにいるかわかります。ゲームなどに使えそうですね。
上の変数のチェックマークをつけると、下記のように変数の状態がリアルタイムに表示されます。
このようなマスを使った動きをキーボードの上下左右に割り当てて、上を押すと1行動く、といった形で将棋の駒のような動きができます。また、±4マスの範囲を超えないようにはみ出ない制御をしています。すごろくやボードゲームのような動きができるので、色々応用できそうです。
サンプルコードを試すには、この最上部に緑の旗(スタート)を配置してください(ほかのコードから移動すること・並列動作しないように注意)。
以上、いくつかのサンプルを用いて、toioの多様な上下左右操作の方法を紹介しました。単なる遠隔操作だけでなく、座標を組み合わせることで多様な動きのパターンを生み出せます。ぜひ色々いじってみてください。
今後他にもマイペースに更新していきます。