４７

プログラミング学習のためのロボット制御システムの開発
益崎

真治*・猪股俊光**

A Development of Robots Control Systems
for Programming Learning
Shinji Masuzaki* and Toshimitsu Inomata**

１ はじめに
平成１５年度より高等学校において「情報」という新教科がスタートする［１］。教科「情報」の中には「情報 A」，「情報 B」，「情報 C」の３科目があるが，その中の「情報 B」ではコンピュータの仕組みやコンピュータを活用した問題解決について学ぶことになっている。特定のプログラミング言語（以下，言語とかく）を用いてプログラム作りを行うところまでは想定されていないようであるが，科目の授業をつうじて，自らプログラムを作ってみたいと思いはじめる生徒は少なくないはずである。そのとき，初心者がくじけることなく続けられるようなプログラミング学習ツールや学習法が必要となる。本研究の目的は，そのための１つの学習ツールを開発することである。
筆者らは，主に大学・高専生を対象としたプログラミング学習のための処理系［１０，１１］の開発と，それを WWW（World Wide Web）環境で利用したプログラミングの授業［７，８］の研究を行ってきている。そのための言語としては，リスト処理言語の１つである Scheme［１２，１３］が適当であることを確認した。しかし，大学・高専生といった，自分の進む進路（専門分野）を決めた学生に対しては，このような Scheme を用いて学習を行うことも可能であろうが，将来の進路がまだ定まらない高校生に対しては，学習の持続性という観点からはこのやり方が最適とは思われない。そこで，キーボードから文字や数字を入力しながらのプログラミングではなくて，実際に物が動く姿を見たり，物の動きを直接的に指示したり，動くものを触ったりしながらプログラミングが学べられるならば，興味もわくであろうし，プログラミングの楽しさを実感でき，持続できるだろうと考え，タートルグラフィック
スとロボットを取り入れることとした。
タートルグラフィックスとロボットを組み合わせるアイディアは，MIT の S. Papert 氏によるものである［２］。
タートルグラフィックスは S. Papert が Logo というプ
＊電子機械工学科＊＊岩手県立大学ソフトウェア情報学部

ログラミング言語の中で取り入れたグラフィックス描画法であり，コンピュータの画面上をタートル（亀）が命令にしたがって歩きまわるときの軌跡が図形となる。さらに，S. Papert は，画面上のみならず，床の上でも動きまわれるようなタートルロボットも実現している。本研
究では，この S. Papert のアイデアをヒントとし，プログラミング学習のためのロボット制御システムを筆者らが作成している言語処理系上で実現した。
以下，２節ではタートルグラフィックスとロボットの関係について論じ，３節では対象とするロボットについて述べる。また，４節では開発してきた言語処理系について述べる。そして，５節で新しく開発したロボット制御システムについて，６節ではそれの適用例を述べる。
最後に，７節でまとめを行う。
２ プログラミング学習とロボット
１節でふれたように，S. Papert はタートルグラフィッ
クを用いながら子どもたちにプログラミングを教える試みを続けており，彼は，「プログラムすることは，コンピュータと人間であるユーザーとの両方が理解できる言葉で交流し合うことである」と述べている［２］。両方が理解できる言葉とはプログラミング言語のことであり，それには両者が正確に交流をはかるための考慮がされているべきである。そのような候補の１つが Logo という言語である。コンピュータと子どもはともに Logo を話しながら交流するが，子どもはコンピュータと直接話をするのではなく，画面上に現れているタートルと対話することになる。タートルに「前へ１０歩進め」，「右を向け」などと伝えると，タートルはそのとおりに画面上を動き出す。
そのとき歩いた軌跡が図形になり，それを利用して図形を描写することをタートルグラフィックスと呼んでいる。
タートルグラフィックスを利用した場合，プログラムをすることは，タートルにどう動いたらよいのかということを教えることになり， 限られた言葉を使って正確に
平成１３年９月２８日受理４８弓削商船高等専門学校 紀要 第２４号（平成１４年）

動き方を教える にはどうしたらよいのかということを子どもは考えることになる。 限られた言葉を使って正確に動き方を教える ということが，まさにプログラム作り（プログラミング）である。タートルグラフィックスであれば，間違った動きを教えるとそれが直ちに画面に反映されるため，自分の間違いにすぐ気がつき，そのことを通じて，正しく教えるにはどうしたらよいのかということを自分で考え，解決策をみつけることができるようになる。
さらに，画面上のタートルだけとの交流にとどまらず，床や机の上を実際に動きまわるタートルとの交流もはかれれば，より効果が増すと考えられる。つまり，画面上のタートルに教えた内容（プログラム）を，タートルと同じ言葉を理解するロボットにも教えることができれば，そのロボットもまた同じように動くことができる。そのとき，子どもはロボットが動く様子を観察したり，モーターの音を聞くことで，コンピュータの世界（理論的・理想的な世界）と現実の世界との違いを知るきっかけにもなるであろう。
このような考えにもとづきながら，図１に示すようなことが実現されるロボット制御システムを開発することにした。まず，画面上でタートルと会話しながら，動き方を教える。その内容をプログラムとして保存し，それをロボットが理解できる言葉に翻訳したのち，ロボットへ転送する。その後，ロボットは画面上のタートルと同じような動きをする。これは，見方をかえれば，ロボットの動きのシュミレーションをコンピュータ上で行っているともいえる。

周辺装置もまたブロックとして本体に取付けることができる。ロボットプログラム作成用のアプリケーションを使って作成したプログラムを RCX へ転送（赤外線による）したのち，スタートスイッチを押すとロボットは単独で動作する。RCX のハードウェア仕様を表１に示す［５］。
表１ RCX のハードウェア仕様（［５］より）
項CPUメモリインタフェース

電 源

３．１ ロボットの仕様対象とするロボットは LEGO 社が製造したロボットシス テ ム LEGO MINDSTORMS Robotics Invention System１であり，RCX（Robotics Command System）とよばれるロボット本体（CPU とメモリが内蔵されている）とロボットプログラム作成用のアプリケーションからなる［３，４］。RCX の形状はレゴブロックに対応してできており，モーターや光センサー，タッチセンサーといった各仕様

８bit マイクロプロセッサ
H８／３２９２（１６MHz）
ROM１６KB，RAM３２KB
入力ポート×３
出力ポート×３
赤外線通信ポート×１
LCD ディスプレイ×１
単３形乾電池６本

入力ポートには，光センサー（赤色 LED の反射光をフォトトランジスタによって０〜１００の段階に分けて検出する）とタッチセンサー（導電ゴムのスイッチのオンオフの検出）を接続できる。一方，出力ポートには，モーター（PWM 制御で制御階調数は０〜８）を接続することができる。これらの周辺装置を組み合わせることにより，自立走行が可能なロボットを作ることができる。図２にこれら周辺装置やレゴブロックを組み合わせてできたロボットの例を示す。

図１ タートルグラフィックスとロボット

３ 対象とするロボット

目

図２ ロボットの作成例

ロボットプログラムは，入出力ポートに接続された各周辺装置の動作を特定するコマンドの集まりであり，このプログラムにしたがってロボットは動作する。今回は，このロボットプログラムの作成を，Mindstorms 対応のオープンソースな OS の１つである。legOS［６，９］を用いて行うこととした。なぜならば，製品版アプリケーション
では限られた範囲のプログラムしか作成できない，特定１LEGO MINDSTORMS は LEGO グループの登録商標である。その他，本文中の会社名，商品名，製品名は，一般に各社の商標もしくは登録商標である。

プログラミング学習のためのロボット制御システムの開発（益崎・猪股）の OS（Windows）のもとでしか使用できない，他のソフトウェアとのデータの受け渡しが困難である，などの理由からであるとくに教育目的のためのソフトウェアが，特定の OS のもとでしか動かなかったり，ソースコードが公開されていないことは，利用に際して大きな障害となる。
３．２ legOS
legOS は，Markus L. Noga 氏 に よ っ て 開 発 さ れ た
Mindstorms 用のオペレーティングシステム（ファームウェア）である。ソースプログラムが公開されているた
め２，OS の勉強になるとともに，独自の機能の追加も可能である。また，クロスコンパイラを用意することにより，Linux，Solaris，Windows といった OS 上で利用可能である。このように，教育目的として適しているため
legOS を用いることとした。legOS の特徴は，次のとおりである［６］。

４９ウェアに翻訳することにより，RCX 上で実行される。
legOS の開発環境は，H８０００シリーズ向のクロスコンパイラが利用できるものであればよい。そこで，今回は，Linux および Solaris の開発環境を用いた。

図４ legOS 開発環境と RCX

図４のように，作成した legOS（ロボットプログラム＋カーネル）をクロスコンパイラを用いてコンパイルし，そのデータを IR タワー（赤外線信号通信装置）によって，RCX にダウンロードする。
４ 記号処理言語処理系

プリエンプティブ可能なマルチタスク機能
省電力機能
動的メモリ管理機能
POSIX（Portable Operating System Interface）準拠のセマフォ（プロセス間通信）対応

４．１ 言語処理系の概要
１９９３年より開発をはじめた記号処理言語処理系 SISTScheme［１０，１１］は，記 号 処 理 向 き の 言 語 の１つ で あ る
Scheme［１２，１３］のインタープリターである。当初は，記号処
理教育のための言語処理系として，つぎの要求や条件を満たすよう開発を行った［１０］。
a ）無償であること。

周辺装置（センサー，モーターなど）制御機能
legOS の構成は，図３の左側のように，カーネル（タスク管理，メモリ管理，周辺装置インターフェースなど）とロボットプログラムからなる。すべてＣ言語で記述されており，ユーザーは目的にあったロボットプログラムだけを作成する。カーネルとロボットプログラムは API（Application Program Interface）によって結ばれている。すなわち，ロボットプログラム中では，さまざまなAPI が呼び出されている。
このようにＣ言語で記述された legOS は，図３の中央のクロスコンパイラを用いて，H８／３２９２用のファーム

図３ legOS の構成
２

配布条件は MPL（Mozilla Public License）による。

b ）ワークステーションやパソコンの区別なく稼動できること。
c ）ソースコードが公開されていること。
d ）OS に固有のライブラリやアセンブラは用いない。
e ）必要最小限の言語仕様を満たすものとする。
f ）日本語が扱えること。
開発した処理系（SIST-Scheme Vor．
１．
０）は，整数以外のデータ型，遅延評価といった Scheme の言語仕様［１２］が 実 装 さ れ て い な い も の の，Windows，MacOS，Solaris，Linux といった OS のもとで動作可能である。
この処理系のもとで，数式処理，自然言語によるコンピ
ュータとの対話，日本語文章の校正，演繹的推論などといった記号処理の分野のさまざまなテーマに関するプログラムが講義や卒業研究をつうじて作成された［１０，１３］。
さらに，１９９５年以降には，つぎの機能を追加した SISTScheme Vor．
２．
０を作成した。この追加機能を用いて弓削丸の計測制御システムを実現した［１１］。

５０弓削商船高等専門学校 紀要 第２４号（平成１４年）

g ）TCP/IP によるネットワーク通信機能
４．２ タートルグラフィックス機能
今回，タートルグラフィックスによるプログラミング学習を目指し，つぎの機能の追加を試みた。
h ）タートルグラフィックスによる描画機能i ）RCX へのファームウェア（legOS）転送機能

こ の 手 順 に square と い う 名 前 を 付 け る た め に は，Scheme の場合はつぎのようにする。この手続きを用いた描画例を図７に示す。
（define（square）（forward１００）（right９０）（forward１００）（right９０）（forward１００）（right９０）（forward１００）（right９０））

タートルグラフィックス用の画面として，図５のようなウィンドウを設計した。

図７ 一辺が１００ドットの四角形の描画

タートルグラフィックスによる描画例を図８に示す。

図５ ウィンドウの初期画面

画面中央に位置するのがタートルであり，大きさ６４０×４００ドットの範囲を移動する。右に並んでいるマス目は上から順に，ペンの太さ，頭の向き，ペン色・背景色，ペンの状態，移動速度，現在の座標位置を表す。
座標は，図６（a）のように左上を原点とし，x 軸は右方向へ，y 軸は下方向へ伸ている。中央の座標（３２０，２００）
は，タートルの初期状態での位置である。タートルは，
図６（b），（c）のように前進（forward），後進（back）左右方向回転（left，right）という動きができる。

図８ タートルグラフィックスによる描画例

表２にタートルグラフィックス用の主な手続きの一覧を示す。

表２ タートルグラフィックス用の手続き
手 続 き

図６ タートルの座標と移動

たとえば，一辺が１００ドットの正方形を描くには，タートルに対して「１００ドット前進し（forward１００），９０度向を変える（right９０）」という指示を４回繰り返せばよい。

（jump x y）
（home）（init）（penup）（pendown）（fast）（slow）（left r）
（right r）（north）（forward d ）（back d ）動作

座標（x，y）へ移動
座標（３２０，２００）へ移動
画面を初期状態に戻す
描画可能状態にする
描画不可能状態にする
移動速度を速くする
移動速度を遅くする
左回りに r 度向きをかえる
右回りに r 度向きをかえる
０度（真上）を向く
d ドット分、前方へ移動
d ドット分、後方へ移動

プログラミング学習のためのロボット制御システムの開発（益崎・猪股）

５ ロボット制御システム
５．１ 構成要素
図９にロボット制御システムの構成を示す。同図中（a）と（b）が，今回新たに SIST-Scheme に追加した部分であり，（c）と（d）は既存のプログラム（（d）はlegOS に含まれているコマンド）である。

Scheme の手続き
（forward１００）（right９０）（penup）（repeat ８ square）

５１

対応する C 言語の文
forward（１００）；
right（９０）；penup（ ）；｛ int loop；
for（loop＝１；loop＜＝８＋＋loop）｛square（ ）；｝｝

なお，ロボットプログラムに変換できるタートルグラ
フ ィ ッ ク ス 用 の 手 続 き は，表２中 の forward，back，right，left，penup，pendown，north に限られており，センサー（光，タッチセンサー）に対応した手続きはまだ実現されていない。
図９ ロボット制御システムの構成

ユーザーは（a）グラフィックス用の手続き群を用いてロボットの動作を特定する Scheme のプログラムを作成する。つぎに，（b）のロボット転送用手続きを実行すると，まず，その Scheme プログラムをもとに，C 言語によるロボットプログラムが生成される。そして，（c）のクロスコンパイラによってファームウェアが生成され，最後に（d）によって RCX へファームウェアが転送される。
５．２ 実 現 法
SIST-Scheme のもとで作成された手続き proc からロボットプログラム（ファイル名 file）を生成するための手続きはつぎの lego である。

６ 開発したシステムの適用例開発したシステムを，高校生を対象とした１９９９年度〜
２００１年度の岩手県立大学ソフトウェア情報学部のオープンスクールにおいて教材として使用した。そこでは，ワークステーションの基本的な操作から始めて，タートル
グラフィックスによる描画の仕方，ロボットへのプログ
ラムの転送といった一連の作業を練習課題を盛り込みながら行った。そこでの練習課題の内容は，次のとおりである。
四角形（一辺が２０ドット）の描画
自分のイニシャル１文字の描画
四角形描写手続きのロボットへの転送（lego proc file）
イニシャル描画手続きのロボットへの転送
たとえば，図７のような動きをロボットにさせたい場
合を考える。生成するロボットプログラムの名前を test．
c にする場合には，つぎのようにする。
（lego square ”test.c”）
このとき，Scheme の手続きからロボットプログラムへの変換は次のようにして行われる。Scheme の１つの手続きを１つの C 言語の関数に対応させる。手続き中で呼び出されている各タートルグラフィックス用の手続きは，該当する API に対応させる。また，逐次処理や繰り返し処理は，それぞれ該当する C 言語の制御構文に対応させる。たとえば，つぎのように対応させる。

四角形の描画手続き square をロボットへ転送する際に，生成されたロボットプログラムは次の通りである。
ここで，mindstorms-０２x.h は２００行ほどのヘッダファイ
ルであり，そこでは各種の宣言・定義がなされている。
#include ”mindstorms-０２x.h”
static intsquare（void）｛
forward（２０）；right（９０）；forward（２０）；right（９０）；５２弓削商船高等専門学校 紀要 第２４号（平成１４年）

forward（２０）；right（９０）；forward（２０）；right（９０）；return １；｝
int main（void）｛square（ ）；return ０；｝
このロボットプログラムを含む legOS から生成されたファームウェアをペンを付けた図２のロボットへ転送し，紙の上に四角を描かせた。
オープンスクールに参加した高校生の感想は，たのしかったというものが多く，タートルグラフィックスとロボットの組み合せは，プログラミング学習に対して効果があると思われる。
７ おわりにタートルグラフィックスとロボット制御を組み合わせたプログラミング学習を実現するために，SIST-Scheme
へ，タートルグラフィックスによる描画機能と RCX へのファームウェア（legOS）転送機能の追加を試みた。それと既存のクロスコンパイラなどからなるロボット制御システムを作り，高校生を対象としたオープンスクールの教材として使用し，所期の動作が得られることを確認した。
これからの課題としてつぎのものがあげられる。
光センサーやタッチセンサーに対応した手続きをSIST-Scheme に組み込むこと。
タートルグラフィックスとロボット制御を組み合わせたプログラミング学習の効果を定量的に評価すること。
謝辞

岩手県立大学ソフトウェア情報学部のオープンスクー
ルでの開発したシステムの適用に際しては，同学部曽我研究室の曽我教授をはじめ，新井助手，研究室所属の学生の方々に協力していただいた。ここに記して謝意を表す。
参考文献［１］文部省， 高等学校学習指導要領解説 情報編 ，開隆堂出版，２０００．
［２］Seymour Papert， 新装版 マインドストーム ，
未来社，１９９５，（“MINDSTORMS”，Basic Books，Inv，１９８０）．
［３］The LEGO Groupe, “LEGO MINDSTORMS Robotics Invention System １．
５ USER GUIDE”，
１９９９．
［４］http : //mindstorms. lego. com/
［５］古川剛（編），“LEGO MINDSTORMS パーフェク
トガイド 翔泳社，１９９９．
［６］Markus L. Noga, http : //www. noga. de/ legOS/［７］猪股俊光， 学内 LAN の教育利用に関する考察
静岡理工科大学紀要，Vol−６，pp．１９−３３，１９９７．
［８］益崎真治，猪股俊光， WWW 環境を用いたプログ
ラミング教育に関する考察 弓削商船高等専門学
校紀要，Vol−２１，pp．
２５−３０，１９９９．
［９］衛藤仁郎，http : //www. ylw. mmtr.or.jp/ arcadia/legos/ index. html，１９９９［１０］猪股俊光， 記号処理教育用言語処理系の開発と応用 静 岡 理 工 科 大 学 紀 要，Vol−４，pp．
２５−
４２，１９９５．
［１１］益 崎 真 治，猪 股 俊 光． 記 号 処 理 教 育 用 言 語
Scheme の開発と弓削丸への応用 弓削商船高等専門学校紀要，Vol−２０，pp．８３−８８，１９９８．
［１２］Richard Kelsey, William Clinger, and Jonathan
Rees (Editors), “Revised５ Report on the Algorithmic Language Scheme”,http : //www. cs. indiana. edu/ schemerepository/ doc. standards.
html［１３］猪股俊光，益崎真治， Scheme による記号処理入
門 森北出版，１９９４．