Comments
Description
Transcript
2足歩行ロボット KHR-1 を使用した制御系 プログラミング
2足歩行ロボット KHR-1 を使用した制御系 プログラミング 2006 年1月 31 日 阪南大学 経営情報学部 経営情報学科 5102005 麻山勇樹 5101242 山田慎治 1 目次 1、はじめに・・・・・・・・・・・・・・・・・・・・・・・・・p3 2、関連研究(山田)・・・・・・・・・・・・・・・・・・・・・・p3 3、KHR-1 を用いた制御系プログラミングの学習・・・・・・・・・p7 3、1 KHR-1・・・・・・・・・・・・・・・・・・・・・・・・・p7 3、2 HeartToHeart を使用してのモーション作成(山田)・・・・・p7 3、3 RS232C・・・・・・・・・・・・・・・・・・・・・・・・p8 3、4 Java・・・・・・・・・・・・・・・・・・・・・・・・・p9 3、5 Java での RS232C 制御・・・・・・・・・・・・・・・・・p9 3、6 Java での制御系プログラミング・・・・・・・・・・・・・p10 4、KHR-1 の動画・・・・・・・・・・・・・・・・・・・・・・・p13 5、考察・・・・・・・・・・・・・・・・・・・・・・・・・・・p13 5、1 HeartToHeart でのモーション作成の考察(山田)・・・・・・p13 5、2 制御プログラムの考察・・・・・・・・・・・・・・・・・・p15 6、まとめ・・・・・・・・・・・・・・・・・・・・・・・・・・・p15 参考文献・・・・・・・・・・・・・・・・・・・・・・・・・・・・p15 謝辞・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・p17 2 1. はじめに 現在、家電製品・携帯電話・自動車・ゲームなどのあらゆる製品にコンピュータが組み 込まれ、そのほとんどが海外に委託せず日本国内で開発されている。 (図1参照)そのため、 企業に就職すると制御系のシステムやプログラムを組む機会が多くなる。しかし、現在の 大学では授業中に制御系のシステムやプログラムを組む機会がほとんどなく、企業は大学 での教育の強化を望んでいる。(図2参照)そこで、実際に2足歩行ロボットの KHR-1(図 3参照)とプログラム言語である Java を使用し、KHR-1 をダンスさせる制御系プログラミ ングの学習をおこない、制御系プログラミングの特徴を学習する。 2章では関連研究を紹介する。3章では提案する KHR-1 と Java を用いた制御系プログラ ミングの学習を詳しく述べる。4章では動作している KHR-1 の動画を提示し、5章では考 察、6章ではまとめを述べる。 2. 関連研究 日本では、現代に至る以前よりも、ロボットの原型と言うべき物の開発が行われていた。 江戸時代中期における「からくり人形」これは発条や、歯車によって駆動し、見て楽しむ という娯楽のために作られた。そして 1928 年、西村真琴が考案した「学天測」がある。こ ちらはモーターの駆動によって、手や頭の可動、そして表情を付けるという物であった。 現在、様々な大学や企業において、開発の進められている人型ロボットであるが、日本に おける人型ロボット開発の歴史について、1つの企業を例にとって説明する。それは、本 田技研工業株式会社(以下ホンダ)である。 ホンダがこれまでロボット開発を行ってきたのは、人の役に立ち、人のパートナーとな ることを目指しているからである。元々ホンダは2輪、4輪、汎用製品の開発、研究、販 売を行ってきた企業である。そして新しい挑戦として、2足歩行人間型ロボットの開発を 行ってきたのである。研究はまず人間社会で使用可能なロボットのあるべき姿を模索する ことに始まった。その結果、ロボットの機能としては屋内で、物の間を行き来することや 階段の昇り降りなどの動作が必要であり、それには人間と同様な2足歩行が適していると 考えられた。また2足歩行技術を確立することで、荒地などを含めた地上環境の殆どは移 動可能になると考えられた。こうして、当時は困難であると言われた自律2足歩行ロボッ トの開発が、始められたのである。 ホンダにおいて、人型ロボット開発は、1986 年に「E0」の開発より始まった[10]。 (図4 参照)E0 はまず2足歩行の原理究明のために開発された。この時、初めて足を交互に出し て歩くことに成功。しかし1歩に約5秒かかり、形として、直線での「静歩行」 (図4参照) による移動であった。ここで研究目標として、あらゆる路面の状況、坂道や凹凸に対応す ること、そして「動歩行」(図4参照)を実現させることだったのである。 3 出所)経済産業省 商務情報政策局 情報政策ユニット 情報処理振興課『組込みソフトウェア産業実態 調査報告書』 図2組込みソフトウェア技術者の 教育で強化すべき部分 図1組み込みソフトウェア開発の 海外委託 図3 KHR-1 そして 1987 年から 1991 年、E1、E2、E3(図5参照)の開発が行われた[11]。この時は、 2足歩行の実現が求められた。動歩行を実現するために、徹底的に人間の歩行の観察研究 が行われ、2足歩行に必要な間接の配置や動きが研究された。人間歩行データを参考にし て動歩行プログラムを作成し、それをロボットに移植し、実験は行われた。結果、E2 にお いて、初めて時速 1.2km/h に成功したのである。そして次の研究課題として、人間の生活 環境、特に地面の段差やうねり、斜面などでも歩行可能であること、また安定した2足歩 行が求められたのである。 1991 年から 1993 年、E4、E5、E6(図6参照)の開発において、歩行安定技術である床反 力制御、目標 ZMP 制御、着地位置制御という3つの技術を確立させ、さらに E5 において、 階段、斜面などでも安定した2足歩行を実現させた。この期間において、ホンダは2足歩 行の基本機能の完成に至ったのである[12]。そして次の開発目標は、脚部と状態を組み合 わせた、人間型ロボットの開発を実現させることであった。 1993 年から 1997 年、ここにおいて初めて、これまでの足だけのロボットから、上半身も 持つ人間型のロボットの開発に着手された。まず P1(図7参照)、これは人間型ロボットモ デルの第1号機である。全高 1.915mm、重量 175kg、電源、コンピュータは外部に設けられ ている。スイッチのオン、オフ、扉の取っ手をつかむ、物を掴んで運搬するなどの動作が 4 図4 図6 E0、及び歩行パターン 「静歩行」「動歩行」 図5 図7 床反力制御、目標 ZMP 制御、 人間の歩行を観察し、 開発されたロボット 初の人間型ロボット 着地位置制御の技術を取り入れた2足歩行ロボット 実現され、腕と脚の協調した動きの研究が行われたのである。 P2(図7参照)、これは 1996 年 12 月に発表された世界初の人間型自律2足歩行ロボットで ある。全高 1.820mm、重量 210kg であった。それまでホンダにおいて、有線式であった人間 型ロボットであったが、ここで無線式の開発に着手された。胴体部にコンピュータ、モー タドライブ、バッテリー、無線機器等、必要な機器を全て内蔵し、自在な歩行、階段の昇 降、台車を押すなどの動作がワイヤレス、かつ、自動動作により実現されたのである。P3 (図7参照) 、1997 年9月に完成した完全自律人型2足歩行ロボット。全高 1.600mm、重量 130kg。部品の材質の見直しや、分散型の制御を取り入れて小型化、軽量化が行われた[13]。 2000 年、将来的に人間の生活空間で活動することを想定し、さらなる技術研究、開発が 行われた結果、自由自在な移動や作業を行う適切なサイズや重量、操作性が実現されデザ 5 図8 ASIMO 図9 SDR-3X インも追及された形として、ASIMO(図8参照)の完成に至る[14]。 以上がホンダのロボット開発の歴史であるが、現在ホンダだけではなく、SONY の SDR-3X (図9参照)川田工業の HRP-2(図 10 参照)など、様々な企業での開発が進んでいる。こ れらに共通するのは、人間と共に生活することを想定していることである。開発される際 の基本的コンセプトとして、人間の行動不可能な場所、深海や他惑星上での研究、採集活 動、災害現場での救助活動、さらには老人、病人介護、人間の技術進歩のため、そして人 命救助、また身近な問題を解決するためのサポートを行うために開発されているというこ とである。 また現在、人型ロボット以外にも、ロボットには癒しというものや、また空想世界の実 現という目標でも開発されている。ペットロボットとして SONY より AIBO シリーズ(図 11 参照)が開発されており、これは生物と同じく、学習して生長する機能を持った他、音に よって感情を表す機能なども備えている。普通のペットを飼うためにかかる餌代や世話を 必要としない形は、新時代のペットと言えるであろう。また空想世界に存在する巨大な人 型ロボットを実現させようと開発に取り組んでいる企業もある。榊原工業の LandWalker(図 12 参照)は、空想世界に存在しているロボットに現実で乗るために開発されており、デザ イン性を重視し、ゲーム用として開発されたロボットである。 このように現在ロボット開発は多目的、多機能と様々な形態を遂げている。このまま技 術が進歩すれば、空想に描かれた世界が、現実となるのもそう遠くはないだろう。 6 図 10 HRP-2 図 11 AIBO 図 12 LandWalker 3. KHR-1 を用いた制御系プログラミ ングの学習 3.1 KHR-1 KHR-1 はサーボモーター(KRS-784ICS) (図 13 参照)17 個とコントロールボード(RCB-1) (図 14 参照)2枚をリンクさせて動作する2足歩行ロボットである。なお、KHR-1 にはモ ーション作成ソフトウェアである HeartToHeart が付属している。PC(Personal Computer) と RCB-1 の通信は RS232C(Recommended Standard 232 C)(図 15 参照)で行った。KHR-1 では 17 の自由度がある。自由度とは人間でいう関節部分のことであり、自由度が多ければ ロボットに人間に近い動きをさせることができるということである。 3.2 HeartToHeart を使用してのモーション 作成 KHR-1にはその姿勢制御、そして動作のためにラジコンカーの車輪の動作させるために 使用されているラジコンサーボを使用しており、各サーボ1つ1つにチャンネル番号(以 下 CH)が振り分けられている。これらを HeartToHeart により、初期設定角度トリム)設定、 そして任意の位置にサーボを稼動させることが可能である。 例として、右腕を頭の上に乗せる動作をさせたい時には、CH4 のサーボを 0 度に、CH5 の サーボを 180 度に、CH6 のサーボを 0 度にというように設定する[17]。また、HeartToHerat では他にも、設定したサーボ位置を連続して稼動させ、歩行や前転、腕立て伏せといった 7 図 13 サーボモーター 図 14 図 15 コントロールボード RS232C 人間と同様の動きをさせることが可能である。また、さらにそれらを組み合わせて再生さ せる、シナリオデータの作成も行うことができる。そしてこれを KHR-1に装着された基盤 に転送する機能も備えている。そしてそれらで作成したデータは主に CSV ファイルとして 保存され、MicroSoft Office Exel によって編集することも可能である。 (図 16 参照) 3.3 RS232C 米国電子工業会によって標準化されたシリアル通信の規格の1つである。パソコン本体 とプリンタ、モデム、スキャナなどの周辺機器を接続するのに使われていたが、現在はほ とんど使われていない[3]。 そこで本研究では USB(Universal Serial Bus)コネクタをシリアルコネクタに変換する USB シリアル変換ケーブル(図 17 参照)を使用した。 3.4 Java Sun Microsystems 社が 1995 年に開発したオブジェクト指向言語。Java の最大の特徴は プラットフォームに依存しない動作が保証されている点である。Windows、Linux、Mac など OS(Operating System)が異なっていても、Java VM(Java Virtual Machine)を持つコン ピュータなら全く変更なしに動作させることができる。 また、Java ではワープロソフト、表計算ソフト、家計簿ソフトなどスタンドアロンで動 8 図 16 CSV ファイルのイメージ 図 17 USB-RS232C 作するアプリケーション、Web ページ上で動作させることができるアプレット、Web サーバ 上で直接動作する Servlet などを作ることができる。 9 OS メーカー専用の 各メーカーの ドライバ マウス USB 等 RS232C OS KHR-1 Robot API ロボット用 ドライバ XXX USB 等 図 18 将来 ドライバの説明 RS232C OS ロボット用 Robot API KHR-1 ドライバ USB 等 現在 XXX RS232C OS ロボット用 CSV file ドライバ 図 19 3.5 KHR-1 現在と将来 Java での RS232C 制御 Java で RS232C へアクセスするには Communication API(Application Program Interface) を使用する。Communication API とは、java でシリアル通信を行うためのものである。 Communication API を 使 用 す る に は Sun Microsystems 社 の ウ ェ ブ ペ ー ジ か ら javacomm20-win32.zip をダウンロードする。ダウンロードしたファイルを解凍し、comm.jar、 javax.comm.properties、win32com.dll の3つのファイルを Java の bin フォルダにコピー する。そして、クラスパスに comm.jar ファイルを追加する。そのうえで、javax.comm.* パ ッケージをインポートすると、Communication API が使用可能になる[5][9]。 10 ロボットとの通信 OSとの通信 inputArrayList initSerialport position_number makeArray motion_data setArray motion_number makeArray KHR-1 依存 play sleep sleepKaij 図 20 3.6 作成したプログラムの全体像 Java での制御系プログラミング 3.6.1 全体像 Java でのプログラムは、各メーカ対応可能なロボット専用のデバイスドライバの作成を 目標とした。わかりやすく説明するために PC の周辺機器のマウスを例にとって説明する。 各メーカのマウスがメーカ独自の信号を OS に送信し、OS(Operating System)がその信 号を受信し、マウスが動作する。これは OS が各メーカばらばらの信号を認識しているので はなく、メーカ専用のデバイスドライバがメーカ独自の信号を OS が認識できる信号に変換 しているのである。(図 18 参照) このように、どのロボットでも動作するデバイスドライバのようなものを作成しようと した。現在はロボット用のドライバの構想の一部を実現した。具体的には各メーカのロボ ットのうち KHR-1 のみに対応し、OS から受け取る命令の代わりに CSV ファイルからの命令 を受け取る仕組みである。したがって動作する KHR-1 専用のデバイスドライバとなってい る(図 19 参照)。 11 図 21 RS232C 通信の設定 3.6.2 作成したプログラムの詳細 プログラムの内容は大まかにロボットと通信する部分とOSと通信する部分とに分けられ る。ロボットと通信する部分はinitSerialportメソッド、Sleepメソッド、position_number メソッド、motion_dataメソッド、motion_numberメソッド、sleepKaijoメソッド、playメ ソッドに分けられる。次に、OSと通信する部分はinputArrayList、setArrayメソッド、 makeArrayメソッドに分けられる。(図20参照)以下にそれぞのメソッドの細かい部分を書 く。 Communication API が 使 用 可 能 に な っ た と こ ろ で SerialPort ク ラ ス と CommPortIdentifier クラスのインスタンスを作成する[6]。次に RS232C 通信の設定を行う initSerialPort メソッド、サーボをスリープの状態にする sleep メソッド、CSV ファイル を読み込みファイルの行数を取得する makeArray メソッドポジション書き込みコマンドと 読み込んだ CSV ファイルの値を配列に入れる setArray メソッド、CSV ファイルの値が入っ た配列を RCB-1 に書き込む inputArrayList メソッド、モーションデータに含まれるポジシ ョン数を指定する position_number メソッド、シナリオで使用するモーションの番号を指 定する motion_data メソッド、シナリオデータに含まれるモーションの数を指定する motion_number メソッド、サーボのスリープを解除する sleepKaijo メソッド、シナリオを 再生する play メソッドを作成する。 sleep メソッド、inputArrayList メソッド、position_number メソッド、motion_data メ ソッド、motion_number メソッド、SleepKaijo メソッド、play メソッドには RCB-1 にデー タを書き込む DataOutputStream クラスのインスタンス outputwriter と RCB-1 から戻り値 を受け取る DataInputStream クラスのインスタンス inputreader、戻り値を格納する要素数 12 図 22 sleep コマンドの設定 が2つの配列 ack を作成する[4]。そして、データを書き込んだ際に正常な戻り値 0x06 が ack に返ってこない場合のためにデータ書き込み、戻り値の受け取りを繰り返す処理を 記述する[8]。 以下に各メソッドの詳しい説明を述べる。 z initSerialPort メソッド initSerialPort メソッドは PC と RS232C 通信の基本的な設定を行うメソッドである。 CommPortIdentifier クラスの getPortIdentifier メソッドで使用するポート番号を指定し、 open メソッドでアプリケーション名称とタイムアウト時間を指定する。また、SerialPort クラスの setSerialPortParams メソッドで通信速度を 115200bps(Bit Per Second)、デー タ ビ ッ ト 長 を 8 bit 、 ス ト ッ プ ビ ッ ト を 1 bit 、 パ リ テ ィ ビ ッ ト を な し に 指 定 し 、 setFlowControlMode メソッドでフロー制御をなしに指定する[2]。(21 参照) z sleep メソッド sleep メソッドはデータ長が長いコマンドを受信しやすくするためにサーボをスリー プの状態にするメソッドである。サーボをスリープの状態にするには RCB-1Command のソフ トウェアスイッチ設定のコマンドを使用する。上半身と下半身をスリープの状態にするた め要素数が4つの配列を2つ作り、1つめの要素にソフトウェアスイッチ設定コマンドの 0xf1(CMD)を入れ、2つめの要素に、上半身をスリープの状態にするなら 0x00(ID)、下 半身をスリープの状態にするなら 0x01(ID)を入れ、3つめの要素にサーボをスリープの 13 状態にする値 0x01 を入れ(SW)、4つめの要素に CMD、ID、SW を加算した値の MSB (Most Significant Bit)1ビットを削った値を入れる。(図 22 参照)そして、その配列 を RCB-1 に書き込む[15]。 z makeArray メソッド makeArray メソッドは CSV ファイルの1行目のアルファベットの部分と左から2列を除い た行数を取得し、その値を変数 lines に入れるメソッドである。 z setArray メソッド setArray メソッドはポジション書き込みコマンドと読み込んだ CSV ファイルの値を配列に 入れるメソッドである。上半身と下半身のポジションを書き込むため変数 lines 掛ける2 行 18 列の2次元配列を作り、1つめの要素にポジションデータ書き込みのコマンドの 0xf9 (CMD)を入れ、2つめの要素に、上半身のポジションを書き込むなら 0x00(ID)、下半身 のポジションを書き込むなら 0x01(ID)を入れ、3つめの要素にモーションナンバーであ る 0x00(MOT_NO)を入れ、4つめの要素にポジションの順を指定して入れ(POS_INDEX)、 5つめの要素に CSV ファイルの SPEED(SPD)の値を入れる。6つめから 17 個目の要素は、 2つめの要素が 0x00 なら CSV ファイルの CH1 から CH12 の値を入れ、0x01 なら CH13 から CH24 の値を入れる。18 個目の要素は CMD、ID、MOT_NO、POS_INDEX、SPD、CH1 から CH12 ま でを加算した値の MSB1ビットを削った値を入れる。また、SPD、CH1 から CH24 の値を配列 に入れる際に、数字から数値への変換を行う[15]。 z inputArrayList メソッド inputArrayList メソッドは setArray メソッドで作成した配列を RCB-1 に書き込むメソッ ドである。 z position_number メソッド position_number メソッドはモーションデータに含まれるポジション数を指定するメソッ ドである。要素数が5つの配列を作り、1つめの要素にポジションデータ数書き込みコマ ンドである 0xf7(CMD)を入れ、2つめの要素に、上半身のなら 0x00(ID)、下半身なら 0x01 (ID)を入れ、3つめの要素にモーションナンバーである 0x00(MOT_NO)を入れ、4つめ の要素に再生するポジションインデックスの数量である変数 lines の値(COUNT)を入れ、 5つめの要素に CMD、ID、MOT_NO、COUNT を加算した値の MSB1ビットを削った値を入れる。 そして、その配列を RCB-1 に書き込む[15]。 z motion_data メソッド motion_data メソッドはシナリオで使用するモーションの番号を指定するメソッドであ 14 図 23 作成したソフトウェアの画面イメージ る。要素数が6つの配列を作り、1つめの要素にモーションデータ書き込みコマンドであ る 0xf5(CMD)を入れ、2つめの要素に、上半身のなら 0x00(ID)、下半身なら 0x01(ID) を入れ、3つめの要素にシナリオナンバーである 0x00(SCEN_NO)を入れ、4つめの要素に、 シナリオに含めるモーションのインデックス番号である 0x00(MOT_INDEX)を入れ、5つめ の要素にシナリオに含めるモーションナンバーである 0x00(MOT_NO)を入れ、6つめの要 素に CMD、ID、SCEN_NO、MOT_INDEX、MON_NO を加算した値の MSB1ビットを削った値を入れ る。そして、その配列を RCB-1 に書き込む[15]。 z motion_number メソッド motion_number メソッドはシナリオデータに含まれるモーションの数を指定するメソッド である。要素数が5つの配列を作り、1つめの要素にモーションデータ数書き込みコマン ドである 0xf3(CMD)を入れ、2つめの要素に、上半身のなら 0x00(ID)、下半身なら 0x01 (ID)を入れ、3つめの要素にシナリオナンバーである 0x00(SCEN_NO)を入れ、4つめの 要素に再生するモーションの数である 0x01(COUNT)を入れ、 5つめの要素に CMD、ID、SCEN_NO、 COUNT を加算した値の MSB1ビットを削った値を入れる。そして、その配列を RCB-1 に書き 込む[15]。 z sleepKaijo メソッド sleepKaijo メソッドはサーボのスリープを解除するメソッドである。サーボのスリープ の状態を解除にするには RCB-1Command のソフトウェアスイッチ設定のコマンドを使用する。 上半身と下半身をスリープの状態にするため要素数が4つの配列を2つ作り、1つめの要 素にソフトウェアスイッチ設定コマンドの 0xf1(CMD)を入れ、2つめの要素に、上半身を スリープの状態にするなら 0x00(ID)、下半身をスリープの状態にするなら 0x01(ID)を 入れ、3つめの要素にサーボのスリープの状態を解除する値 0x00 を入れ(SW)、4つめの 要素に CMD、ID、SW を加算した値の MSB1ビットを削った値を入れる。そして、その配列を RCB-1 に書き込む[15]。 z play メソッド play メソッドは書き込み済みのシナリオを再生するメソッドである。要素数が4つの配 列を作り、1つめの要素にモーションデータ再生コマンドである 0xee(CMD)を入れ、2つ 15 Data Data’ Data 処理1 OS 処理1 Data Data’’ Robot KHR-1 Data’ 処理2 Data’ 処理2 Data’’’ 処理3 Data’’ Data’’’ Data’’ 処理3 一般のアプリケーション Data’’’ Data’’’ の処理とデータの流れ 制御系プログ ラムの処 実行エラー 制御エラー 理とデータの流れ 通信エラー 図 24 アプリケーションと制御系のデータの流れ めの要素に、上半身のなら 0x00(ID)、下半身なら 0x01(ID)を入れ、3つめの要素に再 生するシナリオの番号である 0x00(SCEN_NO)を入れ、4つめの要素に CMD、ID、SCEN_NO を加算した値の MSB1ビットを削った値を入れる。そして、 その配列を RCB-1 に書き込む[15]。 次に別クラスでボタンを1つ作り、そのボタンのアクションリスナーに sleep メソッド inputArrayList メソッド、position_number メソッド、motion_data メソッド、motion_number メソッド、SleepKaijo メソッド、play メソッドを書く[7]。作成したソフトウェアの画面 イメージを図 23 に示す。なお、作成したソフトウェアの総ステップ数は約 1200 ステップ になった。 4. KHR-1 の動画 KHR-1 の動画[16] 5. 考察 16 k 図 25 戻り値を受信する部分のコード 5.1 HeartToHeart でのモーション作成の考 察 まず HeartToHeart は各サーボを制御している、言わばこのプログラムが、人間の脳で言 えば指令に当たるものを制御しているのだが、プログラムを考察すると、実際に使用して みることによって、当初自分が予想していたものとは大きく違い、多くの細かい作業が必 要となった。本体の組み立てに関してもそうだが、制御する機構からプログラムまでが細 かく設定してある。このプログラムはそれを制御するために作られており、本体と同じく 拡張用のチャンネルも設定されており、将来的なバージョンアップをも考えてあることが わかる。使っていて考えたのは、本当に最初からやらなくてはいけないということである。 ある程度の動きをさせる時に考える簡単な動作ですら、いくつかの動きを繋げていけなく てはならない。このことを考察すると、いかに人間の脳が複雑な指令を一瞬で伝達してい るかがわかる。 同じようにモーションを考察すると、例えば歩くというモーション1つでも、腰を傾け てバランスをとり、足を上げたときに倒れないようにし、さらに前に足を踏み出す際もバ ランスを考え、次の1歩のために着地点も考えておかなければならない。それまでに必要 なプログラムも一緒に組んでおかなくてはならない。このことから、人間が脳から受けて 行う動作がいかに複雑なもので、無意識下で行っている行動が、いかに動作のために重要 であるかということがわかるのである。 5.2 制御プログラムの考察 図 24 のように一般のアプリケーションではプログラムの中に複数の処理があり、データ 17 はプログラミングされた処理の順序にデータは加工されていく。データはそのプログラム 内で処理されて、データの加工や処理はそのプログラムからそのほかのプログラムやハー ドへ制御が移行されることはない。 今回作成した制御プログラムでは複数の処理がある。まずデータはCSVファイルから送ら れてきて、データがプログラムで加工されるのだが、実際にプログラムが一般のアプリケ ーションのように加工処理を行っているわけではない。処理対処のデータはプログラム中 からRS232C経由でKHR-1に送られ、KHR-1は送られてきたデータを実際に処理する。処理後 のデータ加工結果として戻り値をプログラムへ返す。その戻り値の受信し、ひとつの処理 に対してデータとその加工後のデータ(戻り値)をプログラムが確認すると次の処理へと 移行する。このようにプログラム内だけでデータを処理するわけでなく、外部のハードウ ェアで処理することを実現するのが制御系プログラムの特徴である。 一般アプリケーションと制御系プログラムとの大きな差はデータを加工する場合、自分 自身のプログラム中だけで処理するか、それとも外部のプログラム、しかも異なるハード ウェアで動作するプログラムで加工処理されるかの違いである。従って、発生するエラー の種類が大きく異なる。図25で示すとおり、エラーがRS242Cの「通信エラー」、ロボットの 「実行エラー」「制御エラー」などである。これらのエラーは物理的な発生はもとより、ロ ボットの動作環境(例えば、足を動かそうとしても物理的に障害物があり動かせない等) によっても発生する。これらのエラーを的確に処理するのが制御プログラムの特徴である。 本プログラムでは、外部との通信やハードのエラーを適切に処理するために、制御系プロ グラム用のエラー処理を装備した。具体的にはロボットへデータを送信(書き込み)だの ち、通常は加工後のデータを受信(読み込む)する場合、エラーが発生すると受信が成功 せずにプログラムはハングアップする状態になる。これは通信が途切れたり、制御エラー で戻り値を返せなかった場合に発生するエラーである。通常のアプリケーションのように コーディングするとハングアップする可能性が高くなる。そこで、受信のための処理にタ イムアウト処理を追加した。これによって、一定時間以上戻り値が返ってこない場合は受 信待ちはタイムアウトとなり次の処理へ移行する流れとした。さらに、次の処理へ単純に 移行できない場合は、成功するまで一定回数ループを繰り返す設計とした。これによって、 エラーの発生が続いたとしても、何度も再試行して成功まで繰り返す処理とした。 このようにエラー処理を工夫することで、ハングアップせずにロボットを制御できるプ ログラムを作成した。これによって、制御プログラムの特徴が把握でき、またプログラミ ングにおけるテクニックもマスターすることができた(図25参照)。 6. まとめ 2足歩行ロボット KHR-1 を組み立て、ID の設定、ホームポジションの設定、サンプルモ ーションの再生を付属のソフトウェア HeartToHeart で行った。制御系プログラミング学習 18 のため java 言語で KHR-1 のモーションの再生ソフトウェアを作成し、一般のアプリケーシ ョンと制御系プログラミングの違いを学習した。 また、KHR-1 と PC は RS232C で有線接続されており、将来は無線で通信することでより難 しい制御系プログラミング開発の習得すると共に各メーカに対応できるロボットドライバ を開発する予定である。 参考文献 [1]経済産業省商務情報政策局情報政策ユニット情報処理振興課:2004 年版組込みソフト ウェア産業実態調査報告書,2004 [2] http://ayusya.hp.infoseek.co.jp/ProgramJavaJavaRs232c.html [3] http://e-words.jp/a/RS232C.html [ 4 ]http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html?overview-summary.ht ml [5] http://java.sun.com/products/javacomm/index.jsp [6] http://java.sun.com/products/javacomm/reference/api/index.html [7] http://milkyway.merseine.nu/main.shtml [8] http://robotmania.seesaa.net/ [9] http://www.excite.co.jp/world/english/web/ [10] http://www.honda.co.jp/ASIMO/history/history_01.html [11] http://www.honda.co.jp/ASIMO/history/history_02.html [12] http://www.honda.co.jp/ASIMO/history/history_03.html [13] http://www.honda.co.jp/ASIMO/history/history_04.html 19 [14] http://www.honda.co.jp/ASIMO/history/history_05.html [15] http://www.kondo-robot.com/html/Product_KHR1_Support.html [16] http://www.kondo-robot.com/html/Products_KHR1_Movie.html [17] http://www.majingaa.com/majingaa/report/v_KHR-1/ 謝辞 KHR-1 のハンチングの問題についてご回答いただいたイクシスリサーチ株式会社代表取 締役の山崎文敬氏に感謝いたします。RCB-1Command の疑問にご回答いただいた近藤科学の 方々に感謝いたします。DTR について調べてくださった本学情報処理センターシステム利用 係主任の森章氏に感謝いたします。休日に本学サテライトキャンパスを開放していただい た中小企業支援センターの方々に感謝いたします。制御系プログラミングについてアドバ イスをしてくださった本学卒業生で奈良先端科学技術大学院大学情報科学研究課修士課程 の後藤慶多氏に感謝いたします。息抜きのためにエンドレスバトルを紹介し、オフカイに 誘っていただいた本学卒業生で阪南大学大学院企業情報研究課修士課程の今市昂志氏に感 謝します。研究において協力いただいた本学経営情報学部経営情報学科4回生花川ゼミの 池宮直氏に感謝いたします。息抜きのためにダウンロードしたアニメを提供してくださっ た本学経営情報学部経営情報学科4回生花川ゼミの齋藤大資氏に感謝いたします。研究に おいてすばらしい助言をしてくださった本学経営情報学部経営情報学科4回生花川ゼミの 妹尾潤氏に感謝いたします。研究においてすばらしいアドバイスをしてくださった本学経 営情報学部経営情報学科4回生花川ゼミの伊藤裕美氏に感謝いたします。眠たいときにコ ーヒーを買ってきていただいた本学経営情報学部経営情報学科3回生花川ゼミの山本裕治 氏に感謝いたします。モーション再生時にながす音楽をダウンロードし、提供くださった 本学経営情報学部経営情報学科3回生花川ゼミの菅啓行氏に感謝いたします。モーション 作成にご協力くださった本学経営情報学部経営情報学科3回生花川ゼミの宇治孝太朗氏に 感謝いたします。研究で多忙のときに昼食を買いにいっていただいた本学経営情報学部経 営情報学科3回生花川ゼミの野内康貴氏に感謝いたします。研究で多忙のときに夕食を買 いにいっていただいた本学経営情報学部経営情報学科3回生花川ゼミの突田裕之氏に感謝 いたします。研究で多忙のときに夜食を買いにいっていただいた本学経営情報学部経営情 報学科3回生花川ゼミの髙橋俊介氏に感謝いたします。研究で多忙のときに朝食を買いに いっていただいた本学経営情報学部経営情報学科3回生花川ゼミの山本哲也氏に感謝いた します。正門を夜遅くまで開けていただいた本学警備員さんに感謝いたします。特に何か 20 というわけではないのですが緑ヶ丘中学校1年3組の花川大地君に感謝します。多くのご 指導を頂いた花川典子先生に感謝します。 21