2018年10月30日火曜日

2018年10月報

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


1. 10月授業内容


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


 割愛します。



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


 割愛します。






1.2 <ベーシックコース『ロボート』>



 ロボ・ボートの略(りゃく)ですね。ネーミングもさることながら、オールをこぐ動きもナイスです。


 この動きは、棒の中央付近(支点)をあまり動かないように固定し、一端(力点)をこぐように回すと、他端(作用点)も同様に回る性質を利用しています。



ただし、支点の位置によって、作用点の動きを大きく(速く)したり、代わりに働く力を大きくしたり、自在に調整できます。

大事なことは、速さ両方を増やすことはできずどちらか欲しい方を好きなだけ増やせる(*1)ということです。
これを『てこの原理』といいます。


 支点が真ん中にあれば力も速さも変わらず、力点と作用点が対等に“闘う”ことができます(*2)。
天びんや公園のシーソーは、力点と作用点(区別は不要)に同じくらいの重さの物や人をのせて、バランスを取るものです。


重さの異なるもの同士なら、重い方が支点の近くに寄ることでバランスが取れます。
シーソーでは、大人が中央寄りに座りますよね。


 支点が作用点の方に近ければ力点を大きく動かさないといけない代わりに、力点に加えた力よりも大きな力が作用点に働きます
『てこの原理』と言えば、通常はこちらの利用方法を指し、ペンチや枝切りばさみ、缶切り、せん抜きなど、固いものを切ったり動かしたりする道具に利用されています。

 逆に、支点が力点の方に近ければ力点に大きな力が必要になる(重く感じるようになる)代わりに、作用点を大きく(速く)動かすことができます
ボートをこぐオールはこちらの利用方法で、結構大きな力が要(い)る代わりに、一こぎですーっと進むことができます。

『ロボート』でも同じです。オール(シャフト)の先を延長して速く進ませることもできますが、あまり欲張(よくば)っても、モーターの負担(ふたん)が増えるので逆効果でした。

オール(シャフト)の根元は、輪ゴムでクランク(*3)の先と結び、人間の手のように柔(やわ)らかく“水面”をこぐ設計もうまいです。




 2日目の最後に、ボートレースでスピードを競いました。
一見どれも同じような動きに見えて、いざ地面(水面?)に放つと、速さには3~4倍以上の開きがありました。

下記の点に注意したロボートが速かったようです。

●手で押した勢い(惰性=だせい)でもスムーズに進むこと
(前後のタイヤSを手で回して、ブレーキがかかったように固くないこと)

●しっかりした輪ゴムでオールを留(と)める
(伸びきった輪ゴムでは何回転もねじれて先端のタイヤSに力が入らない)

●あまり欲張って、オールを長くし過ぎたり、先端をタイヤLに替(か)えたりしない
(てこの原理により、モーターが力負けして速く回せない)


*1 例えば、力を倍に増やして得をすれば、速さが半分に減って損をします。世の中、うまくできていますね。

*2 物体が静止している時、重力が働いている地球上では必ず、何か2つ以上の力が対立しながらバランスを取っています。

*3 実際に使用している部品は『クランク』ではなく『クロスジョイント』ですが、クランクと同じ作用を働かせています。


1.3 <ミドルコース『あがってゴーゴー号』>


 ジェットコースターです。

必要な動力は、コースター(乗り物)を頂上まで持ち上げることのみです。あとは“下り”だけですね。

 コースターを引き上げる方式として、主流なのは、地上と頂上の間を周回する長いチェーンにコースター下部のツメを引っ掛ける方式ですが、
過激なものは、圧縮空気やリニアモーターで平地から一気に加速させ、惰性(だせい)で昇らせてしまいます。(乗ってみたい…)


今回は、コースター下部のラックギアが、一列に並んで回転するギアMの上部と噛み合い、昇っていきます。
一連のギアMをチェーンと見立てれば、主流の方式に似ていますね。

 1日目は、傾斜したレール上を頂上まで昇らせるところまでです。
重要ポイントは、
1) ラックギアと噛み合うギアMはすべて、
2) 同じ速さで、
3) 同じ方向に、
回転させることです。


なぜ、直径の異なるギアMピニオンギアを交互(こうご)に噛み合わせているのか?
だって、隣(とな)り合うギア同士は逆回転する宿命にありますからね。
逆回転するピニオンギアとラックギアを接触させるわけにはいきません。


 2日目は、下りのレールを付け足しました。
乗り物としては、これこそが醍醐味(だいごみ)ですものね!
小さい部品を駆使して、頂上部を滑(なめ)らかに形成します。


 下りながらスピードが増すのは、物理学的に言えば、頂上で満タンになった位置エネルギー(高さ)が、下るにつれて運動エネルギー(速さ)に変わっていくからです。

最下点では位置エネルギーが最小、運動エネルギーが最大です。
その後、机の上をしばらく滑走し、摩擦で机とコースターを僅(わず)かに暖めながら止まります。

位置エネルギー ⇒ 運動エネルギー ⇒ 熱エネルギー へと変換されました。


 実際のコースターでは、何度か上昇と下降を繰り返す中で、位置エネルギーと運動エネルギーの交換が起こりますが、その和は(摩擦損失を無視すれば)常に一定であるというのが、中学3年理科で習う『エネルギー保存則』です。

振り子やブランコが高さと速さを交換しながら運動を続けるのも同じ原理です。








 授業の最後に、コースターに人形パーツを乗せて無事に下ることができるか、安全性を至上命令に、スリリングなコースを建設してもらいました。
地上(机上)の高さ以下、奈落の底へと続く下りレールを延長した改造例もありましたが、果たして乗員の運命や如何に。












































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


 撮影ロボット『カメラボ』では、タブレットのカメラ機能を使います。


 カメラ起動中に音量ボタンを押すことでもシャッターをきれますので、プログラムからシャッターを操作できるようロボットを作りました。
モータ軸に取り付けたロッド3アナを一瞬回して、音量ボタンに当てるだけで写真が撮れます。


 カメラボを2日目まで組み立て、首振り機能や音センサー、光センサーを追加しました。
センサーを用いることで、時間経過以外のきっかけ(トリガー)で写真を撮影することができます。
首振り機能を活用すれば、カメラの視角範囲外の撮影も可能です。

 プログラムとセンサーの組み合わせ次第で、いろいろな使い方が考えられます。
光センサーや音センサーからの情報を使い、周囲の異変を検知する防犯カメラ。
首振り機能を活かし、部屋をぐるりと360°撮影できる監視カメラ。
定点撮影を一定間隔で行い、小さな変化を早送りすることで大きな変化として見ることのできるタイムラプスなどがあります。

このタイムラプスは、普段は見過ごしがちなスローな変化を改めて教えてくれますので、いろいろな対象物を撮影してみてください。
YouTubeなどで面白い動画に慣れきった皆さんに、タイムラプスの楽しさを伝えるために以下の動画作品を作ってみました!

【マジカル・ルイボスティー】
http://robocobo.sakura.ne.jp/blog/robot/adv1-1810-1.mov

 コップにお茶を少しずつ注ぎ足しては撮影します。
この連続写真をつなげると、コップのお茶が勝手に増えていく不思議な動画になります。


【忍び寄る影】 - 15秒おきに撮影
http://robocobo.sakura.ne.jp/blog/robot/adv1-1810-2.mov

 陽が射し込む部屋の様子を撮影したものです。影がだんだんと伸びていく様子が見て取れます。
タイムラプス撮影によって時間を早回しでき、普段は気づかない小さな変化を大きな変化として確認できます。


【キャッツ】 - 15秒おきに撮影
http://robocobo.sakura.ne.jp/blog/robot/adv1-1810-3.mov

 お家にペットがいるなら、撮影対象にすると新たな発見があるかもしれません。
この動画からは、キジ猫ちゃんはよく動くけど、黒猫ちゃんはほとんど寝てることが分かりますね。



【マイ・ドライブレコーダー】 - 3秒おきに撮影
http://robocobo.sakura.ne.jp/blog/robot/adv1-1810-4.mov

 カメラボを車のダッシュボードに据え付け、車窓を連続撮影しました。
実際には20分ほど時間が経過してますが、15秒ほどにギュッと縮められました。
道順も分かるため、道案内動画などに応用できそうですね。


【フル・ムーン】 - 15秒おきに撮影
http://robocobo.sakura.ne.jp/blog/robot/adv1-1810-5.mov

 定番の天体撮影です。アドプロのタブレットでは星の撮影は難しいので、月を狙いました。
カメラを東の夜空に向けてセットし、20時頃から1時間ほど連続撮影を行います。
月が昇っていく様子がよく分かりますね。
あまり月を長時間眺める機会などありませんから、興味深い動画となりました。


 この他にも、タイムラプスを利用してトリック撮影(現実世界ではありえない変化)も行えます。
http://robocobo.sakura.ne.jp/blog/robot/adv1-1810-6.gif

一昔前だと、写真を撮るためのコストが高く、このような遊びはできませんでした。
デジカメがプログラムやアプリから制御できるようになり、誰もがこのような撮影を楽しめるようになりました。

アイデア次第では、100万回再生を突破する動画アップも難しくないでしょう!?
ロボット本体の設計にこだわるのも良いですが、今回は映像作品に制作力を注いでみてはいかがでしょうか。


1.5 <プロ1年目コース『リンクロボット(1)』>


 Autumn(秋)タームとして、多脚リンクロボットを製作し、プログラム制御するまでの3ヶ月が始まりました。
脚がうにょうにょ動き、にょろにょろ走り回る姿態を空想して、否応無しに期待感が高まります。


 1ヶ月目は、2本1組の脚リンクから組み立てていきます。
1組2本の脚だけでも、うねうねと有機的な動きを見せます。
これが6組12本も組み合わさるとなれば、それは壮麗なのか、不気味なのか、いずれにせよ楽しみです。

 図面や説明文の読解、パーツの向きや重ねる順番の照合、ネジやナット締め等、単体でも苦労する脚リンクを複雑に組み合わせるのですから、
空間認知、合理的思考、工作的センス(力加減、器用さ)に始まる、あらゆる能力を総動員して完成せねばなりません。

過去にも、大半の生徒さんが授業時間内には終わらず、家庭で進めて完成しても動かないか、動きがギクシャクしたり、自己分解してしまったり…。組み立てミスも続出するような代物です。


 2日目は、マイコンボードや無線モジュールを搭載し、モーターを回して脚の動きをチェックするところですが…
手順を誤った脚の組み直しに迫られ、ほぼ間に合ってませんね。
完成すると、苦労の甲斐あって、その動きは有機的というか、節足動物的というか、初めて目にする者をゾッとさせる異様さがあります。
非日常性を奏するには十分過ぎるインパクトです。

 次月では、コントローラーとプログラムを使って、思い通りにロボットを操縦します。


2. 今月の課題


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

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

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

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

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

 <プロ1年目コース>
  - ロボット製作を完了する


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


◆八幡東11/3→11/10へ一週ずれます。

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

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

 ⇒ 11/3<景品交換会>, 17,  12/1, 15,  1/5, 19


[東福間プロ]
   - 11/11 10:30~11:30 卒業制作 発表会


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

 ⇒11/10 第1回 3F会議室2<景品交換会>
  11/24 第2回 3F会議室2
  12/8, 22,  1/12, 26※

 ※1/26はハーモニーホール利用不可の為、代替施設(未定)で開催します。


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

 ⇒11/ 4 第1回 5F小セミ<景品交換会>
  11/18 第2回 5F大セミ
  12/2, 16,  1/6, 20


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

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

 ⇒ 11/10, 24,  12/8, 22,  1/12, 26


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

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

 ⇒ 11/10※<景品交換会>, 17,  12/1, 15,  1/5, 19

 ※11/3はレインボープラザ利用不可の為、一週ずらします。


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

 ⇒ 11/11<景品交換会>, 25,  12/9, 23,  1/13, 27


4. お知らせ

1) IchigoJamマイコンプログラミング(+はんだ付け)講座 リピート開催!

 10/8(月・祝)ムーブ4F工芸室にて、AMはんだ付け12組、PMプログラミング14組の方に参加頂きました。

 中級レベルの難易度で心配していたはんだ付けは、一部でリカバリ作業を要したものの、概ね順調に完成しました。


 プログラミング編では、キーボードを使ったコマンド入力インタフェース(BASICインタプリタ)に戸惑う場面もありましたが、
短い命令で動作し、少ない行数でそこそこのゲームが作れてしまうことが面白かったようです。


 次回12/24(月・祝) 北九州パレスでの初級ステップアップ講座をお楽しみに。
(詳細は来月報でご案内します)


 その前に、本スタートアップ講座をリピート開催いたします。
10/8ご参加になれなかった方、ご興味のある方はご検討下さい。
 http://robocobo.sakura.ne.jp/blog/lab/IchigoSU2018-2.pdf

【講座名】
 A) IchigoJamマイコンボードはんだ付け(中級)
 B) IchigoJamスタートアップ ~初めてのゲームプログラミング~
【内容】
 A) 自分だけのIchigoJamパソコンを自分で作っちゃいます
 B) IchigoJamでゲームをプログラミングしながら、BASIC言語の基礎に触れます
【講師】中野・佐藤
【会場】北九州市立男女共同参画センター(ムーブ)5F
【日時】A) 11/18(日) 10:00~12:15
    B) 12/ 2(日) 10:00~12:15
【対象】下記の小4~中学生 5名(保護者同伴可)
    A) 昨年11/23はんだ付け受講者、経験者、根気ある初心者
    B) 大文字アルファベットA~Zが読める

【必須費用】
 △A)のみ  5,940円(受講料3,780円+自作キット代2,160円)
  B)のみ  7,020円(受講料4,320円+完成キット代2,700円)
  A)+B) 10,260円(受講料8,100円+自作キット代2,160円)

 △IchigoJam経験者向け(一般には非推奨)

【オプション費用】
 A-0) はんだ、吸取り線、こて台、破損部品代(実費)
 A-1) はんだごて/吸取り線/スポンジ付こて台セット1,620円(持込可)
 A-2) はんだごてセット レンタル 810円
    <注意>持込品が作業に適さない場合は購入orレンタル頂きます
 B-1) 7インチモニター   3,780円(自宅用/テレビでも可)
 B-2) PS/2対応USBキーボード1,350円(自宅用/不明な場合は推奨)

【申込方法】下記を選択の上メールにてお申込み下さい。11/11〆切・先着順です。
 <受講コース>
   A)のみ  B)のみ  A)+B)
 <希望オプション>
  当日変更できますので予定をお伝え下さい
   A-1) はんだごてセット購入   B-1) 7インチモニター
   A-2) はんだごてセットレンタル B-2) キーボード

【申込条件】
 - はんだごてセット持込品が作業に適さない(不足を含む)と判断した場合は、講座指定品を購入orレンタル頂きます。

 - 半田ごては熱器具です。扱いを誤ると火傷・火災の恐れがあります。
  ご家庭での取り扱いルールをお決め下さい。

 - 原則として、12月お引落し額(1月分)に加算して徴収させて頂きます。
  11/11~キャンセル・欠席により空席が発生した場合は返金できません。
  (キットと製作テキストのみお渡しします/オプション品は任意)


2) 11月景品交換会
 宿題ポイントを貯めてくれてました生徒さんには長らく申し訳ないことに
先送りになっておりました宿題ポイント交換会を11月第1回授業時間「前」に開催します。ポイントカードを忘れずに、早めに来て下さい。


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

 ◆プライマリ【4名平均 図形4.8】
   5点…川田[小倉北 年長], 柴田[小倉北1], 末吉[小倉北 年長]

 ◆ベーシック【19名平均 図面6.2】
  10点…下木[八幡東3], 柴田[小倉北3], 橋本[小倉南1]
   9点…筋田[東福間3], 中村[東福間3], 井窪[中間6]
   8点…藤野[八幡東3]

 ◆ミドル【22名平均 図面3.0+設問1.3=4.2】
  10点…なし
   9点…なし
   8点…原[小倉南5]
   7点…なし
   6点…川村[中間5], 谷川[八幡東5], 荒木[小倉北4]

 ◆アドバンスプログラミング【4名平均 図面5.8+設問4.7=10.4】
  最高18点…山本[中間6]


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

2018年9月26日水曜日

2018年9月報

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


1. 9月授業内容


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


 割愛します。



1.1 <プライマリーコース『メカビートル』>


 割愛します。




1.2 <ベーシックコース『ロボリン君』>


 第5回アイデアコンテスト全国大会(2015年)ミドルコース最優秀賞作品(当時小3)がベースの、ボウリングロボットです。


 最優秀賞作品とは言え、書くべきことは特にないです。(このロボットだけは…)

モーター軸が直接、腕(うで)に見立てたLロッドを回すだけですので、ギアトレーンも動力リンクも、何もなし。

 デザイン性は秀逸(しゅういつ)ですので、雰囲気(ふんいき)は満点です。
これはもう、ボウリング大会で盛(も)り上がるしかありません。
ボウリング場さながら、各自のレーンを横にずらっと並べ、下記のレギュレーション(テキスト通り)にて点数を競いました。

1) ピンはピニオンギアうす + シャフト3ポチ
2) ピン数は5本(前2本+後ろ3本のレイアウト)
3) ピン位置はスコアボード前4ポチ分の範囲(はんい)内
4) ボールはマイタギア2個をくっつけた大きさまで(テキストp.14)
5) 2投球×5フレーム(全ストライクで最高70点)(*1)


 30点超えで優勝する人、1~2点で終わる人など、さまざま。
何ゲームやっても、あまり変わりません。偶然(ぐうぜん)や運だけではないようです。

下記が勝つポイントだったようです。

・投球ロボットが左右に向きを変えられるか(2日目テキスト)
・電池がパワフルか(新しいか、4本よりも5本か)
ピン同士が離(はな)れているか(くっつけて置くと、後ろのピンが前のピンを支え、倒れにくくなる)
・腕をぐるっと回した後にボールに当てるか(腕の加速を待たず、スイッチONですぐに当てる位置だと、ボールが遅くてピンまで届かない)

 皆さん、楽しみにしていただけあって、ゲーム中はいつにも増(ま)して、歓喜(かんき)の雄叫(おたけ)びや、ミスを嘆(なげ)く声が飛び交(か)いました。

君たちは、まだまだ、遊び足りないんだね。



*1 本物のボウリングでは、1~9フレームまで2投球、10フレーム目を3投球にして、全ストライク(9フレーム目までストライク9回 + 10フレーム目ストライク3回)で 30点×10フレーム=300点満点です。
 ロボリン君では、5フレームとも2投球、全ストライク(4フレーム目までストライク4回 + 5フレーム目ストライク2回)で 15点×4フレーム + 5フレーム目10点=70点満点です。
 ストライクを出すと、次の2投分まで加算した(計3投分の)点数が入り、最高で、本物では10点×3=30点、ロボリン君では5点×3=15点となります。


1.3 <ミドルコース『ステアリングカー』>



 機械の王道たる、自動車です。ロボット教室の生徒さんなら、絶対に造って欲しい一台です。


 しかし、これまで幾度(いくど)となくロボット本体にタイヤ4輪を付けて転がしてきたのに、なぜ今さら“”なんでしょうか?
そのポイントは曲がる仕掛け(ステアリング)、つまり、ハンドル(英語ではステアリングホイール)を回すと左右の前輪が同期して向き(舵角=だかく)を変えるメカニズムです。

このメカニズムは3点から構成されています。


(1) ラック&ピニオン方式
 円形のピニオンギアを直線状のラックギアと噛み合わせ、ハンドル操作による回転運動を左右方向の直線運動に変換し、前輪の舵角(だかく)を変えます。

 このラックギア(洗濯板みたいなやつ;通じるかな…)は、今までロボット顔面の付け髭(ひげ)くらいにしか利用する機会のなかった人にとっては、初めて日の目を見ました!
これが本来の使い方ですよ!

 この仕組みは、プラモデルで自動車を組み立てたことのある人なら知っていたでしょうが(*1)、実車と同じ(*2)です。


(2) 平行リンク
 左右のタイヤの舵角が揃(そろ)う仕組みは、平行リンクと呼ばれる機構です。
左右に動くラックギアが平行リンクの外形を長方形にしたり、それを潰(つぶ)して平行四辺形にしたりしますが、いずれにせよ、4辺は平行のままですね。


(3) ユニバーサル・ジョイント(自在継ぎ手)
 ピニオンギアを回転させるシャフト(水平方向)と、ハンドルを回転させるシャフト(後方斜め上方向)は、同一直線上になく、途中で折れ曲がって接続しています。
ハンドルを上下左右に揺らしても問題なく操舵(そうだ)できます(*3)。

 チェーンや多数のギアを介さず、駆動力を数本のシャフト(棒)で遠方の異なる方向に伝達できる点で、これは大発明なのです。
なぜそのようなことができるのか、言葉で説明するよりじっくり観察しましょう(*4)。


 さて、学ぶべき点の多いリアルなモデルカーでしたが、授業最後の競技は“運転技能”。
マリオカートで鍛えてるって言ったって、車庫入れしたこと、ないでしょ?

教習所さながら、狭い角を曲がり、障害物を避け、脱輪にも注意しながら、狭いスペースに縦列(じゅうれつ)駐車や、後ろ向きに駐車するまでの時間を競いました。

操縦性を高め、速く走らせるポイントは以下の通り。


・あまり屈(かが)まずに済むよう、ステアリングシャフトをびよ~んと延長
・電池ボックス/スライドスイッチを延長ケーブルでつないでリモコン化(2日目テキスト)
アクセルペダル代わりにタッチセンサー(黒)を直列につなぎ、前進⇔後退の切り替え時のみスライドスイッチを操作
・全長(前後輪の軸間距離)を短く、小回りに(*5)
・直進時のスピードアップに、減速比の緩和(*6)


 やはり、バックでの運転には慣れていないようで、ハンドルの“切り返し”を忘れて同じ場所を行ったり来たり、入れやすいフロント部から突っ込んで、どつぼにはまる例も…。
タイムには数倍の開きがありましたが、崖から落ちずに駐車できただけ命拾いしました!


*1 若者の車離れが叫ばれる昨今、自動車のプラモデル製作経験は少ないようですね…。


*2 どの自動車カタログにも逐一「ステアリング形式: ラック&ピニオン式」のように書かれています。もう、「その他に一体何があるんだ!?」っていうくらいに。
 学んだ仕組みに実感が沸きますので、是非、Webカタログを見てみましょう。
できればお使いの車を検索して。スペック中の諸元表にあります。
 <参考> http://www.suzuki.co.jp/car/alto/detail/spec.html


*3 実車でも“チルト・ステアリング”といって、運転者の背丈に合わせてハンドルの上下位置を調整できるようになっているものがあります。
 また、サスペンションにより上下に揺れる車輪へエンジン動力を伝えるドライブシャフトにも使われています。

*4 さらに興味が湧いたら、インターネットで調べてみましょう。問題点もあります。
 <参考> https://ja.wikipedia.org/wiki/%E8%87%AA%E5%9C%A8%E7%B6%99%E6%89%8B

*5 自動車用語で、「ホイールベースが短いので、最小回転半径が小さい」と言います。
 前回(2017年3月)に続き中間教室で見られた、この真っ当なアイデアの体現と効果に驚かされました。

*6 テキストでは1/5(ピニオンギア⇒ギアL)ですが、1/3(ピニオンギア⇒ギアM)等に変えて速くできます。


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



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




1.5 <プロ3年目コース『六脚ロボット(3)』>


 ロボティクスの名に相応しい六脚(カブトムシ型)ロボットの総仕上げに、
先月第4回までの自動シーケンス制御[HexRobot4/RemoteWalk*]をベースに、
  第5回:障害物センシングによる自律歩行制御[HexRobot5/HexCrawler*]
  第6回:与えたデータ通りのモーション再生制御[HexRobot6/HexMotion*]
を足しました。

本ロボットの制御に使用したプログラミング技術は、


現在値目標値を管理し、一次関数で補間することによるサーボモーターの滑らかな制御
・サーボ制御と異なる周期でのタイマー割り込みによるコントローラー読出し
ステートマシン(状態機械)モデルによる歩行モードおよびシーケンス(ステップ)管理
乱数によるランダム分岐制御
モーションデータ二次元配列への格納とアクセス

など、てんこ盛りです。


ソースコードは700行(コメント・空行を除いても450行)を超え、全体像を把握するにも精神力が要ります(*1)。
それを知りたいと思って、ここを読む人はいないし、その必要もありません。
それぞれの技術をもう一度知りたいと思ったときに、テキストやサンプルプログラムが参考になるでしょう。

今は100%理解しなくても、将来、何らかのロボット制御プログラムを書く段になったとき、この経験や考え方が大いに役立つでしょう。

ここでは、ゲーム制作に役立つ(というより必須の)テクニックをピックアップしておきます。


 じゃんけんプログラムを作りたい場合、コンピュータにグー・チョキ・パーをランダムに出させたいですね。
random(3) でランダムに出てくる 0, 1, 2 を対応させます。
サイコロの目なら、random(6) + 1 または random(1, 7)1~6 が出ます。

ここで知っておくべきことは、ランダムと言っても「真にデタラメな順番ではない」という事実です。
プログラム通りのビット演算しかできないCPUに対して、「何か適当な数字を出して!」は難しい注文なのです。
だから、十分ランダムに見えるように、何かしら“最初の数”をこねくり回す関数で“ちゃんと計算して”出します。

全く適当じゃないですね。これを「疑似ランダム」とか「疑似乱数」といいます。
一回限りのゲームならこれで良いのですが、問題は、プログラムを起動する度に、毎回同じ順番で数(グー・チョキ・パー)が出てくるという現象です。
これは、ゲーム機としては致命的と言って憚(はばか)れないでしょう。

 そのために、疑似乱数列生成関数に“シード値”(種となる初期化番号)を与えて、乱数列を変えられるようになっています(*2)。
Arduinoでは randomSeed(シード値) と書き、シード値はlong型整数(-2147483648~2147483647)です。

randomSeed(0)randomSeed(1) では、その後に呼び出される random() が出す数の順番が異なります。
一方で、シード値が同じなら同じ乱数列になることが“保証される”ので、シード値を毎回ランダムに与えないとなりません!

randomSeed( random(100) ) とやっても無駄です。
毎回起動後に ramdom(100) が同じ値を出すので、どうにかしてランダムな数を“拾ってくる”必要があります。

乱数列を生成するのに乱数が要るって、堂々巡りやん!
そう聞こえますね。

 Arduino等の小規模(組み込みシステム用)マイコン環境では、未接続(オープン)のアナログ入力ピンがあれば、そこから読み取ったアナログ値(ノイズ)をシード値に使う手がよく使われます(*3)。

 randomSeed( analogRead(0) );  // 0番ピンがオープンの場合


もしくは、ゲームのスタートボタン等、幸運にも(?)ユーザーの不定な行動タイミングを読み取るチャンスがあるならば、プログラム開始時からの経過時間をミリ秒単位で返す millis() を使う手もあります。

 pinMode(D2, INPUT_PULLUP);  // D2をタッチセンサー入力ピンに使う設定
 while( digitalRead(D2)==LOW );  // D2が押されるまで待つ
 randomSeed( millis() );  // ランダムな経過時間を取得できる

その他、温度(熱雑音)時刻GPS情報などが取得できるシステムでは、それらが使えます。
いずれにせよ、融通の利かない決定論的コンピュータには、カオスに満ちた外界からの情報が新鮮というわけです(*4)。

ならば、最初から analogRead(0) % 3 でじゃんけん、millis() % 6 でサイコロを振ればいいやん!
そう思いますよね。

6通りのサイコロ程度ならそれで十分かもしれませんが、広範囲の乱数を取得するには、分布の一様性(均等性)が問題となり得ます。
例えば、0~999 までの乱数が欲しい場合、analogRead()0~1023 を出すと言っても、
その時の静電的・電磁的条件によって 400~500 に偏るかもしれませんし、
起動と同時にスタートボタンを連打するせっかちな坊やに1000ミリ秒もの時間の揺らぎはありません。


暗号化の鍵データ生成等、セキュリティ用途にはまた別格の品質(不確定性・予測不可能性)が求められますが、ゲームや一般用途なら randomSeed()random() で十分です(*5)。

 もう分かっていると思いますが、プログラムは自分で書き、デバッグに苦労してみないと“絶対に”身に付きません。
何度もプログラミングして、虫(バグ)に「君の思考は相変わらず浅はかだね」と言われ続け、それに冷徹に向き合い、論理的に解決することでしか本当のスキルにならないのが人間の性(さが)です。

 ということで、佐藤の最後の親心で、卒業制作です。
楽しんで、苦しんで、頭脳パワーアップして下さい。発表会に期待します。


*1 何より、他人の書いたプログラムを読み解くのは面白くないし、苦行です。
 かと言って、自分で書いてデバッグするのはもっと大変ですが…。
 少なくとも、強い興味があるか、必要に迫られた時でないとムリですね。

*2 あくまでソフトウェア(ライブラリ)的な実装で、マイコンのハードウェア機能ではありません。

*3 オープン入力ピンは、他の電気ノード(電源等)に対してハイインピーダンス(高抵抗)かつ静電容量が小さいために、周辺の電磁ノイズに影響されて電位が揺らぎやすい。
 「フローティング」ともいう。

*4 量子コンピュータで量子乱数が扱えるその日まで…。

*5 簡易な電子機器(イルミネーション制御等)には random() が十分過ぎて、プログラムメモリが1KBしか無いようなマイコン(AVR ATtiny13等)に占めるコード量が数十%と邪魔な場合、適当な乱数列生成関数を書くこともあります。


2. 今月の課題


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

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

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

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

 <アドバンスプログラミングコース>
  - オリジナル課題プリント(見取図+設問)
  - 上記授業内容を精読する

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


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


◆八幡東11/3→11/10へ一週ずれます。

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

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

 ⇒ 10/6, 20,  11/3, 17,  12/1, 15


[東福間プロ]2018年10月・11月
   - 10:00~11:30 卒業制作・発表

 ⇒ 10/14, 28(卒業制作 進捗報告・相談会),  11/11(発表会)


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

 ⇒10/13 第1回 3F会議室2
  10/27 第2回 3F会議室2
  11/10, 24,  12/8, 22


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

 ⇒10/ 7 第1回 5F小セミ
  10/21 第2回 5F大セミ
  11/4, 18,  12/2, 16


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

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

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


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

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

 ⇒ 10/6, 20,  11/10※, 17,  12/1, 15

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


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

 ⇒ 10/14, 28,  11/11, 25,  12/9, 23


4. お知らせ

1) ロボット教室 全国大会 リピート放送
 8/25(土) 東京大学 安田講堂で開催されました全国大会2018の放映です。

 CSキッズステーション特別番組(無料)
 ●10/13(土) 13:30~14:00
 ●10/28(日) 15:00~15:30


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

 ◆プライマリ【3名平均 図形4.3】
   5点…伊藤[小倉北1], 末吉[小倉北 年長]

 ◆ベーシック【24名平均 図面2.7+設問3.0=5.7】
  10点…柴田[小倉北3], 橋本[小倉南1]
   9点…下木[八幡東3]
   8点…井窪[中間6], 永瀬[中間4], 森崎[八幡東3], 林田[小倉南1]

 ◆ミドル【20名平均 図面2.4+設問1.6=4.0】
  10点…橋本[小倉南4] →偏差値78!
   9点…なし
   8点…なし
   7点…福政[八幡東4]
   6点…田中[東福間6], 荒木[小倉北4]


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