2.今月の課題
3.今後の授業スケジュール
4.お知らせ
1. 3月授業内容
1.0 <スタートアップ(全コース)>
割愛します。
1.1 <プライマリーコース『のびーるハンド』>
割愛します。
1.2 <ベーシックコース『ジャイアントホッパー』>
バッタ型ロボットです。ギアを介(かい)してモーターが駆動するのは、本体の側面で時計の針のように回転するロッド3アナだけです。
それだけなのに、後ろ脚(あし)を折り曲げたり、伸ばしたりを繰り返し、尺取り虫のように前進します。どうしてでしょうか?
ロッド3アナが1回転毎に後ろ脚を跳(は)ね上げています。
このような回転軸を利用した周期的な運動機構をカムと呼び、例えば、自動車のエンジンが吸気と排気を切り替えるために使われています。
後ろ脚が跳ね上がる時に関節(かんせつ)が折れ曲がって、後ろのタイヤLを前方へ引きずります。
この時、本体は進みませんが、次に輪ゴムの力で脚が伸びる時、後ろのタイヤLは微動(びどう)だにせず、前輪のタイヤSが転がりながら本体を前へ進めます。
後ろのタイヤLは回転しないのに、どうして前進するよう都合(つごう)良く引きずられたり踏(ふ)み止まったりしてくれるのでしょうか?
タイヤLは回転しないのですよ。だったら、タイヤLは動かず、後ろ脚の屈伸(くっしん)運動に合わせて本体(前輪)が前後に往復(おうふく)するだけではないでしょうか?
(尺取り虫も、次の一歩を迷ってそのような動きをすることがありますね)
それは摩擦力(まさつりょく=すべらないぞ!という力)の効(き)き方が違うからです。
ちょっと難しいのですが、脚を折り曲げる(引っ込める)時はタイヤLを斜(なな)め前方上向きに引き上げる力が働き、重い本体を後退(こうたい)させるほどの地面との摩擦力はなくなります。
その結果、タイヤLの方が引きずられるのですが、逆に脚を伸ばす時は、斜め後方下向きに蹴(け)り出すので、地面との摩擦力が強力に働き、すべらずに本体を推進(すいしん)させるのです。
消しゴムをノートに軽く当てた場合と強く押し付けた場合とでは、すべらせるのに必要な力が全然違いますよね?
また、消しゴムをノートに斜めに当てると、引く時は軽くすべりますが、押す時は摩擦力を強く感じますね。タイヤLにも同じように作用しているのです。
タイヤLが地面から跳ね上がるほどのパワーがあれば分かりやすいのですが、ずっと地面を引きずっていますので、見た目では分かりません。
タイヤLを消しゴムだと思ってください。
タイヤLを回転しないよう止めている理由が分かったでしょうか?
試しに、自由回転するようクランクを取り外してみてください。
最後の競技は“バッタレース”をしました。スピード勝負です。
推進はゴムの張力(ちょうりょく)、そのゴムにエネルギーを充填(じゅうてん)するのがモーターの仕事と言えますから、ゴムはきつく、モーターはパワフルに、というのが理想ですが、限界もあります。
究極は、有限なモーターパワーをロッド3アナの回転トルク(脚の力)に振るか回転数(脚のスピード)に振るかでギア比を決めたり、それに適した輪ゴムの掛(か)け方や本数を探ったりするのが戦略です。
これまでに下記のような素晴らしい改造が生まれています。
1) モーター軸のピニオンギア ⇒ ギアMへ交換(脚が3倍速く動く)(*1)
2) 側面のロッド3アナ回転中心を端っこ ⇒ 中心へ変更(脚が2倍速く動く)(*2)
3) 2)のロッド3アナに、ロッド5アナを被せ、2)の弱点を解消(*3)
4) タイヤLに代わり、グロメットをはめて、後ろ脚を軽量化(*4)
5) タイヤLのクランク(回転止め)に代わり、ラチェット機構(前方向のみ回転させる)を取り付けて、スーッとすべるように前進する(*5)
登坂(とうはん)チャレンジも、面白い競技でした。
テキスト通りのロボットでは、坂がきつくなると、後ろ足(タイヤL)の摩擦力が減(へ)ってすべったり、せっかく蹴(け)っても次に蹴るまでに前足(タイヤS)が後ずさりしたりして、あまり登れません。
後ろ足を重くしたり、腹(はら)で支えたり、前足にもラチェット機構を取り付けたり(!)して、すべり止めの改良が様々に生まれていました。
ベーシックコース修了生に相応しい、奥の深いロボットでした。
*1 力は1/3に弱くなり、モーターが力負けして停止しやすい弱点がありますので、あまり欲張(よくば)れません。
*2 回転半径が半分(2アナ分⇒1アナ分)になるので、動きの幅(ストローク)が半分になり、あまりスピードアップしない弱点があります。
*3 ロッド5アナの中心を回転軸としても、回転半径を2アナ分とれ、ストロークを減らさずに脚を2倍速く動かせます。
*4 バッタらしい力強い脚に見えなくなりますが、電池が弱くても動きやすいですね!
*5 これだけで圧倒的に速くなります。ミドルコースレベルの改造です。
1.3 <ミドルコース『ダンゴム』>
変形ロボットです。ダンゴムシのように沢山の足で歩いたり、丸まったりします。
●ロボットの動き
モーターは回転する力しか生み出しませんね。
その回転する力でロボットの足を動かし前進するのか、本体を変形させる(丸まる)のかはどこで決まるのでしょうか。
1日目のロボットは丸まらず、スイッチを切り替えても前進・後退するだけです。
(これだけでも、虫嫌いな人をゾクゾクさせるには十分な仕上がりですが)
2日目のテキストに丸まるためのミソが隠(かく)されています。
●丸まる改造
テキストに倣(なら)い、写真のようにラチェットをギアに噛ませてみました。
これでスイッチを入れると…、前に進んだり、丸まったりしましたね。
なぜ2通りの働きをするのか、皆さんは既に理解していると思います。
スイッチを一方に入れて前進するのは変わりませんが、逆方向に入れるとラチェットがギアに噛み、後退する代わりに変形するようになりました。
ここで、1つ疑問が浮かびます。
ラチェットが噛むと、そのギアは回転できなくなり、ロボットがその場に止まったまま動けなくなるだけではないでしょうか?
ちょうど車のタイヤを回らないように固定した場合のイメージです。
●力の逃げ道
写真のように、赤矢印のギアを回した場合、隣のギアへ回転が伝わります。
青矢印のギアは回転する以外に動きようがないですね。
そこで、ギアの土台を変えてみます。
写真のように、ビーム2本にシャフトを1本通し、ハサミのようにクロスさせます。
シャフトにギアを通し、もう1組のシャフトとギアを上部のビーム1本だけに通して噛み合わせます。
(実際に作って体験してみることが理解への一番の近道です)
赤矢印の示すシャフトを回してみます。当然、青矢印のシャフトも回転すると思います。
同時に、なんとなく上部のビームもオレンジ矢印の向きに回転しようとしませんか?
赤矢印のシャフトを急に回そうとするほど(*1)、オレンジ矢印のビームもつられて回りやすいと思います。
この場合、赤矢印の回す力は、青矢印のギアを回すか、オレンジ矢印のビームを回すかの2通り、“逃げ道”があるわけです。
力の逃げ道がいくつかある場合、より簡単に動かせる(抵抗が小さい)方に逃げます。
その結果、青矢印のギアが回ったり、オレンジ矢印のビームが回ったりします。
回しやすさ(抵抗)が同程度の場合は、両方とも回ることになります。
ここで、力の逃げ道の1つを閉ざすとどうなるでしょうか。
写真の赤丸のように、ストッパーを取り付けてみました。
このストッパーの役割は、ダンゴムの(ギアと噛んだ)ラチェットと同じで、接触しているギアを回らなくしています。
この状態で、赤矢印のシャフトを回してみてください。
上部のビームをオレンジ矢印の向きにダイレクトに回転させる感じがすると思います。
なぜそうなるのでしょうか?
赤矢印の力の逃げ道として、ストッパーを破壊して青矢印のギヤを回すより、ビームを回した方がはるかに楽(抵抗が小さい)ですね。
その結果、青矢印のギアのギアを回すことなく、ビームを回すことに専念するのです。
これがダンゴムを後退させるか、丸めるかを分かつ仕組みの原理です。
2月の『サカアガリン』、1月の『シュート君』にも使われていますよ。
●丸まる仕組み
力の逃げ道がダンゴムの変形にどのように作用しているのかを見ていきましょう。
モーター軸(ピニオンギア)をM、側面のギアMを左からA,B,C,Dと名付けます。
ギアDに注目すると、これはラチェットにより回らなくなっています。
全てのギアは噛み合っていますので、このままではモーターMは回転できません。
ここで何が起こるでしょう。力は“逃げ道”を常に探しています。
スイッチを入れると、ピニオンギアMは回転しようとしますが、ラチェットにより固定された一連のギアを回すことはできません。
代わりに、モーター(頭部)自身が赤矢印の向きに回ることで、ピニオンギアMがべベルギアの周りを回ることができますね。
ある程度までモーター(頭部)が回転すると、写真の青丸のように、ダンゴムの頭と胸のパーツ同士がぶつかってしまい、回転できなくなります。
逃げ道は他にないでしょうか?
実験した2本のビーム同士のように、頭⇔胸以外にも、胸⇔腹、腹⇔尻の間に、折れ曲がる関節がありますね。
これらが折れ曲がることで、ギアAはBの周りを、BはCの周りを、CはDの周りを回る仕事ができ(*2)、その結果、ダンゴムは丸まっているのです。
さて、ダンゴムが丸まる仕組みは以上ですが、丸まる動作に不必要なギアがあります。
それは、ギアA,B,C,Dのうち、どれを指しているでしょうか?
ダンゴムは、3つの関節で分けられた頭・胸・腹・尻の4部位それぞれに、ギアA,B,C,Dが取り付けられ、関節の両側のギアが互いの周りを回ろうとする(*3)力で折れ曲がっています。
だから、一見無駄がなさそうですが、この力の伝達に寄与していないギアがあります。
つまり、それを外しても丸まる動作に影響はありません(*4)。それはどれでしょうか。
そのギアの記号と不必要な理由、そのギアの別の役割を考えてみてください。
*1 物体を素早く加速させようとするほど、それを妨げようとする抗力が大きくなり、その分、大きな力を要します。慣性の法則といいます。
*2 実際は、回転方向を整えるために、間にピニオンギアを介していますが、関節を挟んだギア同士が互いの周りを回る作用としては同様に考えられます。
*3 どちらがどちらの周りを回っていると考えるかは、基準(カメラの設置場所=動いていないと感じる方)によって変わる相対的なものです。
*4 ギアA,B,C,Dは両側面にあることに注意してください。両側セットで考えます。
1.4 <アドバンスプログラミングコース『ピッキングロボ(2)』>
《下記を参照下さい》
http://robocobo.sakura.ne.jp/blog/robot/adv1-1803.pdf
1.5 <プロ3年目コース『二足歩行ロボット(3)』>
二足歩行の制御シーケンスをプログラムに落とし込み、ボタン一発で自動歩行させる最終月です。
腰と両足首のサーボモーター3個を個別に制御する手動操縦プログラム[BiRobotTest4_libまで]では、
1) 体を右傾させる (左足を浮かせる)
2) 着地した右足首を左に捻る(左半身を進める)
3) 体を左傾させる (右足を浮かせる)
4) 着地した左足首を右に捻る(右半身を進める)
という一連の動作(シーケンス)を繰り返せば前進、逆順で後退できました。
この順をそのままプログラムに記述すれば自動で歩行しますが、もう少し整理して、
a) 腰も足首も捻らず(原点位置で)直立した静止状態を挿入し、
b) 2)と4)の両足首を捻る方向の組合せで、前進・後退・左旋回・右旋回の4動作を切り替える
ことを実現したのが、ボタン一発型の自動歩行プログラム[BiRobotTest5_lib]です。
この機能レベルになると、ある時点ではどうなっており(状態)、何ができて(動作)、次にどうなるか(遷移)をしっかり設計し、プログラム中でも管理する必要がでてきます。
それには、逐次処理的な制御フローを図示するのに向いたフローチャートよりも、
各状態・動作・遷移に注目した制御フローを図示する状態遷移図が向いています。
状態遷移図は、「有限個の状態と遷移と動作の組合せからなる機械モデル」の設計図です。
この機械モデルを有限オートマトン(finite automaton)または有限ステートマシン(finite state machine)と呼びます。
機械モデルの実装はロボットでも、ソフトウェアでも、ピタゴラスイッチでもあり得ます。
何やら小難しい響きに聞こえますが、プログラムが組めない人でも、テレビのリモコン操作を不思議に思わなければ、裏で流れる制御ソフトの仕業として感覚的に理解していることです。
例えば、「入力切替」で画面モード(状態)を切り替え(動作・遷移)ますね。
さらに、同じ数字ボタンを押しても、地デジではチャンネルが替わり、ビデオ入力では無効になり、ブラウザではカーソルキーとして働くなど、現在の状態によって、可能な動作と遷移先の状態が変わります。
複雑な制御シーケンスや分岐・繰返し構造を場当たり的に記述していくと、バグによる思わぬ動作不良を招き易くなります。
これを、とり得る状態の数(無限にはない)に分解して、各状態における動作と遷移先の状態を規定していけば、比較的簡単に信頼性の高いシステムが設計できるというアイデアです。
状態遷移図(または表)や、より拡張された表記法である統一モデリング言語(UML)等を利用して、様々な製品が設計されています。
さて、プログラム中で状態を管理するには、現在および遷移先の状態値(番号・記号)を記憶しておくための変数を用意します。
このような変数名には、"flag", "mode", "state", "step"等の文字列を入れると良いでしょう。
あとは、状態値に応じて、if文やswitch/case文による分岐ブロック{ }内に、動作(関数呼び出し)や状態値の書き換え(遷移)と、それに必要な条件(無条件なら不要)を記述するだけでも形になります。
独学でプログラミングを始めても、全員が発明しそうな必然の工夫です。
今回の二足歩行プログラムには、超音波センサー等の入力(条件)による自律的な状態遷移はありませんが(*1)、
前述の通り、無線コントローラーのボタン操作(条件)により足首の捻る方向(動作)を変え、4つの歩行モードを切り替えています。
その他、下記のような制御の工夫点がありました。
●繰返し周期の多重化
1つのメインループ loop() 内で、高頻度なサーボモーターの位置更新と、
中頻度なコントローラー操作や超音波センサーからの読出しとディスプレイ更新、
低頻度な音の更新を両立させるテクニックです。
void loop() {
if (CounterA == 0) {
xxx.read_gamepad(); // コントローラ読出[100ms毎]
yyy.ping(); // 超音波センサ計測[100ms毎]
updateDisplay(); // ディスプレイ更新[100ms毎]
if (CounterB == 0) {
updateTone(); // 音の更新[300ms毎]
}
}
updateServo(); // サーボモータ更新[20ms毎]
CounterA++; // 0→1→2→3→4[20ms毎]
if (CounterA == 5) {
CounterA = 0; // 0リセット[100ms毎]
CounterB++; // 0→1→2 [100ms毎]
if (CounterB == 3) {
CounterB = 0; // 0リセット[300ms毎]
}
}
delay(20); // 毎秒50回ループ[20ms毎]
}
●サーボ移動量の緩和
上記でコントローラー操作を100ms毎にしか読み出さないのに、サーボモーター位置を20ms毎に更新するのは動きを滑らかにするためですが、
そのために足首は1/5ずつ、腰は(反動で倒れやすいので)1°ずつに毎回の更新量を制限するテクニックです。
diffLF = (targetLF - currentLF)/5; // 左足首の移動量/5
diffRF = (targetRF - currentRF)/5; // 右足首の移動量/5
currentLF += diffLF; // 左足首サーボモータ角度
currentRF += diffRF; // 右足首サーボモータ角度
servoLF.write(currentLF); // 左足首サーボモータ更新
servoRF.write(currentRF); // 右足首サーボモータ更新
if (currentBD < targetBD) {
currentBD++; // 腰サーボモータ+1°
else if (currentBD > targetBD) {
currentBD--; // 腰サーボモータ-1°
}
servoBD.write(currentBD); // 腰サーボモータ更新
授業の最後に、二足歩行ロボット4体で“競歩”に向けたプログラム改良に挑戦しました。
サーボモーター3個独立制御の手動操縦プログラムでも良し、
ボタン一発シーケンス制御の自動操縦プログラムでも良し、
規定の区間(約50cm)を歩き抜くタイムを計測します。
手動操縦では、焦ったり進路の修正手順で混乱したりで、無駄な時間が多くなり、1分近くかかりました。
自動操縦では、その点の失敗がなく一定速で歩き通し、40秒前後の安定したタイムを記録しますが、デフォルトのプログラムのままでは、どんぐりの背比べです。
そこで、毎回のサーボ移動量を増やして機敏に動かしたり、腰を傾ける角度を狭めて左右の足を踏み替える時間を短縮したりするアイデアが出ました。
最速では、30秒を少し切るまでになりました。
この二足歩行ロボットは、3個と少ないサーボモーターで多様な歩行動作ができるだけでなく、上体を左右に振り、片足を浮かせて両足首を曲げられるので、シーケンス制御のセンス次第では、ダンスのような動きも見せられるでしょう。
胸のディスプレイや演奏力も武器にして、ロビに勝るエンターテイメントロボに仕上げてみてはどうでしょうか。
春タームでは、赤外線を使ったサッカーロボを通じて、ロボカップジュニアの基礎となる技術を習得します。
*1 目玉に見せかけた超音波センサーが付いていますが、計測した距離に応じてメーター表示や鼓動音を変えているだけであり、歩行制御には関与していません。
2. 今月の課題
<スタートアップ(全コース)>
特にありません
<プライマリーコース>
- オリジナル図面プリント
<ベーシックコース>
- オリジナル課題プリント(3面図+設問)
- 上記授業内容を精読する(概ね3年生以上/低学年は補助の下で)
<ミドルコース>
- オリジナル課題プリント(3面図+設問)
- 上記授業内容を精読する
<アドバンスプログラミングコース>
- オリジナル課題プリント(見取図+設問)
- 上記授業内容を精読する
<プロ3年目コース>
- 上記授業内容を精読する(該当テキストページを見ながら)
3. 今後の授業スケジュール
◆小倉北4/1AMは5F企画ルーム1・2に分かれます。
◆東福間アドプロ時間を4月~変更(10:30→17:30)させて頂きます。
◆東福間5/19セミナーの為、時間変更(13:30→9:30)をお願いする予定です。
◆八幡東5/19セミナーの為、時間変更(13:30→15:30)をお願いする予定です。
――――――――――【佐藤教室長】――――――――――
[東福間]第1・3土原則
(2018年4月~)
- 13:30~ ベーシック/プライマリ
- 15:30~ ミドル
- 17:30~ アドプロ※
⇒ 4/7, 21, 5/5, 19※, 6/2, 16
※アドプロ時間を4月~変更(10:30→17:30)させて頂きます。
※5/19セミナーの為、時間変更(13:30→9:30)をお願いする予定です。
[東福間プロ]第2・4日原則
- 15:30~ プロ3年目
⇒ 4/8, 22, 5/13, 27, 6/10, 24
[中間]第2・4土原則<なかまハーモニーホール>
- 13:30~ ベーシック/プライマリ
- 15:30~ ミドル
- 17:30~ アドプロ
⇒4/14 第1回 3F会議室2
4/28 第2回 2F会議室1
5/12※, 26, 6/9, 23※
※5/12, 6/23はハーモニーホール利用不可の為、代替施設(未定)で開催します。
[小倉北]第1・3日原則<ムーブ>
- 10:00~ ベーシック/プライマリ
- 13:00~ ミドル
- 15:00~ アドプロ
⇒4/ 1 第1回 5F小セミ(AMのみ5F企画1・2)
4/15 第2回 5F小セミ
5/6, 20, 6/3, 17※
※6/17はムーブ利用不可の為、『商工貿易会館(シティプラザ)』で開催します。
――――――――――【菅本教室長】――――――――――
[とばた]第2・4土原則<ウェルとばた8F>
- 13:00~ 全コース(プロを除く)
⇒ 4/14, 28, 5/12, 26, 6/9, 23
――――――――――【中野教室長】――――――――――
[八幡東]第1・3土原則<レインボープラザ4F>
- 13:30~ ベーシック
- 15:30~ ミドル
- 17:30~ アドプロ
⇒ 4/7, 21, 5/5, 19※, 6/2, 16
※5/19セミナーの為、時間変更(13:30→15:30)をお願いする予定です。
[小倉南]第2・4日原則<総合農事センター2F>
- 10:30~ ベーシック/プライマリ
- 13:00~ ミドル /アドプロ
⇒ 4/8, 22, 5/13, 27, 6/10, 24
4. お知らせ
1) KIGSセミナー聴講のお薦めロボット教室で力学のセンスを学んでいる高学年~中学生の皆さんにお薦めします。
(当日の東福間・八幡東教室の授業時間を一部変更させて頂きます)
【科学の歴史(1) ~力学はどのようにして創られたか】
力学(りきがく)とは、物体にはたらく力や、物体の運動を対象とする科学のことです。
その歴史は古く、17世紀のガリレオやニュートンによって基本的な法則や原理が発見され、続く18世紀のオイラーなどの手で、現在のような形にまとめられました。
このような発展の流れを、わかりやすく解説します。
時 間 5/19(土) 13:00~15:00
会 場 北九州イノベーションギャラリー内 プレゼンテーションスタジオ
参加料 無料
講 師 有賀 暢迪(ありが のぶみち)氏 国立科学博物館 研究員 博士
申込み https://www.kigs.jp/event/2018/03/288.php
【科学の歴史(2) ~明治日本、西洋の科学と出会う】
時 間 12/1(土) 13:00~15:00(予定)
2) KIGSワークショップ出展しました
3/25(日) KIGS春のわくわくワークショップまつりに、コマ回し挑戦ブース『モーターで回せ!最強持久コマ!』を出展しました。
全てロボット教室のパーツを使い、コマの軸にシャフト8~12ポチ、円盤に各種タイヤやギアから自由に組み合わせてもらい、こちらで用意したベーシックコースのマシン『ベイスピナー』改で加速して、回転時間を競いました。
AM 50名、PM 70名、延べ120名のお子さんが訪れ、30秒以下の記録も多い中、1分を超えたのが20名程でした。
なかでも2分を超え、136秒を記録したのがトップ、以下、91秒、86秒、71秒と続くダントツぶりでした。
何名かの生徒さんも訪れ、ロボット教室の宣伝にならない記録を残してくれました!(笑)
いやー、コマ回しは単純で不思議で奥深くて面白いですね!
以前、佐藤や一部の生徒さんは、マシンの改良にハマって3分以上回したことがありますよ。
5月のベーシックコースに登場しますので、お楽しみに!
(5月ミドル進級予定であった方には後日、再履修をご提案します)
3) 2月課題 高得点者 []内は教室と学年
◆プライマリ【11名平均 図面3.9】
5点…渡邉[中間1], 板脇[小倉北 年長], 柴田[小倉北2], 林田[小倉南 年長]
◆ベーシック【15名平均 図面2.8+設問2.3=5.1】
10点…なし
9点…森崎[八幡東2]
8点…なし
◆ミドル【25名平均 図面3.1+設問2.3=5.4】
10点…なし
9点…田中[東福間5], 桑村[中間3]
8点…山本[中間5], 原[小倉南4]
東福間・中間・小倉北教室 佐藤 / 八幡東・小倉南教室 中野