前回は、Ultimate2.0のアームタンク組立て、Makeblockアプリで操作しました。で、これでも十分楽しいと言えば楽しいんですが、やはり、Ultimate2.0をロボット教育ツールとして購入した私からすれば、ここでやめるわけにはいきません。今回は、アームタンクをmBlockでプログラミングしてみます。

Ultimate2.0では、どのモーターがどの機構部分で、何番のポートなのかを把握する事から始まる

さて、mBotやmBot Rangerについているモーターは、基本的には、ロボットを走行させるために使いました。それに比べ、Ultimate2.0のアームタンクや、バーテンダーロボットは、走行させる以外の部分、アームやハンドグリッパーなどにもモーターを使います。ちなみに、mBot機能拡張パックのサーボパックでは、機構部品を駆動させるサーボモーターの制御を学習する事は出来ますよね。

そうなると、Ultimate2.0のロボット―アームタンク、mBlockでプログラムするには、どのモーターが、制御ボードであるMegaPiの何番ポートに接続されているかを把握しなければなりません、組立説明書には配線図が書いてありますが、ここの把握がより重要になります。

当たり前と言えば当たり前なのですが、mBotやmBot Rangerに慣れた後に、Ultimate2.0に触ってみると、意外とその基本部分の理解が足りない為に、プログラミングに手が付けられないという人も多分いるんじゃないかと思います。Makeblockの公式ユーザーフォーラムでも、その辺を理解していないがために混乱して質問しているどこかの外国の人がいました(笑)。

Ultimate2.0 ロボットアームタンク 配線図 

出典:Ultimate2.0の組み立て説明書より

この配線図ですが、モーターA(ポート1)とB(ポート2)はタンク(キャタピラ部分)です。モーターC(ポート3)が、アームの上げ下げに使うエンコーダーモーターになります。ロボットグリッパーは、ポート4に繋げるのですが、エンコーダーモーターではなくDCモーター駆動なので、エンコーダーモータードライバーモジュール(MegaPiに後付けするモジュール)のコネクタには接続せず、MegaPiにあるDC/ステッピングモーターポートに接続します。

このDC/ステッピングモーターポートですが、MegaPiには全部で8つあります。ポート1~4にそれぞれA/Bと分かれています。私の場合、ここの部分、A/Bに分かれている部分が組立説明書に記載の配線図だけでは、意味が汲み取れなかったのですが、mBlockのロボットブロックに、モーター、ポート1Aというブロックがあり、そこでやっと理解しました。

MegaPiのDCモーターポートブロック画像

どのポートに、どのモーターが配線されているかを理解したら、mBlockのロボットブロックを理解しましょう。

Ultimate2.0 ロボットアームタンク mBlock モーター制御 ブロック

基本的に、走行は、mBotと同じで、前向きに○○の速さで動かすで制御できます。特徴的なのが、アーム部分のモーター制御です。アームは、回転を○○度、□□回転/分というブロックを使って制御します。ここが一番やりがいのある部分かも知れませんね。

ハンドグリッパーは、例えば、「速さを100にする」で開き、「速さをー100にする」と閉じます。

基本モデルに、超音波センサーとラインフォロワーセンサーを取り付ける

どのモーターがどのポートに繋がり、mBlockのどのブロックで制御するかを確認した後は、いよいよ、プログラミングに入ります。ここで、Ultimate2.0のアームタンクの基本モデルでは、センサーが一切ついていないので、超音波センサーとライントレースセンサーを追加でつけたいと思います。

どうやってつけようかなあと考えましたが、とりあえず、mBot Rangerのスピードドラゴンが放置されていたので、そこに付いている、機構・超音波センサー・ライントレースセンサーを丸ごと移植する事にしました。

Ultimate2.0 超音波センサー・ライントレースセンサーの移植

それで、取り付けた後がこんな感じです。

Ultimate2.0 アームタンクに超音波センサーとラインフォロワーセンサーを取り付けた画像

ちょっと、そのまま移植すると、ラインフォロワーセンサーが床面ギリギリになってしまうので、機構パーツを一個追加してかさ上げして、高さを調整しました。この辺は、やりながらの、簡単な試行錯誤になります。子供や大人でも、いじくりまわして、試行錯誤して、思うようなモノを作っていくというプロセスは、創造性や、問題解決能力を養うためにはもってこいかなあと、自分で試行錯誤しながら、ふと思いました。

この超音波センサー・ラインフォロワーセンサーを取り付けて、プログラミングしようとした動作は、こんな感じです。

「黒い線上を走行し、線上にあるペットボトルを検知したら、ロボットアームのハンドグリッパーが開き、アームが下がって、ハンドグリッパーでペットボトルをつかみ、持ち上げて、後ろに下がる」
ラインフォロワーによるライントレースプログラムは、以前に、mBotを使って学んだので、そのプログラムをほぼ踏襲しました。アームを動作させるトリガーは「超音波センサーの値が15より小さかったら」としました。
それで、アームの上げ下げのタイミングなどを試行錯誤しながら、完成したスクリプトが、こんな感じです。
 
Ultimate2.0_アームタンクのプログラミングデモ
 
それで、ここで、結論から言いますと、↑のプログラムでは、アームタンクは、思ったような動きになりませんでした。
 
アームの上げ下げは完璧でしたが、ライントレースの部分で問題が起こりました。それは、mBotと同じようなプログラムの組み方をして、mBotの走行テストパッドで試したところ、ラインフォロワーセンサーの入力によって走行方向を制御す際に、アームタンクのキャタピラ部分が大きすぎて小回りが全然効かないという事と、キャタピラの取り付けが、並行になっていなかったので、まっすぐに走らないという問題です。
 
キャタピラの取り付けを平行にするように機構を組み直すというのは、時間がかかりますが、何とか出来そうでしたが、ラインフォロワーセンサーの部分は、ちょっと、制御プログラムを組むのは、難しいかなあと断念しました。
 
アームタンクが小回り効かないのは、ちょっと、ライントレースセンサーのプログラムを組むには、致命的な気がしたので。いや、私じゃなくて、もっとプロの人がやれば、何とかなると思います。もっとうまく制御できると思います。でも、今回は、そこまでプログラムに試行錯誤する時間が取れませんでした。。
 
という事で、ラインフォロワーセンサーの制御を除いた部分のアームプログラムがこちらです。ラインフォロワーセンサーを使わないので、わざわざ、MegaPiにアップロードせず、PCからBluetooth通信で制御しました。手抜きです(笑)
 
Ultimate2.0 アームタンクデモプログラム 
そして、その動画がこちらです。まあ、大した動画じゃないですが。ははは。