2018年2月28日水曜日

2018年2月報

1.2月授業内容
2.今月の課題
3.今後の授業スケジュール
4.お知らせ


1. 2月授業内容


1.0 <スタートアップ(全コース)>


 割愛します。


1.1 <プライマリーコース『ロボドーザー』>





 割愛します。






















1.2 <ベーシックコース『クルリン』>



 でんぐり返りロボットです。モーターで回す長い腕(うで)が地面を突(つ)くからでんぐり返るんです。
単純ですし見ていて当たり前、何が面白いんだ!?と言うとそれで終わります。

しかし、座って静止させた状態からこのロボットの動きを予測するのは難しく、先生も最初は分かりませんでした。


 事実、腕を後ろ向きに回すと前転し、前向きに回すと後転するという、予想外な動きを見せます。
実際は、前転はできますが、(人に似せて)前方向にしか曲がらない脚(あし)のせいで後転はできません

後転時は、重力などで脚がまっすぐなままになり腕の回転半径をはみ出るのででんぐり返るまでは至(いた)らず、ちょうど脚をピンと伸ばした腕立て伏(ふ)せか、バタフライのような状態に陥(おちい)ります(*1*2)。

 長い腕の先を地面に突かせて重い本体を起こすには、回転軸(じく)に強大な力(トルク)が必要です(*3)。
おなじみの1/9減速ギア機構がモーターからの回転を遅(おそ)くしてトルクを9倍に上げています。
しかし、何かの拍子に本体や持ち手に引っ掛かると(イタタタ…)、腕が長い分、てこの原理で強大な逆向きの力が回転軸を止めようとします。
それでギヤに負担(ふたん)が掛かって、ガリガリ音とともに噛合(かみあわ)せが外れ、修理することもしばしば。


 また、でんぐり返り時の衝撃(しょうげき)が激しいので、頭が割(わ)れたり、電池が外れたりしないよう、次のような強化緩衝策(かんしょうさく)を立てておくことも、頑丈(がんじょう)に作る秘訣(ひけつ)でした。
1) 頭部をロッドとペグでつなぎ留める(フランケンシュタイン?)
2) 頭部に輪ゴムを巻く(ミイラ?)
3) 電池ボックスに輪ゴムを巻く
4) 顔面や後頭部に、タイヤやグロメット(ゴムリング)を取り付ける


 それにしても、今回のロボットは元気いっぱいというか、バッタンバッタンと動きが激しく、音も騒がしいロボットでした。顔面が外れちゃうね!


*1 腕を回しながら、額(ひたい)を床に打ち付けつつ、「申し訳ございません、申し訳ございません」のポーズにも見えましたね。

*2 前転でも後転でも、でんぐり返る条件は[腕の長さ脚の長さ]です。だから、腕を長くするか、脚をもげば(怖い…)後転もするようになりましたね。

*3 長い傘の先っぽで地面に絵を描く時は、短い小枝を使う時よりも、持ち手にかなりの回転力が必要でしょ?


1.3 <ミドルコース『サカアガリン』>



 逆上がりする鉄棒ロボットです。
先月に続き、今月も当時小学2年生のアイデアコンテスト出品作がベースです。(恐るべし2年生…)

 さて、このロボットが逆上がりに成功するまでに、設計上の工夫製作の手順がいろいろありました。
人間の逆上がりとは少し違います。製作を通して、皆さんはいくつ気付けたでしょうか?


1) 周期的に腕と脚(ももの部分)を曲げたり伸ばしたりする機構
 同期した腕と脚の動きは、ずれることなく繰り返されます。
1周期毎に、噛み合わせた脇腹のギアM(腕用)とギアL(脚用)が半回転しては戻るためです。
この周期を決めているのが、腰のロッド3アナ(=ギアM3枚)の回転で、これをクランクにして、脇腹のギアLを往復回転させています。


2) 強靭(きょうじん)な腕力と脚力
 てこの原理により、つま先に重たい電池ボックスを付けて脚を曲げるには、強大な力が必要です。
そんな脚も含めて、掛かる重力に打ち勝ち、体全体を持ち上げる腕力は、もっと強力でなければなりません。
その力が、腰のロッド3アナ(=ギアM3枚)の回転力(トルク)です。


3) 1/27減速ギアトレーン
 前記で必要なトルクを生むために、1/3減速(ピニオンギアギアM)を3段連ね、モーターの回転数を1/3×1/3×1/3=1/27に落とし、トルクを27倍に増強しています。
最終段でピニオンギアギアM3組並べているのは、伝達トルクを分散させて、ギアの歯を保護するためでしょう。


4) つま先の電池ボックス
 皆さん、足に鉄アレーをくくり付けて逆上がりしますか?
足先が重たそうで、やろうとも思いませんよね。
こんなところに電池ボックスを付けたのは、他に置き場所が無かったからでしょうか?
 そうではありませんね。ちゃんと意図があるはずです。
確かに、脚を持ち上げる時は、かなりのパワーを要するようになりますが、一旦、つま先が頭上の鉄棒より後ろ側に越えると、今度は重力が回転の味方をしてくれるのです。
このとき、脚は十分に曲げた状態ですから、それなりに重たい頭(モーター)と胴体は未だ鉄棒を越えていませんが、先に越えたつま先の電池ボックスが体全体を後ろ側へ引いてくれるのです(*1)。


5) ラチェット付き鉄棒
 いくら強力な腕力があっても、鉄棒をゆるく握っていては体を回転させることができず、懸垂(けんすい)運動がせいぜいです。
手先が滑らないよう鉄棒をしっかり握り、鉄棒(シャフト)自体も回転しないようにしっかり固定することで腕を曲げる力が体を逆上がりさせます
 但し、このままでは、逆さになった後は体を元にゆっくり下ろすことになり、気味が悪いばかりか(*2)、せっかくの重力の支援を無駄にして逆上がりを中断してしまいます。
そこで、逆上がりする方向へはシャフトが自由に回転するようにラチェット機構を鉄棒に付けたのです。
このお陰で、勢いよく体を振り下ろして、次回の逆上がりを開始するのに必要な位置まで進めることができるようにもなりました。
土台に設置した補助板も、逆上がりを成功させるのに必要な開始位置を維持する目的です。
本体の調整次第では、不要になるでしょう(*3)。

 どうでしょうか。練り込まれた設計思想を感じますね。
オリジナルの2年生作品がどの程度の完成度だったのか、少し気になります…。


*1 胴体とつま先が同程度に重たいとしても、てこの原理により、回転軸(鉄棒)から遠い位置の重量物(に掛かる重力)の方がより効きます。

*2 超人的な腕力の体操選手やポールダンサーにも、違和感というか、一種の気味悪さを覚えますが、そんな感じです。

*3 家庭で研究し、腰のペグSの位置(脚を曲げる角度)を変えて補助板を不要にした中間教室のY君もいました。


1.4 <アドバンスプログラミングコース『ピッキングロボ(1)』>



 《下記を参照下さい》
  http://robocobo.sakura.ne.jp/blog/robot/adv1-1802.pdf







1.5 <プロ3年目コース『二足歩行ロボット(2)』>


 2ヶ月目で、両目+舞踏仮面(超音波センサー+カバー)と両腕を取り付けて、外観が完成しました。あとは“ハート”です。


Pepperくんモドキに、胸にディスプレイ(8×8マトリクスLED)があります。
左胸だから(ニクい設計!?)、ドキドキハートのアニメーションを表示させようという魂胆です。
1年目から幾度も使ってきた <Sprite.h>, <Matrix.h> 両ライブラリを読み込んで(*1)、
大中小3パターンのハートマークを順次書き換えるプログラムで簡単に実現しました(*2)。

ハートマークの変化に合わせて、スピーカーから高中低3音を鳴らし分ければ、それはもう心臓の鼓動。愛想が生まれます。
見た目と相まって、私達の目に擬人化されて映るのに十分過ぎる表現力です。

役に立たない?
いえいえ、人間と共生し、楽しませる人型ロボットには大切な要素です(*3)。

 このロボットの両目は超音波センサーですから、外界を少し“見る”能力があります。
目の前にかざした手(反射体)までの距離をプログラム [BiRobot4/USSTest0] で計測し、PC画面でシリアルモニタリングしてみました。

すると、200cm以上遠くまで計測できるスペックなのに、手を退(の)けても50cm前後で数値が揺らいでいます。
(50cm先に見えない“何か”が存在する?!)

 原因は、8×8マトリクスLED表示に伴う電気ノイズにありました。
この表示デバイスは64個のLEDを1ドットずつ書き換えられる(ように見える)のに、
1) 裏面には8+8=16本のピンしか生えてなく、
2) 現在の表示パターンを保持しておくメモリや駆動回路も無い受動デバイスですから、
ダイナミック点灯方式で外部から“動的に”駆動してやらなければなりません。


つまり、8+8本のピンは、X座標Y座標の指定ピンとして機能し、
X座標用のどれか1ピンに電源(+)、
Y座標用のどれか1ピンにGND(-)を繋いだ時、
その交点のLEDドットだけが点灯するという、単にそれだけの表示器なのです。

ある瞬間には、ある座標のLEDがせいぜい1個だけ点灯(画像データによってはそれも消灯)している状態を、全64個のLEDについて高速に切り替えてやる必要があります。
即ち、全てのLEDドットはこの周期で点滅しているのですが、30~40Hz以上の点滅は連続点灯しているように見えるという残像効果を狙った使い方で設計されています。

 このダイナミック点灯方式は、駆動回路(またはプログラム)として面倒なことには違いありません。
当然、64個のLEDに個別のスイッチを配線して“静的に”画像を保持できる(分かり易い)スタティック点灯方式もありますが、
これでは高々8×8ドット画像のために少なくとも65本(1本は共通GND等)のピンが必要になり、マイコンのピンが幾らあっても足りなくなります。
それを16本に削減することで、普通のマイコンで(安く)済むという大事な恩恵が得られるのです。

 但し、超音波センサーやスピーカー等、他にも接続したいデバイスが多数ある28~40ピンのマイコンにとって、このLEDに16本も消費されるのは依然として勿体無く、拡張性も乏しくなります。

そこで、マイコンボードマトリクスLEDの間に挟まっている「マトリクスLEDシールド」というボードが一役買います。
このシールドボードには、パターンメモリや駆動回路が組み込まれたドライバーチップが搭載され、LEDのダイナミック点灯を代行してくれます。

マイコンは、オブジェクト初期化宣言 Matrix my_mat = Matrix(11, 13, 1); のように、僅か3ピンを使って、シリアル通信方式でこのドライバーに更新データを送り付けるだけで済むのです(*4)。

 このように、ダイナミック点灯は多数のLEDから成る表示デバイスに欠かせない方式ですが(*5)、
電気回路には、電流が急変すると、それが電気ノイズとして他の配線に回り込んだり、電磁ノイズとして空間に飛び出したりする宿命(アンテナの原理)があります。

激しくLEDのON/OFFを切り替えるダイナミック点灯方式では、このようなスイッチングノイズが他のデバイスの信号レベルを乱し、誤動作させる場合があります。

これが原因で、超音波センサーからのEcho(反響検知)信号が50cmの障害物と同じタイミングで乱れて誤判定されていたのですね。


 この問題は、
1) NewPing::ping_cm() 関数で超音波計測する“”に、
2) Matrix::clear() 関数でLEDを“全消し”しておくことでスイッチング電流を控え、
3) “計測後”に Matrix::write() 関数でドキドキハートや距離バーメーターを表示することで、
同時使用が可能になって解決しました。

それでも、LED表示が一瞬消えるようには見えませんでしたね。
即ち、ソフトウェア的にもダイナミック点灯(人間の残像効果)を利用したことになります。

 他にも、シリアルモニタ通信 vs. マトリクスLED1番ピン)や、超音波センサー vs. スピーカータイマー2)等、
複数のデバイス同士で、使用するマイコンのピンタイマー機能競合に纏(まつ)わる問題が発生し、それを解決していく疑似体験をしました。

 このように、ロボットや電子機器(頭脳としてマイコン)に様々なデバイスを統合する際には、限られたリソース(処理速度や機能数)を問題が起こらないように分け合い、有効活用する“知恵”が求められます。
それは、面倒なことですが、実利性のある製品を作るために必須の営みです。

 最終月で、いよいよ二足歩行ロボットの頭脳をプログラミングして参りましょう。


*1 #include <xxx.h> は、本来(ベースのC/C++言語環境で)は、
「ライブラリ格納フォルダから"xxx.h"という名のヘッダファイル(ライブラリ本体ではなく、定数やクラス・関数プロトタイプ宣言等の定義情報の寄せ集め)を探して読み込み、一緒にコンパイル(翻訳)せよ」
という指示であり、ライブラリ本体プログラム"xxx.cpp"との結合(リンク)は別物なのですが、使い易く実装されたArduino環境がこれらの作業を代行してくれます。

*2 if/else構文の代わりに、多分岐構造に適した switch/case構文を使いました。

*3 そもそも人型ロボットにするところから、擬人化で人の感情を揺さぶる要請があります。
 高橋智隆先生が創る“役に立たない”ロボットもここを重視しています。

*4 実際は、11番ピンがクロック信号、1番ピンがチップセレクト(デバイス選択)信号のようですので、13番ピンだけを使って画像データやアドレス(座標)情報を送っています。
 SPI(Serial Peripheral Interface)通信と呼ばれる方式です。

*5 光るデジタル時計などもそうです。安いものでは、表示が少しチラついているように見えたことがありませんか?
 ダイナミック点灯方式で点滅しているからです。


2. 今月の課題


 <スタートアップ(全コース)>
  特にありません

 <プライマリーコース>
  - オリジナル図面プリント

 <ベーシックコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する(概ね3年生以上/低学年は補助の下で)

 <ミドルコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する

 <アドバンスプログラミングコース>
  - 上記授業内容を精読する

 <プロ3年目コース>
  - 上記授業内容を精読する(該当テキストページを見ながら)


3. 今後の授業スケジュール


◆小倉南3/25は中野イベント出張の為、新下関教室 百合野先生に授業頂きます。

――――――――――【佐藤教室長】――――――――――

[東福間]第1・3土原則
 (2017年12月~)
   - 10:30~ アドプロ
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル

 (2018年4月~予定)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 3/3, 17,  4/7, 21,  5/5, 19


[東福間プロ]第2・4日原則
   - 15:30~ プロ3年目

 ⇒ 3/11, 25,  4/8, 22,  5/13, 27


[中間]第2・4土原則<なかまハーモニーホール>
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒3/10 第1回 3F会議室2
  3/24 第2回 3F会議室2
  4/14, 28,  5/12, 26


[小倉北]第1・3日原則<ムーブ>
   - 10:00~ ベーシック/プライマリ
   - 13:00~ ミドル
   - 15:00~ アドプロ

 ⇒3/ 4 第1回 5F小セミ
  3/18 第2回 5F小セミ
  4/1, 15,  5/6, 20


――――――――――【菅本教室長】――――――――――

[とばた]第2・4土原則<ウェルとばた8F>
   - 13:00~ 全コース(プロを除く)

 ⇒ 3/10, 24,  4/14, 28,  5/12, 26


――――――――――【中野教室長】――――――――――

[八幡東]第1・3土原則<レインボープラザ4F>
   - 13:30~ ベーシック
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 3/3, 17,  4/7, 21,  5/5, 19


[小倉南]第2・4日原則<総合農事センター2F>
   - 10:30~ ベーシック/プライマリ
   - 13:00~ ミドル  /アドプロ

 ⇒ 3/11, 25※,  4/8, 22,  5/13, 27

 ※小倉南3/25は中野イベント出張の為、新下関教室 百合野先生に授業頂きます。


4. お知らせ

1) 小倉北ロボティクス・プロフェッサー(ロボプロ)コース開講

 アドプロ1年以上履修生・外部生を対象に、小倉北教室で今秋9月~開講予定で進めます。
 対象の方へ後日(3月中)ご案内差し上げます。


2) 新商品のご紹介[再掲] - 希望者は教室長まで
  http://robocobo.sakura.ne.jp/blog/robot_shinshohin_chirasi_201801.pdf

 【ブロック外し】
  数量限定につき、景品交換(宿題30ポイント/当面の販売なし)の対象とします。

 【アドプロ専用タブレットケース】
  1,080円で販売中です。4月以降進級の方のキットには付属(値上がり)しています。


3) 1月課題 高得点者  []内は教室と学年

  ◆プライマリ【10名平均 図面3.9】
   5点…牛嶋[中間2], 長友[八幡東 年長], 柴田[小倉北2]

  ◆ベーシック【16名平均 図面2.5+設問3.1=5.6】
   10点…森崎[八幡東2]
   9点…荻山[小倉南3]
   8点…宮尾[八幡東4], 出口[小倉南4], 波多[小倉南4]

  ◆ミドル【27名平均 図面3.2+設問2.1=5.3】
   10点…なし
   9点…辻[小倉南6], 橋本[小倉南3], 原[小倉南4]
   8点…谷川[八幡東4], 今橋[小倉南4], 吉良[小倉南6]

  ◆アドバンスプログラミング【3名平均 図面2.7+設問3.0=5.7】
  最高8点(20点満点)


東福間・中間・小倉北教室 佐藤 / 八幡東・小倉南教室 中野