1
JAVA プログラムによるロボットの動作制御 2009 年 1 月 30 日
阪南大学 経営情報学部 経営情報学科 花川ゼミ
宮本佳美 山城優季
2
目次 目次 ......................................................................................................................................2 第1章 はじめに .............................................................................................................3 第2章 2足歩行ロボット(KHR‐1)の性能 ...............................................................4 2.1 KHR-1.............................................................................................................4 2.2 サーボモータ...................................................................................................5 2.3 コントロールボード ........................................................................................6 2.4 PC 接続用インターフェース ...........................................................................7 2.5 ソフトウェアの考え方 ....................................................................................7
第3章 KHR‐2HV ......................................................................................................16 3.1 KHR‐1 と KHR‐2HV の比較 ....................................................................16
第4章 動作プログラム.................................................................................................18 4.1 JAVA .............................................................................................................18 4.2 CommunicationAPI のインストール............................................................18 4.3 作成した JAVA プログラム ...........................................................................18 4.4 考察 ...............................................................................................................27
第5章 まとめ ...............................................................................................................29 参考文献 .............................................................................................................................30
3
第1章 はじめに 近年、ロボットはさまざまな形、大きさ、用途について研究、開発され、各方面におい
てその活躍の場を拡大し続けてきた。現在のロボット技術は高く、一般家庭用でありなが
ら高性能のロボットの種類は多く存在する。その中でも、2足歩行ロボットの進化は目覚
ましく、ASIMO など大手の企業が開発を行っているロボットでは、ロボット特有の動きが
ほとんどなくなり、より人間に近いものとなってきている。そこで、本研究では、KONDO社の2足歩行ロボット KHR-1(http://www.kondo-robot.com/html/Product_main.html)[1]を使用し、JAVA プログラムから動作制御が出来るかどうか、研究を行った。JAVA プ
ログラムでモーションを作り、それをロボットに転送し、動くかどうかの確認を行う。 今回使用した KHR-1 は『完成されたもの』ではなく、パーツを付け替えたり、モーショ
ンを新たに作り替えたりする事で、自分用にカスタマイズする事が出来る。 ソフトウェアは KHR-1 に付属されているプログラム『HeartToHeart』を使用した。こ
のソフトウェアは一般人でも簡単にプログラムが作成できるような構成になっており、非
常に使いやすいものである。また、ある程度の複雑な動きも作成可能である。 第1章では、本研究の背景を述べた。第2章では、本研究で用いた KHR-1 について説明
する。第3章では、KHR-1 と KHR-2HV の比較について述べる。第4章では、実際に作
成したプログラムについて説明する。第5章では、本論文の結論と今後の課題について述
べる。
4
第2章 2足歩行ロボット(KHR‐1)の性能 2.1 KHR-1
KHR-1(図 1 参照)[1]は、KONDO 社が開発した汎用2足歩行ロボットである。KHR-1は第5回 RoboOne J クラスで優勝したことがあるほどの性能を持ちながら、初心者が簡
単に組み立てできる設計となっており、個人で改造、改良が施せるプログラム以外のデー
タがインターネット上で公開されている。KHR-1 は、サーボモータ(KRS-784ICS)17 個
とコントロールボード(RCB-1)2枚をリンクさせて動作する2足歩行ロボットである。
なお、KHR-1 にはモーション作成ソフトウェアである HeartToHeart が付属している。パ
ソコンとコントロールボードの通信は RS232C(RecommendedStandard232C)(図 2 参照)
で行った。
図 1 KHR-1 全体図
図 2 RS232C
5
2.2 サーボモータ
サーボモータ(図 3 参照)[2]とは、回転の角度などを制御できるモータのことである。
一般的なモータは、電源を入れると常に回転し続けるが、サーボモータでは入力される信
号によって制御が可能である。サーボモータの中には、モータや制御基板、ギア、ポテン
ショメーター(可変抵抗)が入っている。ポテンショメーターによってモータの回転角度
を検出し、フィードバックをかけることで、回転角度を制御するしくみになっている。 2足歩行ロボットでは、サーボモータの数を軸や自由度と呼ぶ。例えば17自由度(軸)
のロボットではサーボモータが17個使われていることとなる。なお、サーボモータは制
御方式によって、アナログ方式とデジタル方式に大別できるが、KHR シリーズでは高性能
なデジタル方式のサーボモータが使われている。 サーボモータのスペックの中でも、とくに重要なのがトルクとスピードである。トルク
は物体を回転させる力のことで、この数値が大きいほど力が強いこととなる。スピードは
回転速度を表し、数値が大きいほど高速な動きが可能となる。サーボモータにはトルク重
視とスピード重視があるが、2足歩行ロボットにはトルク重視がよく使われる。 サーボモータの構造は、動力源の小型 DC モータ1/150~1/200の減速比を持つ平
歯車による歯車減速装置、出力軸の角度変位を検出するポテンションメータ、モータ制御
用基板、保護ケースから構成されている。
図 3 サーボモータ
6
2.3 コントロールボード
コントロールボードは、2足歩行ロボットの頭脳に当たる重要なパーツである。CPU(マ
イコン)とメモリが搭載されており、メモリに記録されているモーションデータに基づい
て、サーボモータの回転角度を調整することが出来る。また、高性能なコントロールボー
ドでは、ジャイロセンサーや加速度センサーからの入力に応じて、サーボモータの制御の
仕方を変更することも可能である。 コントロールボードのスペックの中でもとくに重要なのが出力ポートの数である。出力
ポート1つにつき1つのサーボモータを制御することが出来るので、出力ポートが多いほ
ど、数多くのサーボモータを制御できることとなる。また、センサーを接続したいのなら
入力ポートが必要となる。数多くのモーションを登録したいのなら、登録可能なモーショ
ン数やシナリオ数も重要である。また、2足歩行ロボットのモーションはパソコン上から
作成するが、コントロールボードごとに対応しているモーション作成ソフトが異なるため、
モーション作成ソフトの使いやすさも重要なポイントとなる。 KHR‐1 背部に搭載されている2枚のコントロールボード(RCB-1)(図 4 参照)は、
CPU・メモリが搭載されており、あらかじめ PC で製作されたモーションデータを再生す
ることが可能である。また、1枚のコントロールボードで12台のサーボモータをコント
ロールすることができる。だが、17自由度の KHR‐1 をコントロールするには、出力ポ
ート数が足りない。そこで、KHR‐1 では、コントロールボードを2枚搭載することで、
合計24個のサーボモータ制御に対応している。
図 4 RCB-1
7
2.4 PC 接続用インターフェース
KHR‐1 に搭載されているコントロールボードは、外部とデータをやり取りするために
高速シリアル端子と低速シリアル端子を備えている。この高速シリアル端子とパソコンを
接続するのに使われるのが、ICS-PC インターフェースⅡやシリアル USB アダプタである。
これらを経由してパソコンとコントロールボードを接続し、モーション作成ソフトを利用
して、モーションの作成やコントロールボードへのモーションの転送を行う。 KHR-1 に標準で付属している通信用ケーブルが ICS-PC インターフェースⅡである。
ICS-PC インターフェースⅡは、パソコンのシリアル端子(RS-232C 端子)と高速シリア
ル端子を接続するためのアダプタだが、シリアル端子は非常に古い仕様のインターフェー
スであり、 近のパソコンはシリアル端子を装備していない製品が主流になってきている
(特にノートパソコン)。シリアル端子を装備していないパソコンの場合、USB-シリアル
変換機アダプタを利用することで、ICS-PC インターフェースⅡを使えるようになる。本研
究では、下図の RS232C と USB‐シリアル変換機アダプタを用いた。
図 5 RS232C と USB‐シリアル変換機アダプタ
2.5 ソフトウェアの考え方
HeartToHerat では2足歩行ロボットの1つ1つの動作を積み上げていくことで連続し
た動きを実現するように考えられている。1つの動作を作成するためにもポジション・モ
ーション・シナリオをいう言葉を使用している。
(1) ポジション
ポジションは、今現在のロボットの固定された姿勢を表すデータで、各サーボの位置に
よってデータは異なる。ポジションを作成するためには、HeartToHeart 上のスライドバー
を使用してサーボの位置を設定するか、教示機能によるデータをキャプチャーし表す方法
USB‐シリアル変換機アダプタ
8
がある。 教示機能とは、サーボモータの回転位置を、モーション作成ソフト側で取り込む機能の
ことである。サーボモータを脱力させた状態で、手でロボットの関節を動かし、そのポー
ズを記録することも可能である。通常サーボの位置を決めるために、信号をサーボに送り
その結果により信号を増減するという作業の繰り返しで行っている。つまり、制御のため
の信号の流れは常に一方通行である。これに対して、サーボモータ KRS-786ICS はポジョ
ンキャプチャー機能を持っている。特定の信号に対してサーボは、現在の位置をデータと
して返してくる。またある特定の特殊な状態として入力された信号によって、サーボをフ
リーの状態にすることが可能になっている。教示機能では、指定したサーボをフリーにし、
その出力軸を直接うごかすことによってサーボ位置を決め、決定後にコマンドを送って現
在のサーボ位置を知ることで制御信号を決定する。教示機能は設定により様々な使用方法
が可能である。たとえば、全身を脱力させ教示する方法や、右手だけ、左足だけ、といっ
た一部分だけの教示を行うことも可能である。
(2) モーション
モーションは、連続したポジションデータの集まりである。ポジションからポジション
へ移り変わることによって1つの動きに見え、またその間の動きのスピードは7段階に調
整することができ、自動的に補完される。RCB-1 は1つのモーションに100のポジショ
ンを記録することができ、モーションデータは40まで記録が可能である。
(3) シナリオ
ロボットに様々な動きをさせる場合にその都度モーションを指定して動作することもで
きるが連続した動きをする場合はシナリオを使用する。たとえば、前進動作の後に元の位
置までもどるため、後退動作を入れるなどモーションとモーションをつなぎ合わせること
をシナリオ作成という。1つのシナリオにモーションデータを200個まで指定すること
ができ、シナリオは4つまで RCB-1 に転送できる。
(4) ホームポジション
初期設定の中で一番時間を費やすのが、ホームポジションと呼ばれる設定である。ホー
ムポジションとは、データが未入力時にロボットが直立した状態(図 6 参照)[3]の時のこ
とを指す。すべての動作はこのホームポジションを基点として動作し、サーボに負荷が大
きくかかる状態だと動作時間が短く効率は悪くなる。
9
図 6 ホームポジション
(5) HeartToHeart の詳細
KHR-1にはその姿勢制御、そして動作のためにラジコンカーの車輪の動作させるために
使用されているラジコンサーボを使用しており、各サーボ1つ1つにチャンネル番号(以
下 CH)が振り分けられている。これらを HeartToHeart により、初期設定角度トリム設定、
そして任意の位置にサーボを稼動させることが可能である。例として、右腕を頭の上に乗
せる動作をさせたい時には、CH4 のサーボを 0 度に、CH5 のサーボを 180 度に、CH6 の
サーボを 0 度にというように設定する。 また、HeartToHerat では他にも、設定したサーボ位置を連続して稼動させ、歩行や前転、
腕立て伏せといった人間と同様の動きをさせることが可能である。また、さらにそれらを
組み合わせて再生させる、シナリオデータの作成も行うことができる。そしてこれを KHR-1に装着された基盤に転送する機能も備えている。そしてそれらで作成したデータは主に
CSVファイルとして保存され、Microsoft Office Excelによって編集することも可能である。 以下に HeratToHeart の操作の詳細を説明する。
① メインウインドウ(図 7 参照)の構成 I. シンクロ設定:現在設定しているサーボデータを RCB-1 にリアルタイムに反映させ
るための機能である。図の右上の SYNC が設定箇所となる。OFF 時の場合の更新は
行われない。ON 時の場合のみ更新が行われる。 II. スピード設定:現在のデータへ RCB-1 のポジションデータが変更されるとき、変化
10
するスピードを設定する。図の SYNC の下のレバーの SPEED で設定する。速度は
7段階あり、0が一番早く、7が一番遅い設定に変更することができる。サーボコ
ントロールやモーション作成に主に使用し、スライドバーを動かすか、スライドバ
ー横にある数字を0~180まで変えることでサーボ位置が変わる仕組みになって
いる。 III. ショットボタン:教示機能を使用するときに使用する。 IV. データ送信:メインウインドウで作成したポジションを RCB-1 に転送して、サーボ
の動きに反映させる機能である。 V. データ読み出し:RCB-1 の現在のデータを読み込む。 VI. ホーム復帰:RCB-1 に登録したホームポジションの位置にサーボの位置を戻す。一
度押すとサーボがフリーの状態となり、もう一度押すと確認ダイアログを表示後、
ホームポジションに戻る。 VII. スリープ:RCB-1 をスリープモードにする。各サーボはフリーになるが、パソコン
側とのデータの送受信は可能。 VIII. デフォルト:スリープモードに設定した RCB-1 を通常のモードに戻す。 IX. モーションデータの編集:ポジションデータの集まりであるモーションデータの編
集ウインドウを開く。表示中であれば、ウインドウを閉じる。 X. グラフウィンドウ表示:モーションデータをグラフで表示するウインドウを表示す
る。すでに表示していればウインドウを閉じる。 XI. データの追加:現在、メインウインドウで表示しているデータをモーションに追加
する。データはモーション編集ウインドウの 後に追加される。 XII. データの上書き:モーションデータ編集ウインドウの選択されているデータを、現
在のメインウインドウのデータで上書きする。元のデータは消える。
11
図 7 HeartToHeart のメインウインドウ
② モーション編集の構成(図 8 参照) I. 新規作成:新規データファイルを作成。現在、表示されているデータは消去され
る。 II. ファイルを開く:データファイルを読み込む。 III. ファイルへ保存:データファイルに保存する。 IV. 元に戻す:変更されたデータを1つ前の状態に戻す。 V. コピー:選択されたデータをコピーする。 VI. 切り取り:選択されたデータを切り取る。 VII. 貼り付け:コピーまたは、切り取ったデータを貼り付ける。 VIII. 書き込み:現在編集中のデータを、RCB-1 の「データナンバー指定」で設定した
番号に書き込む。 IX. 読み込み:RCB-1 のデータを読み込みます。読み込むモーションの番号は「デー
タナンバー指定」で設定。
12
X. データ削除:「データナンバー指定」で設定した RCB-1 のデータを削除。 XI. データ再生:「データナンバー指定」で設定た RCB-1 のデータを再生。 XII. データナンバー指定:RCB-1 の作業対象のモーションデータ番号を指定。 XIII. 編集:データウインドウ内で選択しているデータをメインウインドウにコピーす
る。同じことは、データウインドウ内でデータをダブルクリックしても行える。 XIV. 挿入:新規ポジションデータを挿入する。 XV. データ削除:選択しているポジションデータを削除する。
図 8 モーションデータ編集ウインドウ
③ シナリオデータ編集の構成(図 9 参照) I. モーション一覧読み込み:RCB-1 内メモリのモーションデータの状況を読み込ん
でモーションデータ一覧に表示。 II. 新規作成:新規データファイルを作成する。現在、表示されているデータは消去
される。 III. ファイルを開く:データファイルを読み込む。 IV. ファイルを保存:データファイルに保存する。 V. 元に戻す:変更されたデータ表示幅を元に戻します。
13
VI. コピー:選択されたデータをコピーする。 VII. 切り取り:選択されたデータを切り取る。 VIII. 貼り付け:コピーまたは、切り取ったデータを貼り付ける。 IX. データを下へ:シナリオデータに表示しているデータで選択しているものを下へ
移動する。 X. データを上へ:シナリオデータに表示しているデータで選択しているものを上へ
移動する。 XI. データ削除:選択しているモーションデータをシナリオから削除します。 XII. 書き込み:現在編集中のシアリオデータを、「データナンバー指定」で設定した番
号に書き込む。 XIII. 読み込み:「データナンバー指定」で指定した番号のシナリオデータを、RCB-1 か
ら読み込む。 XIV. データ削除:選択しているシナリオデータ内のモーションを削除する。 XV. データ再生:「データナンバー指定」で設定した RCB-1 のデータを再生します。 XVI. データナンバー指定:RCB-1 の作業対象のデータ番号を指定する。シナリオは S0~S3 の 4 個が使用できる。
14
図 9 シナリオデータ編集
15
以上では、HeartToHeart の画面構成を説明した。次に初期設定からモーション作成までの
流れを説明する。
④ 初期設定 まず初めに、2足歩行ロボットを動かす前に初期設定を行う必要がある。初期設定だと、
図 10 の右のような状態になるためサーボに大きな負荷がかかる。そのためホームポジショ
ンを設定しなければならない。ホームポジションを設定すると図10の左のような状態に
なる。この状態だと重心が本体中心に近くまた、サーボにかかる負荷が少なくなる。
図 10 初期状態とホームポジション[3] ⑤ データ入力 次にデータ入力を行う。まず、メインウインドウを表示し、KHR-1 に電源を入れ起動する
と、ロボットは設定されたホームポジションで自立する。このとき、メインウインドウの
サーボの値はホームポジションの値ではないので RCB-1 からホームポジションを取得する。
次に、モーション編集ウインドウを開き、メインウインドウのデータ追加をクリックする
と、モーション編集ウインドウにホームポジションのデータが追加される。メインウイン
ドウでサーボの値を変えながらポジションを設定し、モーションに必要なデータを追加し
ていく。 この流れを繰り返すとモーションを作り上げることができる。
16
第3章 KHR‐2HV
KHR‐1 について調べているうちに、KHR‐2HV という KHR シリーズの2作目である
ロボットがあることを知った。そこで、少し KHR‐2HV について紹介する。 3.1 KHR‐1 と KHR‐2HV の比較
名称 KHR‐1 KHR‐2HV 自由度(軸数) 17自由度 17自由度
サーボモータ KRS-786ICS REDVersion
KRS-788HVICS REDVersion
サーボモータのトルク
とスピード 8.7kg・cm 0.17sec/60°
10.0kg・cm 0.14sec/60°
コントロールボード RCB-1×2 RCB-3J 大自由度 24 24
AD 入力端子 なし 3 バッテリー 6V/600mAh(ニッカド) 10.8V/300mAh(ニッケル水素)
インターフェース RS-232C USB サイズ 180(W)×340(H)mm 189(W)×353(H)mm 重量 1200g 1270g
表 1 KHR‐1 と KHR‐2HV の比較[3] 以上から、KHR‐2HV は、KHR‐1 に比べて様々な点が強化されていることがわかる。 まずは、サーボモータの HV(ハイボルテージ)化とコントロールボードの性能向上であ
る。サーボモータが HV 化されたことにより、トルクとスピードが1~2割向上している
ほか、消費電流が減り、発熱も減少している。コントロールボードは RCB-1(図 11 参照)
から RCB-3J(図 12 参照)に変更され、より高度なモーションが作成できるようになった。
図 11 RCB-1
図 12 RCB-3J
また、インターフェースが RS232C から USB に変更され、バッファに空きがあれば ACK
を、なければ NAK を即座に返すというフロー制御をプロトコルが行っているため、ハード
17
ウェアフロー制御用の信号線が必要なくなった。
18
第4章 動作プログラム
4.1 JAVA
JAVAとは1995年にSun Microsystems社http://jp.sun.com/java/[5]が開発したオブ
ジェクト指向プログラム言語である。JAVA の長所は特定の OS やプラットフォームに依存
せず、動作が保証されているという利便性だが、欠点はプログラムを JAVA バイトコード
からネイティブコードに変換する際にある程度時間がかかるため、通常のプログラミング
言語で開発されたソフトウェアよりも動作は遅くなってしまう事である。1999年には
JAVA2 が発表され、現在は Java2 をベースにした改良が行われている。
4.2 CommunicationAPI のインストール
Java で RS232C のシリアルポートにアクセスするには CommunicationAPI が必要に
なる。CommunicationAPI のパッケージは javax.comm であり、構成は CommDriver、CommPortOwnershipListener 、 ParallelPortEventListener 、 SerialPortEventListenerの4つのインターフェースと、CommPort、CommPortIdentifier、ParallelPort、ParallelPortEvent、SerialPort、SerialPortEvent の6つのクラスが定義されている。
CommunicationAPI は拡張 API なので、使用するには SunMicrosystems 社のウェブペ
ージ http://java.sun.com/products/javacomm/index.html[6]から javacomm20-win32.zipをダウンロードする必要がある。javacomm20-win32.zip を解凍し win32com.dll を JDKのフォルダ(¥jre¥bin)に、comm.jar を JDK のフォルダ(¥jre¥lib¥ext)にコピーする
と、JAVA2 では CLASSPATH で指定しなくても読み込むようになる。javax.com.propertiesは JDK のフォルダ(¥jre¥lib)にコピーする。そして、CLASSPATH に comm.jar ファイ
ルを追加し、javax.comm.*パッケージをインポートすると、CommunicationAPI が使用で
き、RS232C にアクセスできるようになる。
4.3 作成した JAVA プログラム
パソコン内のモーションファイルを読み込み、RS232C を使ってパソコンと KHR-1 を接
続し、モーションファイルを KHR-1 に送信し、実際に KHR-1 を動作させるプログラムを
作成した。『モーション再生』というボタンを表示させる Gamen.java と、通信などを行う
KHR1Commander.java という構成になっており、main クラスが記述されている
Gamen.java を実行し、『モーション再生』ボタンを押す事により、KHR1Commander.java 内の情報を呼び出す仕組みとなっている。
KHR-1 と通信するメソッドは initSerialport、Sleep、position_number、motion_data、motion_number、sleepKaijo、play となっており、メモリ上にデータを保持するメソッド
は setArray、makeArray、inputArrayList となっている。KHR1Commander.java では
initSerialport メソッドで RS232C の通信設定を行い、sleep メソッドでコマンドを受信し
19
やすくする。makeArray メソッドでモーションの CSV ファイルデータを取得し、setArrayメソッドでそのモーションの CSV ファイルに値を入れて配列を作成する。その配列を
RCB-1 に書き込むのが inputArrayList メソッドであり、position_number メソッド、
motion_data メソッド、motion_number メソッドの順にシナリオやモーションのデータを
指定し、play メソッドでシナリオを再生する仕組みとなっている。(図 13 参照)以下、各
メソッドについて説明する。
図 13 プログラム全体の流れ
(1) initSerialPort メソッド
initSerialPort メソッドは KHR-1 と通信しており、RS232C の通信設定を行っているメ
ソッドである。getPortIdentifier メソッドではシリアルポートの番号で COM5 と設定する。
Open メソッドではアプリケーション名称とタイムアウト時間 1000 を設定する。
setSerialPortParams メソッドでは通信速度 115200bps、データビット 8bit、ストップビ
ット 1bit、パリティビットなしと設定する。PC/AT 互換機の RS232C は DTR、RTS 信号
がアクティブになっているので、setDTR メソッド、setRTS メソッドは false に設定し、
DTR、RTS 信号をインアクティブにする。(図 14 参照)
20
図 14 initSerialPort メソッドの設定 (2) sleep メソッド
sleepメソッドはKHR-1と通信しており、実行中のスレッドを指定されたミリ秒数の間、
スリープさせるメソッドである。スリープとは一時的に実行を停止させる事であり、スリ
ープ状態にする事で、コマンドを受信しやすくしている。要素は4つの配列が2つ必要と
なる。1つめの要素 software_switch_IDO[0]にはソフトウェアスイッチ設定コマンド 0xf1(CMD)、2つめの要素 software_switch_IDO[1]には上半身なら 0x00(ID)、下半身なら
0x01(ID)、3つめの要素software_switch_IDO[2]にはサーボをスリープの状態にする0x01(SW)、4つめの要素 software_switch_IDO[3]には CMD、ID、SW の3つの値を足した
値から MSB1ビットを引いた値を入れる。これはデータを送受信する際の誤り検出(チェ
ックサム)の為に使用している。(図 15 参照)
図 15 Sleep メソッドの設定 スリープエラーが起きた場合、『スリープエラー』と表示されるように sleep10 メソッド
21
で設定している。(図 16 参照)
図 16 スリープエラーの設定 (3) makeArray メソッド
makeArray メソッドはメモリ上にデータを保持しており、モーションの CSV ファイル
のナンバーや CH などが記述されている1行目のアルファベットの部分と、左から2列を
除いた行数(SPD、CH1から CH24 の行数)を取得し、その値を変数 lines に入れるメソ
ッドである。inputArrayList メソッド内でも設定が必要となる。lines 変数で write_motionを設定し、作成された配列で新しく write_motion を生成している。(図 17 参照、図 18 参
照)
図 17 makeArray メソッドの設定
図 18 inputArrayList メソッド内での設定
(4) setArray メソッド
setArray メソッドはメモリ上にデータを保持しており、指定されたパラメータの番号を
設定するメソッドである。makeArray メソッドでモーションの CSV ファイルのナンバー
や CH などが記述されている1行目のアルファベットの部分と、左から2列を除いた行数
(SPD、CH1から CH24 の行数)を取得し、新しく書き換えられた lines 変数の値を配列
22
に入れる役割と、ポジション書き込む役割を行っている。要素は4つの配列が2つ必要と
なる。1つめの要素 Array[i][0]にはポジションデータ書き込みのコマンド 0xf9(CMD)、
2つめの要素 Array[i][1]には上半身なら 0x00(ID)、下半身なら 0x01(ID)、3つめの要
素 Array[i][2]にはモーションナンバー0x00(MOT_NO)、4つめの要素 Array[i][3]にはポ
ジションの順を指定(POS_INDEX)して値を入れる。(図 19 参照)
図 19 setArray メソッドの設定(4つめの要素まで)
5つめの要素 Array[h][4]にはモーションの CSV ファイルの SPEED(SPD)の値を入れ
る。6つめの要素 Array[h][5]から17つめの要素 Array[h][16]には、上半身(0x00)なら
CH1 から CH12 の値、上半身(0x01)なら CH13 から CH24 の値を入れる。その際、
Integer.parseInt を設定し、SPD、CH1 から CH24 の値を数字から数値へ変換する事が必
要となる。18つめの要素 Array[h][17]には CMD、ID、MOT_NO、POS_INDEX、SPDと、上半身なら CH1 から CH12 までの17つの値を足した値、下半身なら CH1 から CH12までを17つの値を足した値から MSB1ビットを引いた値を入れる。これはデータを送受
信する際の誤り検出(チェックサム)の為に使用している。(図 20 参照)
23
図 20 setArray メソッドの設定(上半身の5つめ以降の要素) (5) inputArrayList メソッド
inputArrayList メソッドはメモリ上にデータを保持しており、setArray メソッドで作成
した配列を RCB-1 に書き込むメソッドである。 (6) position_number メソッド
position_number メソッドは KHR-1 と通信しており、モーションデータに含まれるポジ
ション数を指定するメソッドである。要素は5つの配列が2つ必要となる。1つめの要素
motion_Number[0]にはポジションデータ数書き込みコマンド 0xf7(CMD)、2つめの要素
motion_Number[1]には上半身なら 0x00(ID)、下半身なら 0x01(ID)、3つめの要素
motion_Number[2] に は モ ー シ ョ ン ナ ン バ ー 0x00 ( MOT_NO )、 4 つ め の 要 素
motion_Number[3]には再生するポジションインデックスの数量である変数 lines の値
(COUNT)、5つめの要素 motion_Number[4]には CMD、ID、MOT_NO、COUNT の4
つの値を足した値から MSB1ビットを引いた値を入れる。これはデータを送受信する際の
誤り検出(チェックサム)の為に使用している。(図 21 参照)
24
図 21 position_number メソッドの設定
(7) motion_data メソッド
motion_data メソッドは KHR-1 と通信しており、シナリオで使用するモーションの番号
を指定するメソッドである。要素は6つの配列が2つ必要となる。1つめの要素
motion1_[0]にはモーションデータ書き込みコマンド 0xf5(CMD)、2つめの要素
motion1_[1]には上半身なら 0x00(ID)、下半身なら 0x01(ID)、3つめの要素 motion1_[2]にはシナリオナンバー0x00(SCEN_NO)を入れ、4つめの要素 motion1_[3]にはシナリオ
に含めるモーションのインデックス番号 0x00(MOT_INDEX)、5つめの要素 motion1_[4]にはシナリオに含めるモーションナンバー0x00(MOT_NO)、6つめの要素 motion1_[5]には CMD、ID、SCEN_NO、MOT_INDEX、MON_NO の5つの値を足した値から MSB1ビットを引いた値を入れる。これはデータを送受信する際の誤り検出(チェックサム)
の為に使用している。(図 22 参照)
図 22 motion_data メソッドの設定
(8) motion_number メソッド
motion_number メソッドは KHR-1 と通信しており、シナリオデータに含まれるモーシ
25
ョンの数を指定するメソッドである。要素は5つの配列が2つ必要となる。1つめの要素
motion_Number[0]にはモーションデータ数書き込みコマンド 0xf3(CMD)、2つめの要素
motion_Number[1]には上半身なら 0x00(ID)、下半身なら 0x01(ID)、3つめの要素
motion_Number[2]にはシナリオナンバー0x00(SCEN_NO)を入れ、4つめの要素
motion_Number[3]には再生するモーション数 0x01(COUNT)を入れ、5つめの要素
motion_Number[4]には CMD、ID、SCEN_NO、COUNT の4つの値を足した値から MSB1ビットを引いた値を入れる。これはデータを送受信する際の誤り検出(チェックサム)
の為に使用している。(図 23 参照)
図 23 motion_number メソッドの設定
(9) sleepKaijo メソッド
sleepKaijo メソッドは KHR-1 と通信しており、sleep メソッドでスリープ状態となった
サーボをスリープ解除の状態にするメソッドである。要素は4つの配列が2つ必要となる。
1つめの要素 software_switch2_ID[0]にはソフトウェアスイッチ設定コマンド 0xf1(CMD)を、2つめの要素 software_switch2_ID[1]には上半身なら 0x00(ID)、下半身な
ら 0x01(ID)を、3つめの要素 software_switch2_ID[2]にはサーボをスリープ解除の状態
にするコマンド 0x01(SW)、4つめの要素 software_switch2_ID[3]には CMD、ID、SWの3つの値を足した値から MSB1ビットを引いた値を入れる。これはデータを送受信する
際の誤り検出(チェックサム)の為に使用している。(図 24 参照)
26
図 24 sleepKaijo メソッドの設定
(10) play メソッド
play メソッドは KHR-1 と通信しており、書き込み済みのシナリオを再生するメソッドで
ある。要素は4つの配列が2つ必要となる。1つめの要素 play[0]にはモーションデータ再
生コマンド 0xee(CMD)、2つめの要素 play[1]には上半身なら 0x00(ID)、下半身なら
0x01(ID)、3つめの要素 play[2]には再生するシナリオの番号 0x00(SCEN_NO)、4つ
めの要素 play[3]には CMD、ID、SCEN_NO の3つの値を足した値から MSB1ビットを
引いた値を入れる。これはデータを送受信する際の誤り検出(チェックサム)の為に使用
している。(図 25 参照)
図 25 play メソッドの設定
KHR-1 と通信するメソッドの sleep、position_number、motion_data、motion_number、SleepKaijo、play、メモリ上にデータを保持するメソッドの inputArrayList には、RCB-1への出力ストリーム取得の DataOutputStream クラスのインスタンス outputwriter、RCB-1からの入力ストリーム取得のDataInputStreamクラスのインスタンス inputreader、正常な戻り値を格納する2つの ack という要素の配列が各メソッドに必要となる。(図 26参照)
27
図 26 RCB-1 の入出力設定と戻り値を格納する要素の配列
同じく、 position_number 、 motion_data 、 motion_number 、 SleepKaijo 、 play 、
inputArrayList の各メソッドには、エラーなどで正常な戻り値が返ってこなかった場合、
正常な戻り値が返るまで繰り返すが、受信イベント待ちに 100 ミリ秒のタイムアウトを発
生させ、次の処理に進むように設定した。次の処理に移行できない場合、成功するまで繰
り返すようになっている。(図 27 参照)
図 27 受信のタイムアウトと戻り値の設定
4.4 考察
本プログラムは、パソコン内のモーションファイルを読み込み、RS232C を使ってパソコ
ンと KHR-1 を接続し、モーションファイルを KHR-1 に送信し、実際に KHR-1 を動作さ
せるプログラムを作成した。『モーション再生』というボタンを表示させる Gamen.java と、
通信などを行う KHR1Commander.java という構成になっており、main クラスが記述され
ている Gamen.java を実行し、『モーション再生』ボタンを押す事により、
KHR1Commander.java 内の情報を呼び出す仕組みとなっている。モーション CSV ファイ
ルの内容を変えるか、他に作成したモーション CSV ファイルの名前を本プログラム内で設
定している『モーション.csv』という名前に変える事によって、作成したプログラムの内容
28
を変えずに KHR-1 を動作させる事ができるが、Gamen.java には『モーション作成』とい
うボタン1つしかないため、一度に1つのモーション設定しかできず、ボタンを作成する
意味を成していない。そこで Gamen.java で複数のボタンを作成し、前進や横歩きなど様々
なモーションを呼び出せば、より実用性を増すのではないかと思われる。
29
第5章 まとめ 本論文では KHR-1 の性能、HeartToHeart の構成、KHR-1 と KHR-2HV の違いについ
て理解を深めた。そして RS232C を使ってパソコンと KHR-1 を接続し、モーションファイ
ルを KHR-1 に送信し、実際に KHR-1 を動作させる JAVA プログラムの研究を行った。 今回の研究の問題点は、サーボの起動中にブルブルと震える(ハンチング)症状が頻繁
に起きることである。その原因とされるのは、サーボが受け取った信号に対しての位置に
出力軸を固定しようとする。これは、サーボの信号を変化させなくても、現在の位置を保
持しようとするために働く力が働くためである。 サーボ自体のトルクが負荷に対して小さければ、ハンチングは発生しないので、もっと
も有効といえる対策がサーボのゲイン切り替えを行うことである。
30
参考文献 [1] KHR‐1. http://www.kondo-robot.com/html/Product_main.html [2] サーボモータ http://www.kondo-robot.com/html/Products_Servo.html [3] RCB-1 ソフトウェア操作説明書 http://www.kondo-robot.com/pdf/RCB-1Softwaremanual1R3.pdf [4] RCB-1 http://www.kondo-robot.com/product/board.html [5] JAVA http://jp.sun.com/java/ [6] CommunicationAPI http://java.sun.com/products/javacomm/index.html
31
謝辞 勉学から生活分野まで幅広くお世話になりご指導いただいた花川典子氏に感謝します。 研究においてご協力いただいた本学の大学院生の呉振宇氏に感謝します。 研究においてご協力いただいた本学卒業生の白川仁志氏に感謝します。 研究においてご協力いただいた本学卒業生の南里昭好氏に感謝します。