2019年8月30日金曜日

2019年8月報

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


1. 8月授業内容


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


 割愛します。


1.1 <プライマリーコース『モッテクテク』>


 割愛します。

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


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

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

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

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

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

 また、でんぐり返り時の衝撃(しょうげき)が激しいので、頭が割(わ)れたり、電池が外れたりしないよう、次のような強化緩衝策(かんしょうさく)を立てておくことも、頑丈(がんじょう)に作る秘訣(ひけつ)でした。

1) 頭部をロッドとペグでつなぎ留める(フランケンシュタイン?)
2) 頭部に輪ゴムを巻く(ミイラ?)
3) 電池ボックスに輪ゴムを巻く
4) 顔面や後頭部に、タイヤやグロメット(ゴムリング)を取り付ける

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


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

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

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


1.3 <新ミドルコース『カニボ』>


 今月からミドルコースがアドバンス(プログラミング)コース用のマイコン・センサー類を一部下ろす形で、タブレットを用いた簡易プログラミングに対応しました。

 具体的には、専用タブレット・マイコン・音センサー・ブザーが加わり、これまでできなかったモーターのパワー設定と、音や時間、それらの回数を条件にしたモーター駆動や演奏ができるようになりました。

 スタートアップ『カニボ』を参考に、プログラミングでロボットに生命を吹き込んでください。


1.4 <アドバンスコース『バグモジョラ(1)』>


 1日目では、4本脚のロボットを作りました。
右の写真では、全ての脚が揃っているため、モーターを回してもロボットは前後に揺する運動をするだけで歩けません。


 ロボットを歩かせるため、右の写真のように脚の位相(いそう)を変えます。
調整次第では歩くようになりましたが、まっすぐに歩きにくいなど、課題が残ります。



 2日目では、右の写真のようにロボットに中間の脚を追加して、6本脚のロボットに改造しました。
テキストp.8~9を参考に、脚の位相を調整します。
6本脚ならば概(おおむ)ね、まっすぐ歩くことができました。

4本脚よりも6本脚の方が、バランスを取りながらゆっくり歩くのに有利です(*1)。
脚を前へ送り返すとき、その脚は地面から離す必要がありますから、胴体を他の3本以上の脚で支えておく(3点支持)必要があります。
中間の脚を前後とは反対に動くように取り付けた3本脚が左右にあることで、「左脚の中間1本+右脚の前後2本」のように、これが可能になります。

 左右それぞれの脚を独立駆動させるため、2個目のモーターを追加しました。
この改造により、前後のみならず、左右への旋回も可能になります。
左右のモーターにそれぞれスライドスイッチを繋いで、リモコン方式で動かしてみました。

左右の脚の位相を気にしなくても、ロボットは歩いてくれました。
地面を後方に蹴って胴体を前進させる脚が3本以上確保されると同時に、前方へ送り返す脚を浮かせやすくなっているからです。

左右の脚の位相関係を考える必要がないので、左右のモーターの回転方向のみでロボットの進行方向を制御できます。
機械を工夫することでプログラムを簡単にできる好例ですね。


*1 「静歩行」といい、常に3点(以上の)支持を保つことで、その瞬間の姿勢でいつでも静止できる歩き方です。
 対して、人間や動物、高度な歩行ロボット(特に走行時)では、体の運動部位の慣性を利用しながら重心移動を最小限にすることで、その状態で静止すれば倒れるような(例えば1本脚で立ったり、浮上したりした)姿勢も動的に経由しながら、効率的に脚を動かす「動歩行」をしています。


1.5 <プロ1年目コース『不思議アイテムI-1(2)』>


 光と音の世界に入って、2ヶ月目です。

 1日目は、“”の続きです。
前回は、楽譜データをRTTTL形式で1曲分丸ごと与えることで自動演奏させましたが、今回は手動演奏です。つまり、電子ピアノですね。

ゲームパッドの16個のボタン(=鍵盤)に任意の音階を割り振り、好きな楽曲を演奏できます。
プログラム上の書き換えだけで済むので、自分が演奏し易いオリジナル鍵盤に仕立てることなど、朝飯前です。

 さて、正しい音程で奏でるには、プログラム上で“ド・レ・ミ…”に相当する記号“NOTE_C4, NOTE_D4, NOTE_E4, …”を使って指示すれば良いので簡単ですが、そもそもマイコンが“ドレミ”で分かるのかという問題があります。

実は分からない(*1)ので、プログラムの転送前(コンパイル時)に、ドレミを音の周波数に置き換えているのです。
例えば、オクターブ4の“ラ”は周波数440Hzなので、記号"NOTE_A4"を数値440に変換しています。
オクターブ5の“ラ”(NOTE_A5)は2倍の880Hz、逆にオクターブ3の“ラ”(NOTE_A3)なら半分の220Hzです。

1オクターブの間には、半音(*2)で数えて12音ありますので、
難しい計算になりますが、音程が半音上がると、周波数は約1.059倍になり、
1オクターブ上がって(半音12個分、1.059を12回掛けて)2倍の周波数になる関係です。

“シ”と“ド”の間には黒鍵がないので半音、周波数が約1.059倍になる関係です。
“ド”と“レ”の間には黒鍵があるので全音、周波数は約1.059×1.059=1.122倍の関係です。
人間にはこんな計算やってられませんね。やはり記号を使いましょう。

 ゲームのキャラクタのように、上下左右ボタンでLEDマトリクス上の十字や任意の表示パターンを動かす毎に異なるを出したり、パッドを振動させたりするプログラムにも触れました。

描画の始点(左上)となる座標(x, y)の値に基づき、パターンが画面の端に当たったかを判定するために、OR表現を用いたif文“if( x<0 || x>5 ) {○○}”を学びました。
これは、「もし、x<0 または x>5 なら、○○を実行せよ」という意味です。

パターンが画面からはみ出ないよう始点の座標(x, y)の値を有効範囲に制限するために、constraint命令を使用しました。

 2日目は、“”を計算で操ります。
既に、直線を描画する方法をいくつか知っています。

<方法1> 1点ずつ座標を指定して、8ドットを順に点灯させる
<方法2> 1コマの絵のように、8×8ドットのパターンとして描画する
<方法3> 上記を洗練し、座標変数(x, y)とfor文を使って実現する


 <方法1><方法2>は、直線を引くだけにしては面倒ですし、変更も大変な作業です。
<方法3>ができるのなら、それは文句なしのスマートな方法ですが、x座標のみを変えながら水平線か、y座標のみを変えながら垂直線を描くのが精一杯ではなかったでしょうか。

斜めに線を引くには、1ドット毎に難しい座標計算が必要そうです。
これを楽にするために、一次関数(中学2年数学)の考え方を導入しました。

x座標とy座標との間にある定まった関係を式で表したもので、例えば、画面の対角線を引く場合は、y=x という関係式を与えます。
yとxの値は常に等しい」という意味ですが、「yはxと同一に変化する」とも読み取れます。
ここで、“for (x=0; x<8; x++) { y=x; }”のようにx値を変化させると、(x, y)(0, 0)→(1, 1)→・・・→(7, 7) と変化しますので、これらのドットを順次点灯すれば良いのです。

y=2x なら、yはxの2倍大げさに変化しますので、斜め線は急峻にそり立ち、
y=0.5x なら、yはxの半分しか変化しませんので、斜め線は緩やかになります。
一次関数のグラフ表現では、斜め線の向きを表す 20.5 を“傾き”と呼びます。
y=-x なら -1 のように、マイナスの傾きも考えられます。
プラスの傾きを上り坂と見なせば、マイナスの傾きは下り坂になります。

 また、y=x+4y=3x-2 のように、最後に定数を足し引きすると、元の y=xy=3x の直線を上下(y座標方向)に数値の分だけ平行移動させた位置に描くことになります。
一次関数のグラフ表現では、直線の上下移動を表すこの定数を“切片(せっぺん)”と呼び、これは x=0 のときのyの初期値のようなものです。

 このように、数学では一次関数の式を y=ax+b(傾きa、切片b)の形で表しますので、プログラムにおいても直線描画に限らず、for文でx値を変化させながらy値を計算する手法(*3)がよく取られます。

<方法3> 一次関数とfor文を使って描画する

と書き直しましょう。

 なお、直線描画に限っては、もっと便利なline命令が用意されていました。

<方法4> 直線の始点座標(x1, y1)と終点座標(x2, y2)をline命令に与える

これを使えば、内部で<方法3>を代行してくれます。

 このように、特にCG(コンピュータグラフィクス)の分野では、誰かが用意してくれた便利な部品プログラム群(*4)を利用するのが当然のことです。
そうせずに、何でも最初から自分で書くのは大変過ぎてやってられません。

 テキストの最後に、コンピュータ内部で文字を管理し、表示するための文字コードについて触れられていますが、今回は、テキストに説明している以上のことを割愛します。

 本当に、ロボ・プロは内容が盛り沢山ですね。テキストを見ながら、なるべく曖昧な点を残さぬよう、しっかり復習と課題に取り組んでください。


*1 音楽専用のICチップなら解釈してくれるものもあります。

*2 ピアノの鍵盤で、黒鍵を含めた隣同士の鍵の音程のこと。五線譜や音符に付く#や♭は、半音上げ下げする記号。

*3 yの計算結果が小数になる場合でも、変数yをint(整数)型で宣言していれば自動的に整数に切り捨てられますので、整数のみが許されるCG座標を表すのに便利です。
 <例> 6.25 ⇒ 6、0.81 ⇒ 0

*4 一般に、ライブラリ(library)と呼びます。有用な書物を集めた図書館ですね。


2. 今月の課題


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

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

 <新ミドルコース>
  - オリジナル課題プリント(3面図のみ)

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

 <プロ1年目コース>
  - 上記授業内容を精読する(該当テキストページを見ながら)
  - 同時起動で蛙の歌が輪唱できるように、各自のパートに合わせて[RTTTL_Kaeru]を改造する
  - [MatrixLineMove1]をベースに、for文1つのまま、縦と横2本の線が同時に平行移動するアニメーションを作る


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


◆八幡東11/2→11/9へ一週ずれます。

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

[東福間]第1・3土原則<学習ルームでこぼこ>
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドバンス

 ⇒ 9/7, 21,  10/5, 19,  11/2, 16


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

 ⇒9/14 第1回 3F会議室2
  9/28 第2回 3F会議室2
  10/12, 26,  11/9, 23


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

 ⇒9/ 1 第1回 5F企画1・2
  9/15 第2回 5F企画1・2
  10/6, 20,  11/3, 17


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

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

 ⇒ 9/7, 21,  10/5, 19,  11/9※, 16

 ※原則日11/2がレインボープラザ利用不可の為、一週ずらします。


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

 ⇒ 9/8, 22,  10/13, 27,  11/10, 24

 ※8月よりアドバンス15:00~とさせて頂きます(~12月移行期間)。


4. お知らせ

1) ロボット教室 全国大会 YouTubeビデオ
 8/24(土) 東京大学 安田講堂で開催されました全国大会2019のビデオです。
 https://www.youtube.com/watch?v=Eps6SG95JsQ

 我らが教室からは下記の生徒さんが出場しました:

【テクニカルコンテスト部門】
 ◆中間教室 桑村 悠太郎さん(九州地区予選1位)
 ◆中間教室 島田 晄  さん(九州地区予選2位)

【アイデアコンテスト アドバンスコース部門】
 ◆小倉南教室 辻 昌岐さん『ドリームスロットマシン』(九州地区唯一進出者)


 九州地区から上記3名以外の出場者はないという寡占状態を勝ち取った一方で、全国大会の予選・本選ともに壁の厚さを感じるものでした。
 来年の参考にしましょう。


2) 小倉北ロボティクス・プロフェッサー(ロボプロ)コース説明会

 中学生・アドバンス1年以上履修生を対象に、9月(9/29予定)スタート生を募集します。

 ご興味のある方は、下記いずれかの説明会をご予約下さい。
 ◆9/ 1(日) ムーブ5F 16:45~17:45
 ◆9/15(日) ムーブ5F 16:45~17:45

  - 募集は9月と3月のみです
  - 他教室の方は小倉北教室へ転属となります
  - 9月(9/29予定)スタートには9/15までにお申込み下さい
  - アドバンス進級/継続/ロボプロ進級で悩まれる方はご相談下さい


3) IchigoJam初級ミニゲーム『キーボード ガンマン』終了
 8/20(火)北九州パレスにて、6組の方に参加頂きました。

 短いプログラミングで本格的なキーボード練習ができることを学んだ後、景品の電子部品(サーボモーター)を懸けて、キーボード早撃ちゲームでスコアを競い合って盛り上がりました。

 次回11/4(月・祝) 開催予定の講座をお楽しみに。(詳細は9月報でご案内します)


4) 夏休み科学実験『音にさわろう!スピーカー工房』終了
 8/20(火)北九州パレスにて、3組の方に参加頂きました。

 振動板(コーン)になりそうな紙コップなどの底に磁石を貼り付け、その周りにエナメル線をぐるぐる巻いたコイルを貼り付けてスマホ等のイヤホン端子につなぐだけで、簡単にスピーカー(ヘッドホン)になることが体感できました。

 紙やプラスチックのコップ、アルミカップ等、材料で音の出方が違いましたね。


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

 ◆プライマリ【12名平均 図形3.4】
   5点…鞍成[中間3], 村上(夏)[小倉南2]

 ◆ベーシック【17名平均 図面2.5+設問2.5=4.9】
  10点…なし
   9点…なし
   8点…野口[八幡東5]
   7点…中村[東福間4]

 ◆ミドル【11名平均 図面3.5+設問1.9=5.5】
  10点…なし
   9点…なし
   8点…重藤[八幡東8], 森崎[八幡東4]


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