JAVA プログラムによるロボットの動作制御 2009 年 1 月 30 日 阪南大学 経営情報学部 経営情報学科 宮本佳美 山城優季 1 花川ゼミ 目次 目次 ...................................................................................................................................... 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章 3.1 第4章 KHR‐2HV ...................................................................................................... 16 KHR‐1 と KHR‐2HV の比較.................................................................... 16 動作プログラム................................................................................................. 18 4.1 JAVA ............................................................................................................. 18 4.2 CommunicationAPI のインストール............................................................ 18 4.3 作成した JAVA プログラム ........................................................................... 18 4.4 考察 ............................................................................................................... 27 第5章 まとめ ............................................................................................................... 29 参考文献 ............................................................................................................................. 30 2 第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章では、本論文の結論と今後の課題について述 べる。 3 第2章 2.1 2足歩行ロボット(KHR‐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 4 2.2 サーボモータ サーボモータ(図 3 参照)[2]とは、回転の角度などを制御できるモータのことである。 一般的なモータは、電源を入れると常に回転し続けるが、サーボモータでは入力される信 号によって制御が可能である。サーボモータの中には、モータや制御基板、ギア、ポテン ショメーター(可変抵抗)が入っている。ポテンショメーターによってモータの回転角度 を検出し、フィードバックをかけることで、回転角度を制御するしくみになっている。 2足歩行ロボットでは、サーボモータの数を軸や自由度と呼ぶ。例えば17自由度(軸) のロボットではサーボモータが17個使われていることとなる。なお、サーボモータは制 御方式によって、アナログ方式とデジタル方式に大別できるが、KHR シリーズでは高性能 なデジタル方式のサーボモータが使われている。 サーボモータのスペックの中でも、とくに重要なのがトルクとスピードである。トルク は物体を回転させる力のことで、この数値が大きいほど力が強いこととなる。スピードは 回転速度を表し、数値が大きいほど高速な動きが可能となる。サーボモータにはトルク重 視とスピード重視があるが、2足歩行ロボットにはトルク重視がよく使われる。 サーボモータの構造は、動力源の小型 DC モータ1/150~1/200の減速比を持つ平 歯車による歯車減速装置、出力軸の角度変位を検出するポテンションメータ、モータ制御 用基板、保護ケースから構成されている。 図 3 サーボモータ 5 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 6 2.4 PC 接続用インターフェース KHR‐1 に搭載されているコントロールボードは、外部とデータをやり取りするために 高速シリアル端子と低速シリアル端子を備えている。この高速シリアル端子とパソコンを 接続するのに使われるのが、ICS-PC インターフェースⅡやシリアル USB アダプタである。 これらを経由してパソコンとコントロールボードを接続し、モーション作成ソフトを利用 して、モーションの作成やコントロールボードへのモーションの転送を行う。 KHR-1 に標準で付属している通信用ケーブルが ICS-PC インターフェースⅡである。 ICS-PC インターフェースⅡは、パソコンのシリアル端子(RS-232C 端子)と高速シリア ル端子を接続するためのアダプタだが、シリアル端子は非常に古い仕様のインターフェー スであり、最近のパソコンはシリアル端子を装備していない製品が主流になってきている (特にノートパソコン)。シリアル端子を装備していないパソコンの場合、USB-シリアル 変換機アダプタを利用することで、ICS-PC インターフェースⅡを使えるようになる。本研 究では、下図の RS232C と USB‐シリアル変換機アダプタを用いた。 USB‐シリアル変換機アダプタ 図 5 RS232C と USB‐シリアル変換機アダプタ 2.5 ソフトウェアの考え方 HeartToHerat では2足歩行ロボットの1つ1つの動作を積み上げていくことで連続し た動きを実現するように考えられている。1つの動作を作成するためにもポジション・モ ーション・シナリオをいう言葉を使用している。 (1) ポジション ポジションは、今現在のロボットの固定された姿勢を表すデータで、各サーボの位置に よってデータは異なる。ポジションを作成するためには、HeartToHeart 上のスライドバー を使用してサーボの位置を設定するか、教示機能によるデータをキャプチャーし表す方法 7 がある。 教示機能とは、サーボモータの回転位置を、モーション作成ソフト側で取り込む機能の ことである。サーボモータを脱力させた状態で、手でロボットの関節を動かし、そのポー ズを記録することも可能である。通常サーボの位置を決めるために、信号をサーボに送り その結果により信号を増減するという作業の繰り返しで行っている。つまり、制御のため の信号の流れは常に一方通行である。これに対して、サーボモータ KRS-786ICS はポジョ ンキャプチャー機能を持っている。特定の信号に対してサーボは、現在の位置をデータと して返してくる。またある特定の特殊な状態として入力された信号によって、サーボをフ リーの状態にすることが可能になっている。教示機能では、指定したサーボをフリーにし、 その出力軸を直接うごかすことによってサーボ位置を決め、決定後にコマンドを送って現 在のサーボ位置を知ることで制御信号を決定する。教示機能は設定により様々な使用方法 が可能である。たとえば、全身を脱力させ教示する方法や、右手だけ、左足だけ、といっ た一部分だけの教示を行うことも可能である。 (2) モーション モーションは、連続したポジションデータの集まりである。ポジションからポジション へ移り変わることによって1つの動きに見え、またその間の動きのスピードは7段階に調 整することができ、自動的に補完される。RCB-1 は1つのモーションに100のポジショ ンを記録することができ、モーションデータは40まで記録が可能である。 (3) シナリオ ロボットに様々な動きをさせる場合にその都度モーションを指定して動作することもで きるが連続した動きをする場合はシナリオを使用する。たとえば、前進動作の後に元の位 置までもどるため、後退動作を入れるなどモーションとモーションをつなぎ合わせること をシナリオ作成という。1つのシナリオにモーションデータを200個まで指定すること ができ、シナリオは4つまで RCB-1 に転送できる。 (4) ホームポジション 初期設定の中で一番時間を費やすのが、ホームポジションと呼ばれる設定である。ホー ムポジションとは、データが未入力時にロボットが直立した状態(図 6 参照)[3]の時のこ とを指す。すべての動作はこのホームポジションを基点として動作し、サーボに負荷が大 きくかかる状態だと動作時間が短く効率は悪くなる。 8 図 6 ホームポジション (5) HeartToHeart の詳細 KHR-1にはその姿勢制御、そして動作のためにラジコンカーの車輪の動作させるために 使用されているラジコンサーボを使用しており、各サーボ1つ1つにチャンネル番号(以 下 CH)が振り分けられている。これらを HeartToHeart により、初期設定角度トリム設定、 そして任意の位置にサーボを稼動させることが可能である。例として、右腕を頭の上に乗 せる動作をさせたい時には、CH4 のサーボを 0 度に、CH5 のサーボを 180 度に、CH6 の サーボを 0 度にというように設定する。 また、HeartToHerat では他にも、設定したサーボ位置を連続して稼動させ、歩行や前転、 腕立て伏せといった人間と同様の動きをさせることが可能である。また、さらにそれらを 組み合わせて再生させる、シナリオデータの作成も行うことができる。そしてこれを KHR1に装着された基盤に転送する機能も備えている。そしてそれらで作成したデータは主に CSV ファイルとして保存され、Microsoft Office Excel によって編集することも可能である。 以下に HeratToHeart の操作の詳細を説明する。 ① I. メインウインドウ(図 7 参照)の構成 シンクロ設定:現在設定しているサーボデータを RCB-1 にリアルタイムに反映させ るための機能である。図の右上の SYNC が設定箇所となる。OFF 時の場合の更新は 行われない。ON 時の場合のみ更新が行われる。 II. スピード設定:現在のデータへ RCB-1 のポジションデータが変更されるとき、変化 9 するスピードを設定する。図の 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. データの上書き:モーションデータ編集ウインドウの選択されているデータを、現 在のメインウインドウのデータで上書きする。元のデータは消える。 10 図 7 HeartToHeart のメインウインドウ ② モーション編集の構成(図 8 参照) I. 新規作成:新規データファイルを作成。現在、表示されているデータは消去され る。 II. ファイルを開く:データファイルを読み込む。 III. ファイルへ保存:データファイルに保存する。 IV. 元に戻す:変更されたデータを1つ前の状態に戻す。 V. コピー:選択されたデータをコピーする。 VI. 切り取り:選択されたデータを切り取る。 VII. 貼り付け:コピーまたは、切り取ったデータを貼り付ける。 VIII. 書き込み:現在編集中のデータを、RCB-1 の「データナンバー指定」で設定した 番号に書き込む。 IX. 読み込み:RCB-1 のデータを読み込みます。読み込むモーションの番号は「デー タナンバー指定」で設定。 11 X. データ削除:「データナンバー指定」で設定した RCB-1 のデータを削除。 XI. データ再生:「データナンバー指定」で設定た RCB-1 のデータを再生。 XII. データナンバー指定:RCB-1 の作業対象のモーションデータ番号を指定。 XIII. 編集:データウインドウ内で選択しているデータをメインウインドウにコピーす る。同じことは、データウインドウ内でデータをダブルクリックしても行える。 XIV. 挿入:新規ポジションデータを挿入する。 XV. データ削除:選択しているポジションデータを削除する。 図 8 モーションデータ編集ウインドウ ③ シナリオデータ編集の構成(図 9 参照) I. モーション一覧読み込み:RCB-1 内メモリのモーションデータの状況を読み込ん でモーションデータ一覧に表示。 II. 新規作成:新規データファイルを作成する。現在、表示されているデータは消去 される。 III. ファイルを開く:データファイルを読み込む。 IV. ファイルを保存:データファイルに保存する。 V. 元に戻す:変更されたデータ表示幅を元に戻します。 12 VI. コピー:選択されたデータをコピーする。 VII. 切り取り:選択されたデータを切り取る。 VIII. 貼り付け:コピーまたは、切り取ったデータを貼り付ける。 IX. データを下へ:シナリオデータに表示しているデータで選択しているものを下へ 移動する。 X. データを上へ:シナリオデータに表示しているデータで選択しているものを上へ 移動する。 XI. データ削除:選択しているモーションデータをシナリオから削除します。 XII. 書き込み:現在編集中のシアリオデータを、「データナンバー指定」で設定した番 号に書き込む。 XIII. 読み込み: 「データナンバー指定」で指定した番号のシナリオデータを、RCB-1 か ら読み込む。 XIV. データ削除:選択しているシナリオデータ内のモーションを削除する。 XV. データ再生:「データナンバー指定」で設定した RCB-1 のデータを再生します。 XVI. データナンバー指定:RCB-1 の作業対象のデータ番号を指定する。シナリオは S0 ~S3 の 4 個が使用できる。 13 図 9 シナリオデータ編集 14 以上では、HeartToHeart の画面構成を説明した。次に初期設定からモーション作成までの 流れを説明する。 ④ 初期設定 まず初めに、2足歩行ロボットを動かす前に初期設定を行う必要がある。初期設定だと、 図 10 の右のような状態になるためサーボに大きな負荷がかかる。そのためホームポジショ ンを設定しなければならない。ホームポジションを設定すると図10の左のような状態に なる。この状態だと重心が本体中心に近くまた、サーボにかかる負荷が少なくなる。 図 10 初期状態とホームポジション[3] ⑤ データ入力 次にデータ入力を行う。まず、メインウインドウを表示し、KHR-1 に電源を入れ起動する と、ロボットは設定されたホームポジションで自立する。このとき、メインウインドウの サーボの値はホームポジションの値ではないので RCB-1 からホームポジションを取得する。 次に、モーション編集ウインドウを開き、メインウインドウのデータ追加をクリックする と、モーション編集ウインドウにホームポジションのデータが追加される。メインウイン ドウでサーボの値を変えながらポジションを設定し、モーションに必要なデータを追加し ていく。 この流れを繰り返すとモーションを作り上げることができる。 15 第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 KRS-788HVICS REDVersion REDVersion サーボモータのトルク 8.7kg・cm 10.0kg・cm とスピード 0.17sec/60° 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 図 12 RCB-3J RCB-1 また、インターフェースが RS232C から USB に変更され、バッファに空きがあれば ACK を、なければ NAK を即座に返すというフロー制御をプロトコルが行っているため、ハード 16 ウェアフロー制御用の信号線が必要なくなった。 17 第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 メソッドでコマンドを受信し 18 やすくする。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 参照) 19 図 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 メソッド 20 で設定している。(図 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 変数の値を配列 21 に入れる役割と、ポジション書き込む役割を行っている。要素は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 参照) 22 図 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 参照) 23 図 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つの値を足した値から MSB 1ビットを引いた値を入れる。これはデータを送受信する際の誤り検出(チェックサム) の為に使用している。(図 22 参照) 図 22 motion_data メソッドの設定 (8) motion_number メソッド motion_number メソッドは KHR-1 と通信しており、シナリオデータに含まれるモーシ 24 ョンの数を指定するメソッドである。要素は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つの値を足した値から MSB 1ビットを引いた値を入れる。これはデータを送受信する際の誤り検出(チェックサム) の為に使用している。(図 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 参照) 25 図 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 参照) 26 図 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』という名前に変える事によって、作成したプログラムの内容 27 を変えずに KHR-1 を動作させる事ができるが、Gamen.java には『モーション作成』とい うボタン1つしかないため、一度に1つのモーション設定しかできず、ボタンを作成する 意味を成していない。そこで Gamen.java で複数のボタンを作成し、前進や横歩きなど様々 なモーションを呼び出せば、より実用性を増すのではないかと思われる。 28 第5章 まとめ 本論文では KHR-1 の性能、HeartToHeart の構成、KHR-1 と KHR-2HV の違いについ て理解を深めた。そして RS232C を使ってパソコンと KHR-1 を接続し、モーションファイ ルを KHR-1 に送信し、実際に KHR-1 を動作させる JAVA プログラムの研究を行った。 今回の研究の問題点は、サーボの起動中にブルブルと震える(ハンチング)症状が頻繁 に起きることである。その原因とされるのは、サーボが受け取った信号に対しての位置に 出力軸を固定しようとする。これは、サーボの信号を変化させなくても、現在の位置を保 持しようとするために働く力が働くためである。 サーボ自体のトルクが負荷に対して小さければ、ハンチングは発生しないので、もっと も有効といえる対策がサーボのゲイン切り替えを行うことである。 29 参考文献 [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 30 謝辞 勉学から生活分野まで幅広くお世話になりご指導いただいた花川典子氏に感謝します。 研究においてご協力いただいた本学の大学院生の呉振宇氏に感謝します。 研究においてご協力いただいた本学卒業生の白川仁志氏に感謝します。 研究においてご協力いただいた本学卒業生の南里昭好氏に感謝します。 31
© Copyright 2024 Paperzz