Robot Watch logo
記事検索
バックナンバー
【 2009/04/17 】
月刊ROBOTウォッチング
~心機一転、MANOI企画設立!
[12:03]
【 2009/04/15 】
ノモケンの「素組でロボット」
バンダイ 1/100スケール MG「RX-78-2 ガンダム Ver.2.0」(その2)
[14:24]
【 2009/04/09 】
ノモケンの「素組でロボット」
バンダイ 1/100スケール MG「RX-78-2 ガンダム Ver.2.0」(その1)
[15:40]
【 2009/04/06 】
世界最小級の二足歩行ロボット「ROBO-Q」レビュー
~全高3.4cmの超小型ロボットが自律動作する!
[14:09]
【 2009/04/03 】
石井英男のロボットキットレビュー
ヴイストン「Beauto Balancer」
~倒立振子制御を手軽に学べる工作キット
[12:59]
【 2009/03/27 】
通りすがりのロボットウォッチャー
男の憧れか? 女性型ロボット
[01:19]
【 2009/03/24 】
「新型ASIMO」のフィギュアが登場!
~フィギュアで実感、ASIMOの進化~
[02:00]
【 2009/03/18 】
ノモケンの「素組でロボット」
バンダイ 1/72スケール「VF-25F メサイアバルキリー アルト機」(その3)
[14:28]
【 2009/03/11 】
ノモケンの「素組でロボット」
バンダイ 1/72スケール「VF-25F メサイアバルキリー アルト機」(その2)
[00:05]
【 2009/03/06 】
月刊ROBOTウォッチング
~2月はエンタメ路線を爆走!?
[11:31]
【 2009/03/04 】
ノモケンの「素組でロボット」
バンダイ 1/72スケール「VF-25F メサイアバルキリー アルト機」(その1)
[13:05]
【 2009/02/27 】
通りすがりのロボットウォッチャー
脳とロボットを直接つなぐBMI
[00:10]

JAPAN ROBOTECH「2006高度ソフトウェアプログラミング教室」レポート
【プログラミング編】

~Robo Designerを使ってライントレースロボットを作る
Reported by 井上猛雄

2日間かけてプログラミングの基礎知識を習得

 8月11日から13日の3日間、品川の東京都立産業技術高等専門学校において開催された「2006高度ソフトウェアプログラミング教室」。後半のレポートは2日目、3日目に実施されたプログラミング実習の模様と具体的な内容についてお伝えする。

 前回の最後に紹介したように、JAPAN ROBOTECHのロボット教材「Robo Designer RDS-X03 Platform+CDE」には、統合プログラム環境として「TiColla」と「TiColla CDE」が付属している。前者は「タイル」というオブジェクトを並べて、プログラミングが可能な専用ソフトウェアで、後者は本格的なC言語をサポートする開発環境である。

 今回のセミナーでは、まず生徒たちにフローチャートライクなプログラミングが行なえるTicollaを利用して、アルゴリズムの考え方を学び、その後TiCollaでのプログラミングと対比する形で、C言語を習得するように工夫がなされていた。実際に、いきなりC言語から学ぶよりも、ワンクッションおいてC言語を学ぶほうが、はるかに理解も早く、学習効果が上がるように感じた。

 2日目のセミナーでは、自律型ライントレースロボットを制御する手始めとして、赤外線センサの感度を調べるためのプログラミング実習が行なわれた。ライントレースロボットは外界の状況(このロボットの場合はラインがあるか、ないか)を判断するために、赤外線センサなどを用いるが、センサ自身の性質によって感度が異なっている。また赤外線発光ダイオードとフォトトランジスタの発光/受光角度や、明暗など周囲の環境(蛍光灯の光や太陽光などの違い)によっても影響が出る。そのため、ロボットを動作させる環境下で、それぞれのロボットに取り付けられた赤外線センサの性質を調べる必要がある。


【写真1】JAPAN ROBOTECHのロボット教材「Robo Designer RDS-X03 Platform+CDE」に同梱されている「TiColla」と「TiColla CDE」。TiColla CDEのパッケージには換装用のマイコンも含まれている 【写真2】C言語にチャレンジする生徒。早いうちからC言語に親しんでいれば、カーニハン&リッチーのようになれるかも!

TiCollaの基本操作・設定方法とセンサ感度調整用プログラムの作成

 ここからはTiCollaの基本操作からセンサ感度調整用プログラムの作成までを紹介する。まずTiCollaの起動画面のツールバーもしくはショートカットアイコンから「File」→「New」(ショートカットアイコンでは新規ボタン「NEW」)を選択する。

 ここで「New Project/File Wizard」画面が表示されるので【画面1】、「Project-Create Necessary Working Space」をクリックすると、画面下の「Next」ボタンが有効になり選択できるようになる。「Next」ボタンを選択すると、「Resource name」を入力するテキストボックスが出るので、プロジェクト名として任意の名前を入れてから、「finnish」ボタンを押すと、【画面2】のような初期画面が現れる。


【画面1】TiCollaの起動画面。「File」→「New」を選択すると、New Project/File Wizard画面が表示される。Project -Create Necessary Working Space」をクリックし、、画面下の「Next」ボタンを選択する 【画面2】次にプロジェクト名を入力すると、画面左側のProject Exprolerウインドウにプロジェクト名+「HW」、「PG」、「HTML」のファイルつくられる

 初期画面は、左側にProject Exploler領域、中央にワークスペース(作業領域)、右側にタイル(オブジェクト)のプロパティ(属性情報)が表示される領域で構成されている。また中央の作業領域には4つのタブが下側にあり、「Welcome to TiColla」、「HW」、「PG」、「HTML」のウインドウを選択できるようになっている。

 Wellcome~のウインドウはTiCollaの特徴などの紹介、「HW」のウインドウではハードウェア構成の設定、「PG」のウインドウではタイルを置いてプログラミングできる領域となっている。実際のプログラミング作業では「HW」と「PG」のウインドウを主に使用することになる。

 まず「HW」のタブをクリックすると、Robo Designerのコントロールボードを俯瞰した画面が現れる。左側に各機能を表す入出力のタイルパレット(PWM、Motor Driver、digital out、digital in、touch sensor、analogin IR sensorなど)が表示されるので、製作したロボットの構成にあったタイルを選んで、コントロールボードのコネクタ(CN)へタイルをドラッグ&ドロップして配置していく。


【画面3】TiCollaのハードウェアコンフィギュレータ画面。Project Exprolerウインドウのプロジェクト名+「HW」をクリックすると表示される。タイルプログラミングを開始する前に設定しておく。ここではCN3に赤外線センサを割り付ける
 これで設定した入出力がプログラムタイルとして反映されるようになる。今回のロボットではコントロールボードのコネクタCN3に赤外線センサーを入力しているので、パレット上の「IR Sensor」をCN3に配置すればよい【画面3】。また出力モータについてはデフォルトで配置済みなので、そのままにしておく。

 次にプログラムの作成をするために、「PG」タブを選択する。左側にプログラムタイルのパレットが表示される。各プログラムタイルは「Basic」、「Control」、「Variable」、「Extension」に分類されているが、主に利用するのは「Basic」、「Control」に分類されるプログラムタイルである。

 Basicタイルには、プログラムの最初と最後に必ず配置する「begin program」、「end」のほか、モータの動作を決める「mot」タイルなどが用意されている。また、Controlタイルには、ループ(loop)や繰り返し(rep)、分岐条件(デジタル/アナログ入力Port、変数比較分岐、ランダム変数分岐)、保持(wait)などの制御系のタイルが用意されている。そのほかVariableタイルには、変数の設定や加減算を行なうタイルがある。Extensionタイルは、前述のHWウインドウで拡張タイルを設定した場合に反映されるものだ。

 さて、センサ感度調整用プログラムに話を戻すと、センサ感度を調べるためには、床の白い部分から黒いラインを通過する際に、赤外線の受光量の変化をセンサが検出するようなプログラミングをすればよい。床を白か黒か判断する際の受光量の基準値(閾値となる電圧)を任意に設定し、もしもその値よりも上ならば床を白と見なしモータを動作させる。あるいは逆に、閾値よりも下ならば黒と判断してモータをストップさせる。

 ここで重要な点は、床が白か黒かを判断するために用いる分岐条件の部分である。これは分岐タイルを使う。【画面4】にTiCollaで用意されている4つの分岐タイルを示す。今回は赤外線センサからの信号であるため、アナログ入力の条件分岐タイルを用いることになる。この考え方に沿ったタイルプログラムを【画面5】に示す。なお、この画面では閾値を仮に100としている。この値は画面右側にあるプロパティウインドウのValueNumeric値で設定する。


【画面4】TiCollaには4種類の分岐条件のタイルが用意されている。今回は上から2番目のport Analog:アナログ入力条件分岐タイルを利用。このタイルをタイルメニューから選んでワークスペースにドラッグすると【画面3】のハードウェア設定が反映されるので、センサ接続にはポートNOとしてCN3が表示される。条件のタイプや比較する数値は画面右のプロパティウインドウで設定する 【画面5】センサ感度の調査をするプログラム。センサーの性質や、外乱(蛍光灯の光や太陽光)によって、ロボットの動作が変わるので、センサーの閾値がどこでベストになるかを探る。分岐条件の値を変更して、ロボットの挙動を確かめる

 タイルプログラムができたら、ロボットとパソコンをRS-232Cケーブルで接続し【写真3】、RS-232Cシリアル通信ボード上のスイッチを「STRAIGHT」側に設定する【写真4】。次に、ロボットのコントロールボード上にあるモード切替スイッチを中央の「D」の位置にセットして転送モードにしてから、電源スイッチをオンにする。ここでTiCollaの「ダウンロード」ボタン(P)をクリックすると、【画面6】のような画面が現れる。「NEXT」ボタンを2回押すと、プログラムの転送が始まる。

 プログラムの転送が終わると、コントロールボード上のLEDが点灯するので、うまくダウンロードできたか確認しておく【写真5】。あとは、コントロールボードの切替スイッチを動作モード「R」に戻し、実行スイッチを押すと、ロボットが動き出す。


【写真3】ロボットのコントロールボードとパソコンをRS-232Cケーブルで接続する。コネクターは少し差込みにくいので注意が必要 【写真4】RS-232Cシリアル通信ボード。ストレートケーブルなので、ボード上のスイッチは「STRAIGHT」側に設定しておく

【画面6】プログラム転送時のダウンロードウィザード。COMポートはPreferenceで必ず設定しておく 【写真5】コントロールボード上に搭載されているLED。プログラムの転送時に点灯したり、左右のモータが動作したときにも点灯するので、トラブルシューティングに役立つ

 センサ感度調整の実習では、このようなプログラムを生徒が自力でつくり、閾値を50、100、150、200、250というように50刻みで変えて、ロボットの動作の変化を調べる課題が出された。参加した生徒の実験結果は、閾値が50-100の間でロボットがストップしたケースが6件、100-150でストップしたケースが5件ほどであった。センサはかなりバラつきはあったようだが、この結果から50-100もしくは100-150の間にベストとなる閾値があったようだ。


ライントレース用のアルゴリズムとプログラミングの具体的な方法

 2日目の後半は、いよいよライントレース用のプログラムをつくる過程に入った【写真6】。ロボットにラインをトレースさせるための基本的な考え方を【図1】に示す。今回、製作したロボットは赤外線センサを1つだけ搭載している。このセンサからラインのふちを読み取り、ラインのふちにロボットが沿うように軌道修正しながらロボットを移動させるプログラムを組んでいく。


【写真6】ライントレース用の原理を説明する、東京都立産業高等専門学校ものづくり工学科の黒木啓之氏 【図1】赤外線センサを1つ利用してラインをトレースする場合の動作原理。右ラインのふちを検出しながら右と左に姿勢を制御する仕組み。センサが1つの場合は、いったんラインから外れてしまうと、位置をコントロールできなくなる欠点があるが、基本原理を理解しやすい

 たとえば、【図1】のようにラインの右側(1の位置)にロボットを置いた場合を考える。この場合、まず赤外線センサは床の白い部分を見ている。そこでロボットを黒いラインのふちに近づけるために、左方向に軌道修正をする。つまりモータM1(左側)をストップさせ、モータM2(右側)を駆動させれば、反時計方向(CCW)側にロボットの方向が向く。そしてロボットの位置が黒いラインのふちにかかったら(赤外線センサが黒のラインを検出した段階で)、今度は右方向にロボットの向きを変えるようにする。モータM1を駆動させ、モータM2をストップさせれば、時計方向(CW)側にロボットの方向が向く。


【図2】ライントレースのフローチャート。赤外線センサの閾値を基準に、それよりも下の値ならライン上と見なし、ロボット本体を左に制御(モータM1のみ動かす)。一方、閾値より上の値ならラインから外れていると見なし、本体を右に制御(モータM2のみ動かす)
 センサは常に床の状態(白か黒か)を検出しており、マイコン側にその状態を伝えている。床が白か黒かの判断は、前述のセンサ感度の実験でわかった閾値を利用する。センサで検出される値が閾値よりも上であれば床が白であるとみなし、値が下であれば黒とみなすように条件によって処理を分岐させる。この処理を繰り返してループさせれば、ロボットは常にラインを沿って動作することになる。文章で説明した流れを【図2】にフローチャートとして示す。このフローチャートに従って、TiCollaでプログラミングしていく。

 分岐条件に利用する入力値は赤外線センサからの信号なので、アナログ入力条件分岐タイルを用いることになる。比較条件の閾値は、ここでは仮にセンサ感度(255段階)の半分となる128としておく。この閾値はロボットを動かす環境によってそれぞれ異なってくるため、実験結果を基に設定すべき値だ。さらに外乱に強いロボットにするためには、センサ感度の実験を細かくして閾値を絞り込んでいくことになる。TiCollaでプログラミングしたライントレース用のプログラムを【画面7】に示す。

 今回のセミナーでは、このようなプログラムができた段階で、【図3】のようなライントレース専門コースを用いて、タイムトライアルが実施された【動画1】。最速のロボットは11秒台でコースを走りきったが、ジグザグ走行ではなく、直線コースとカーブを判断して、モータの動作を変えるようなプログラムに書き換えるなど、さらに高速化するための工夫を凝らす生徒もいた。


【画面7】TiCollaでプログラミングしたライントレース用のプログラム。★図2のようなフローチャートに沿って、タイルを置いていけばよい 【図3】タイムトライアル用のライントレースコース。上下にグラデーションのかかったバーがプリントされているが、これはセンサの感度を検出する際や、センサ出力の計測用に利用できるので便利

【動画】TiCollaでタイルプログラミングをして、ライントレースのタイムトライアルを実施。暗所で実施したため見づらいがスムーズな動きを見せるロボット

いよいよC言語での本格的なプログラミングにチャレンジ!

 2日目の午後は、今回の到達目標となるC言語によるプログラミングの実習が始まった。前述したように、Robo Designer RDS-X03 Platform+CDEは、C言語でのプログラミング開発環境もサポートしている。

 C言語でプログラムをするためには、キットに同梱されているソフトウェア開発環境「TiColla CDE」のインストール(実習環境ではインストール済み)とコントロールボード上のマイコンを「JRT-101」から「JRT-102」へ差し替える必要がある【写真7】。

 ソケットからマイコンを外す際、うまく引き抜き作業をしないとマイコンの足を曲げてしまう恐れがある。【写真8】のような専用工具を利用して換装するとよい。


【写真7】ソフトウェア開発環境「TiColla CDE」を使用するための前準備。コントロールボード上のマイコンを「JRT101」から「JRT-102」へ換装しておく 【写真8】ICの引き抜きに便利な「IC EXTRACTOR」は電子工作のマストアイテムだ。ぜひ揃えておきたい工具のひとつ

【画面8】TiColla CDEの初期画面。作成されるファイルはすべてプロジェクトで管理されるので、まずプロジェクト名を入力していく
 コントロールボードに新しいマイコンを装着できたら、TiColla CDEを起動する。TiCollaと同様の手順で、「File」→「New」を選択すると「New Project/File Wizard」画面が表示されるので「Create C programming WorkingSpace」をクリックし、続いて任意のプロジェクト名を設定する。【画面8】にTiColla CDEの初期画面を示す。

 画面左のProject Explorerウインドウには、前述のハードウェア設計ファイル「HW」のほか、具体的な制御プログラムを記述する「main.c」、後述するハードウェア設定反映ファイル「Initialize.c」、main.cで利用する専用関数(LED、PWM、モータ、メモリ、通信などについての関数)が定義されたヘッダファイル「TiCollaLIB.h」が表示される。


【画面9】TiColla CDEのハードウェアコンフィギュレータ。ハードウェアを割り付けると、そのハードウェアの設定が「Initialize.c」に自動的に反映される仕組み
 まずCプログラミングの前にハードウェアのコンフィギュレーションを行なう。このあたりもタイルプログラミングのTiCollaと同じ手順だ。赤外線センサを接続しているため、パレット上の「IR Sensor」をCN3に配置しておく【画面9】。この設定によって、ソースプログラムのハードウェア設定反映ファイル(初期化ファイル)である「Initialize.c」中のinit()に、赤外線センサ入力の初期設定が自動的に反映されるようになる。

 前述のように、実際にプログラムを記述する部分はmain.cファイルである。ここからはmain.cの内容について簡単に紹介する。ロボットの前進・後退・回転プログラム【リスト1】は下記の通り。このプログラムは1秒前進して、1秒後退、次に2.5秒前進し、時計方向に回転し続けるようになっている。

【リスト1】C言語で作成したロボットの前進・後退プログラム
http://robot.watch.impress.co.jp/static/2006/08/25/list01.txt


 セミナーでは、タイルプログラムと対比する形で、C言語でモータを動作・停止させる方法について説明がなされた。最初に学習したTiCollaのプログラミングでは、ロボットの制御に必要な命令をひとかたまりにしてタイルで表現していた。これらの命令を分解してC言語として表現するわけだ。

 以下、【リスト1】に書かれている内容について簡単に説明する。もっとも肝となるmain関数では、まずinit();の呼び出しによって、ハードウェア設計ウインドウで設定した入出力ポートの内容が「Initialize.c」の初期設定内容に沿って反映される。

 次にモータ速度の設定を行なう。モータ速度の関数MOTOR_SPD()を呼び出す(関数のプロトタイプ宣言やマクロの定義は「TiCollaLib.h」ファイルにすべて記述されている)。

【モータ速度の設定】

MOTOR_SPD(PWM_SIDE_CN11, MOTOR_STEP_MID1);	// スピード設定

 ここで、関数の第1引数であるPWM_SIDE_CN11は、速度制御信号の出力先ポートを表す数値のマクロだ。デフォルトではCN11に速度制御用のPWM(Pulse Width Modulation)出力が割り付けられている。PWMを簡単に説明すると、モータを駆動するための電圧を高速でオン/オフして、モータに加えられる平均電圧を調整することでモータ速度を制御する方式のことだ。第2引数:MOTOR_STEP_MID1は、速さの段階をあらわすマクロになっている。速度は5段階(MAX、MID2、MID1、MIN、ZERO)に定義されている。したがってMID1は中速にあたる。

 次にモータ動作の設定を行なう。TiCollaでは、モータを動作させるmotタイルはループタイルにはさまれていた。C言語ではループ処理はWhile文などを利用する。While(条件式){処理(ここではモータの動作)}で条件式を1とすると、強制的に終わらせない限り、{}内の処理を繰り返す。また、TiColla CDEでは、While文を使う場合にCOPCTL=0;を記述することになっている(レジスタの値をクリアして暴走を防ぐための“おまじない”のようなものと考えればよい)。モータ動作の設定は以下のとおりだ。

【モータ動作の設定】

 モータを駆動させるポートを指定する変数へ数値を代入する。ここでM1_IN1はCN7、M1_IN2はCN8、M2_IN1はCN9、M2_IN2はCN10として、「TiCollaLib.h」ファイルで定義されている。変数の1は信号を出力する、0は信号を出力しないを表現するので、たとえばロボットを前進させる場合(両モータ駆動)や、回転させる場合には以下のように記述する。

・前進(両モータ駆動)
M1_IN1=1;	//FWD
M1_IN2=0;	//BWD
M2_IN1=1;	//FWD
M2_IN2=0;	//BWD

・後退(両モータ駆動)
M1_IN1=0;	//FWD
M1_IN2=1;	//BWD
M2_IN1=0;	//FWD
M2_IN2=1;	//BWD

・時計周り(CW)に回転(その位置で回転)
M1_IN1=1;	//FWD
M1_IN2=0;	//BWD
M2_IN1=0;	//FWD
M2_IN2=0;	//BWD

 なお、この部分は繰り返して利用されることが多いので、自作関数にすると便利だ。たとえば以下のように定義しておいて、必要とされる部分にForward()関数を記述すればよい。

void Forward(void);	//プロトタイプ宣言
void Forward(void){	//前進
	M1_IN1=1;	//FWD
	M1_IN2=0;	//BWD
	M2_IN1=1;	//FWD
	M2_IN2=0;	//BWD
		DELAY_SEC(250);
}

【動作時間の制御】

 時間を制御する関数としてDELAY_SEC()を利用する(これもTiCollaLib.hファイルで宣言、定義されている)。これはTiCollaではWaitタイルにあたるものだ。引数はbyte型で、設定値1=10msとなっている。したがって設定時間の最大は0.01×255=2.55秒となる。もし5秒間設定したい場合には、(While文やfor文を利用して)DELAY_SEC(250)を2回繰り返すようにすればよい。


ちょっと難しい!? C言語でライントレース用プログラムを記述

 3日目は【リスト2】のようなライントレース用プログラムをC言語で記述する実習が行なわれた。ここではポイントだけ説明する。前述のとおり、TiCollaで赤外線センサの値を入力するには、アナログ入力の条件分岐タイルを利用した。これをC言語で表現する場合は以下のように記述する。


【リスト2】C言語で作成したライントレース用プログラム
http://robot.watch.impress.co.jp/static/2006/08/25/list02.txt

【アナログ赤外線センサを使用する場合】

AD_GETDATA(AD_CN3,&ir);

 この関数は、あるポートをアナログインプットにするとき、呼び出されるもの。第1引数はbyte型の入力ポートを表すマクロを指定する。今回の場合、赤外線センサはCN3に割付けられているのでAD_CN3となる。第2引数はデータ受け取り用のポインタ変数となる。

【条件判定をする】

 条件判定にはif文を使う。ここではセンサからの入力値が閾値に120以上の場合は処理1へ、それ以外の場合には処理2へ進むようにように記述する。

if(ir>=120){
	処理1(モータ駆動CWまたはCCW)
}else{
	処理2(モータ駆動CCWまたはCW)
}

 すべての記述が終わったら、歯車マークのアイコンをクリックする。ソースファイルのコンパイルが始まり【画面10】、マイコンが理解できる機械語に変換される。コンパイルが終わったら、次にチップのマークのアイコンを押す。そこで実行スイッチ3を押すとRS-232C経由でコントロールボードへマシンコードが転送される。転送時のスイッチの切り替え、ロボットの動作スイッチなど一連の手順は、前述のTiCollaの場合と同じだ。


【画面10】ソースファイルのコンパイル。コンパイルが無事に終わると画面上の歯車のアイコンに「Compile Complete」のふきだしが出る。また、画面下のコンソールにも同様のメッセージが表示される 【画面11】チップのマークのアイコンをクリックすると、RS-232C経由でコントロールボードへコードが転送される

 今回はC言語に初めて触れる生徒が大多数ということもあり、インクルードするヘッダファイルの中身など、細かい部分の説明は省かれた。しかし、C言語を利用する上で必須となる「変数」、「引数」、「戻り値」や「制御文」、「自作関数」のつくりかたなどは解説された。さすがにポインタまでは説明されることはなかったが、この段階でも関数をしっかりとマスターできた生徒もいたようだった。

 「C言語でプログラムを組んだほうが、ロボットのスピードが断然速い。もうタイルプログラミングには戻れない」という、頼もしい感想を語る生徒もおり、3日間という限られた時間において、当初の目標に十分に達することができたのではないかと感じた。


本格的なコースを使ってレスキューロボットの試合も!

【写真9】レスキューチャレンジのコース。ラインをトレースしながらゴールまでたどり着き、ゴール手前の被災者(人型の銀シール)を見つけてストップできれば合格。直角に近いコースも途中にあり、けっこう難易度が高い
 本セミナーでは優秀な生徒が多かったためか!? カリキュラムが予定よりも早く進んだようだ。そのため3日目には急遽、ロボカップジュニアの競技を模して、レスキューチャレンジの試合が開かれた【写真9】

 競技ルールは、ライントレースで早くゴールに到着すること、ゴールの手前にいる被災者(人型の銀シール)を見つけたら、2秒間その場所でストップするというもの。銀シール部分は光の反射が特に強くなるため、センサからの値が一定以上になったら、その部分が銀マークの部分だと判断し、ストップするようなアルゴリズムを考えてプログラムを組めばよい。

 センサや競技環境によって異なるため、閾値は試行錯誤して見つける必要があるが、今回の環境で被災者の救済をするための閾値は200前後が最適だったようだ。

 試合結果は、1回目のトライアルで3人が被災者救出に成功、最高タイムは1分13秒だった。また2回目のトライアルでは被災者救出の成功は5人に増え、最高タイムは1分17秒となった。被災者の救出こそ難しかったものの、コースを完走できた生徒は多かった。


【写真10】日本を背負ってたつ未来のロボット技術者&プログラマー全員集合! 3日間の集中講義、お疲れ様でした
 最終日には、記念撮影【写真10】と宿題の発表があった。今回のセミナーは、実習終了後も継続的な自主学習を生徒たちにしてもらうことで、学習効果を定着させ、より理解を深めてもらうという目的もある。

 自宅環境でセンサ感度を調べること(閾値の調査)が1カ月後の課題に、また未使用のタッチセンサと残りの赤外線センサを追加して、ライントレースロボットをつくることが2カ月後の課題となった。さらに3カ月後には、自分で考えたオリジナルロボットをつくり出してもらい、そのロボットをインターネットで公開する計画だという。3カ月には、生徒たちの自由な発想が一体どのような形でオリジナルロボットとして具現化されるのか、今からとても楽しみだ。


安易に正解を教えないで自分たちの力で解答を引き出す

 最後に、今回のイベントを主催したJAPAN ROBOTECHの河野孝治氏と、講師を務めた東京都立産業高等専門学校ものづくり工学科の黒木啓之氏に話をうかがった。

------昨年に引き続き、経済産業省のITCraftmanshipの採択事業として「高度ソフトウェアプログラミング教室」が開催されましたが、昨年と今年の違いは何ですか?


JAPAN ROBOTECHの河野孝治氏。同社代表取締役社長を務める。古くから教育教材の開発を進めている業界の重鎮
【河野氏】ロボットのハードウェアは同じ教材を用いていますが、ソフトウェアについては異なるバージョンを使用しています。また、昨年の経験を生かして、子供たちがより理解しやすいように、教本そのものも刷新しています。

------ロボット教育をする上で、何か工夫されている点はありますか?

【河野氏】生徒たちの学習意欲やモチベーションが高いレベルで維持できるかどうかによって、学習の吸収度が大きく変わってくると思いますので、難しいことよりもポイントになる点を何回も反芻して、面白い実験を重ねながら教えるように心がけています。

 さらに今年の教室では、まずタイルプログラムを使用してロボット動作の理解を深めてから、それがC言語ではどのように対応し表現されるのか、タイルごとにC言語と対比する形で学習できるような工夫を施しました。


講師を務めた黒木啓之氏。「人に教えられるのではなく、自ら考えて学ぶことが重要」と説く
【黒木氏】たとえば1+1=2のようなプログラムを教えても、生徒たちのモチベーションが続きません。そのため、私の場合はロボットを題材に情報処理教育を進めていきたいというスタンスが出発点となっています。プログラムをつくる際に必要な「論理的な思考」を生徒に学んでもらえるように考えています。

 ロボットを動作させるためにセンサを使えば、プログラム中でif文を使わなければならない。動作を持続させるためには、While文などの制御文を用いる必要があるわけです。プログラミングする上でわかりずらい考え方が、ロボット教育では端的に教えられるのです。ライントレースの実習でも、自分自身で記述したプログラムが、目に見える形で確認できることは、生徒たちにとっても大変インパクトがあり、すごく大きく跳ね返ってくるのです。

 それからもうひとつ工夫している点は「すぐに答えを教えない」という姿勢です。まず生徒たち自身でじっくりと考えてもらう。問題解決型の教育ができるように、例題を出して解答してもらう。そして、それをさらに発展させて、関連した応用課題をこなすことで理解を深めるという形です。その時点で、もし応用課題ができなければ、基礎が十分にできていないということですから、フィードバックして基礎にたち返る必要があります。

 一度課題ができてしまうと、それだけで何だか「できた気分」になってしまう傾向がありますが、必ずできたことに対する応用問題を課して反復学習をすることで、本当に理解が進んでいるか確かめるようにしています。


------今回使用されたロボットのほかに、新しい教材を発売する予定はありますか?

【河野氏】Robo Designerは、昨年からソフトウェア面でC言語をサポートできるようになりましたので、今後はハードウェア面での拡張にも力を入れていきたいと思っています。たとえば、起動部のアクチュエータを変更できるようにするなど、違う分野のメカとしても応用できる形にしていきたいと考えています。今後もユーザーの要望に応じて、ハードやソフト両面について、さまざまな製品を発売していく方針です。

------最後に今後のイベントなどで予定がありましたら教えてください。

【河野氏】川越市の東洋大学工学部機能ロボティクス学科では、1年次のプロジェクトとして昨年からRobo Designerを授業に使用いただいていますが、高校生向けのロボット啓蒙活動も盛んに実施されており、今年度は「東洋大学秋季ロボット教室2006」と銘打ち、9月23日と10月9日のオープンキャンパスに合わせて講習会が催されます。11月の大学学園祭の時に、公開コンテストを実施する予定です。

【黒木氏】10月の終わりに学校で高専祭(学園祭)が催されるのですが、そこでロボカップジュニアのサッカーとレスキュー練習競技会を行ないます。また11月、12月には小・中学生を対象にした「ロボットパーティ」も開催します。一方、大人向けには9月中旬からフリーター支援事業として、今回の教室で題材となった「Robo Designer」を利用して、組み込み技術を学べる講座を開講します。8月末まで募集していますので、ぜひ参加していただければと思います。


URL
  JAPAN ROBOTECH
  http://www.japan-robotech.com/
  経済産業省
  http://www.meti.go.jp/
  ITクラフトマンシッププロジェクト事業
  http://www.meti.go.jp/press/20060703002/20060703
  東京都立工業高等専門学校
  http://www.tokyo-tmct.ac.jp/

関連記事
JAPAN ROBOTECH、「2006高度ソフトウェアプログラミング教室」レポート
【本体組み立て編】(2006/08/23)



2006/08/25 23:33

- ページの先頭へ-

Robot Watch ホームページ
Copyright (c) 2006 Impress Watch Corporation, an Impress Group company. All rights reserved.