39
2012 年度 iRobot Create の拡張 指導教員 白井英俊 教授 中京大学 情報理工学部 情報知能学科 学籍番号 H209015 蒲 恵太 (2012 12 )

iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

2012 年度

卒 業 論 文

iRobot Create の拡張

指導教員 白井英俊 教授

中京大学 情報理工学部 情報知能学科

学籍番号 H209015 蒲 恵太

(2012 年 12 月)

Page 2: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

卒業論文要旨

題目 iRobot create の拡張

学籍番号 H209015 氏名 蒲 恵太 指導教員 白井 英俊

本研究は iRobot 社から発売されている iRobot create の機能拡張を目的とし

たものである。この iRobot create を題材にした動機は、白井研究室のゼミで自

走式ロボット Boe-Bot について学習したことにある。この Boe-Bot は各種セン

サーを組み込むことで機能を拡張できる。しかし使用しているメモリーの都合

上あまり大きなプログラムを扱うことができず、本体自体の大きさと使用する

モーターの能力によって、それに搭載可能な部品には限界があった。また、通

信の精度も低くいために双方向のデータのやりとりでノイズが乗ってしまうこ

とが多かった。それに比べ今回扱った iRobot create は最初から衝突センサー、

赤外線が内蔵されており、専用のパーツを取り付けることで容量の大きなメモ

リーを付けることができる優れたロボットである。また本体のサイズが大きく、

モーターも力が強いため、Boe-Bot では難しかった外部パーツの取り付けも可能

である。本研究では iRobot create の機能拡張のためにハードウェアではロボッ

トアームの搭載を行い、ソフトウェアでは iRobot create とロボットアームの制

御を行った。 iRobot create の本体の改造などの作業もあわせた結果として、Bluetooth に

よる遠隔操作が可能となった。また、アームを制御するプログラムと iRobot create をユーザーからの命令で制御する統括プログラムまで完成することが出

来た。実際に小さな物体を掴み、運搬することも可能となっている。課題とし

て残ってしまった部分は操作が難しいこと、iRobot create からの情報を反映出

来ていないことが挙げられる。

Page 3: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

目次 第一章 はじめに ...................................................1

第二章 研究背景 ....................................................3

2.1 ルンバについて ................................................3

2.2 iRobot create .................................................4

2.3 ロボットアーム ................................................5

第三章 開発 ........................................................7

3.1 アームの運用のために ..........................................7

3.1.1 操作プログラムの説明 .....................................8

3.1.2 取り付けにおける変更 .....................................9

3.2 iRobot create の運用のために ...................................9

3.3 プログラムの製作 .............................................10

3.3.1 アーム用のプログラムと制御 .............................10

3.3.2 クリエイト用のプログラム ...............................11

3.3.2 統括プログラム .........................................11

第四章 結果 .......................................................13

4.1 アームについて ................................................13

4.2 iRobot create について .......................................13

4.3 ソフトウェアについて .........................................13

第五章 考察と改良点 ...............................................15

5.1 アームについて .............................................15

5.2 iRobot create について .....................................15

5.3 プログラムについて .........................................16

5.3.1 ルンバへの転用 .......................................16

5.3.2 アイフォンやアンドロイドでの制御 .....................18

第六章 まとめ .....................................................19

参考資料・文献 .....................................................20

謝辞 ...............................................................21

付録 操作プログラム例(command.rb,cotrall.rb) ......................22

Page 4: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

2

第一章 はじめに

我々が在籍した白井研究室のゼミでは自走式ロボットである Boe-Bot を題材

に、ハードウェアやソフトについて学んでいる。この Boe-Bot は各種センサー

を組み込むことで機能を拡張することが出来るが、使用しているメモリーが大

きくないため、あまり複雑なプログラムを作成することができない。また本体

の大きさや搭載しているモーターに制限があるため、本体に載せられるパーツ

には限界があった。それに対し本研究の対象とした iRobot create は、衝突セン

サーや赤外線が始めから内蔵されている上にロボットアーム等を搭載出来る程

の力と頑丈さを兼ねている。我々がゼミで学んだことを応用し、技術や知識を

磨くには最適なロボットと考えた。

この iRobot create の機能をさらに高めるために、ハードウェアとソフトウェ

アの両面での拡張を検討した。ハードウェア面ではロボットアームを iRobot

create に搭載することで、移動や音を鳴らす以外の動作を可能とすることを考

えた。ソフトウェア面ではまず、人間が iRobot create をリモコン操作するため

のプログラムを作り、その後人間の介在なしに自律的に動くためのソフトウェ

アの開発を構想した。

結果、ハードウェア的にはアームを取り付けることで移動、物を掴む、持ち

上げるといった簡単な動きが可能となった。問題点としては持ち上げられる物

体が小さく、軽い物に限られてしまうという点である。ソフトウェア的にはア

ームを受けた命令によって動かすプログラムとユーザーからの命令を受け取り、

クリエイトの制御とアーム用プログラムへ命令を出す統括プログラムが完成し

たが、完成時期が遅かったこともあり操作性やボタンの配置等問題点が多い。

本論文の構成は以下のとおりである。

第二章では本研究で扱っている iRobot create とその製品版であるルンバ、

iRobot create について紹介する。また、iRobot create に搭載する青島文化教材

社のロボットアームと遠隔通信に用いた Arduino についても述べる。

第三章では iRobot create,ロボットアーム,操作用のプログラムの開発と改造

について述べる。ロボットアームの部分では制御に使われるプログラムの説明

Page 5: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

3

と iRobot create に搭載するために改造した点について説明する。iRobot create

については、ロボットアームを搭載するために加えた改造や、BlueTooth での

通信に用いたパーツの説明をする。プログラムは、遠隔操作に実現するための

手順とプログラムの概要を説明するが、実際のプログラムにはおまけとして乗

せる。

第四章では前節で述べた iRobot create,ロボットアーム 操作用プログラム

の現在出来ることと課題として残った部分を説明し、第五章でその課題の解決

方法と更なる展望について述べる。第六章では研究内容を総括し、将来への展

望について議論する。

Page 6: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

4

第二章 研究背景

本研究は iRobot 社がクリエイター用に提供している iRobot create(以降、「ク

リエイト」と呼ぶ)を主題としている。クリエイトは一般向けに市販されてい

る家庭用全自動掃除機「ルンバ」をクリエイターが操作出来るように開発され

たものである。本章では前提となる知識として一般向けのルンバについての概

要とその機能について説明する。クリエイトについては一般向けのルンバとの

差について説明する。さらにクリエイトには青島文化教材社のロボットアーム

を載せたが、これについてもアームに使用されているモーターと基盤を中心に

紹介する。

2.1 ルンバ

ルンバは iRobot 社1の代表的な商品であり、今や日本でも有名な家電の一つで

ある。発売は 2002 年でそれ以降、新型や改良型が沢山開発されており、2012

年の現在では 780 型が発売されている。

ルンバの基本的な機能は部屋を走り回ってゴミを吸い込む(掃除する)こと

であるが、一般的な掃除機と異なり人間が掃除機を動かして掃除をする必要が

ないという特徴がある。また、「全自動」の名称が示すように充電場所に自動的

に戻る機能やゴミをセンサーで見る機能、赤外線センサーや衝突感知センサー

により段差を感知して落ちないようにする機能などが組み込まれている。この

ように多様な機能を持ったルンバであるが、その移動アルゴリズムは実に単純

であり、基本的には円を描きながら少しずつその円を大きくする様に動く。ル

ンバの衝突検知と方向転換の仕組みは、基本的に学習研究社の「大人の科学」

33 号付録の卓上ロボット掃除機でも実現されているものである。

1 iRobot 社(アイロボット・コーポレーション)は軍事用から家庭用まで様々なロボット

の設計、開発を行っている企業である。

Page 7: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

5

図 2.1 ルンバ

図 2.2 クリエイト

2.2 iRobot create(クリエイト)

クリエイトは 2.1 節で紹介した一般向けのルンバをベースにクリエイター向

けに作られている。一般向けのルンバではカバーで隠されている miniDIN 等の

接続口がクリエイトでは外部に露出しており、また掃除機としての機能が取り

払われている。一般的な掃除機から掃除機能を取り除いてしまうとそれは単に

重りのついた杖でしかないが、ルンバには衝突検知をはじめとした各種センサ

Page 8: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

6

ーに加え、専用のモジュールを取り付けることでその動作をプログラムするこ

とが可能であり、ロボット研究に役立つものとのなっている。

2.3 ロボットアーム

本研究では、クリエイトの機能拡張の一つとしてロボットアームの実装を考

えた。使用したロボットアームは青島文化教材社から発売されているロボット

アームにオプションであるアームハンドを加えて使用している。このロボット

アームは基盤 KHR-1 から配線で繋がったモーターKRS-788HV ICS Red

Version を5つ使用する、可動部五点のアームである。5 つのモーターは基盤か

らの電圧によって 180 度の範囲で右回転と左回転を行う。基盤には小さなメモ

リーが搭載されており、アームの形からモーターの状態を取得することも可能

である。またオプチョンアームハンドによってロボットアームは空のペットボ

トル程の重さの物体ならば持ち上げることが可能となっている。

図 2.3 ロボットアーム

Page 9: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

7

図 2.4 KHR-1

2.4 Arduino

AVR マイコン、入出力ポートを備えた基板、Arduino 言語とそれの総合開発

環境から構成されるシステムであり、今回のロボットアームを制御するために

使用した。

!!!!Arduinoには最初からサーボモータを制御するための文法が存在して

いる。

!!!!Arduino によるサーボの制御は数字を使う

Page 10: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

8

第三章 開発

本章では本研究で行った改良をアーム、クリエイト、プログラムの三つに分

けて説明する。

3.1 アーム運用のために

本研究で使用したアームは、コントロール基盤が外部からの制御信号を受け、

そこから 180 度の回転が可能な五個のモーターにそれぞれ制御信号を送ること

で、全体的に一つのアームシステムとして動くものである。

図 3.1 アーム全体図と各部名称

このコントロール基盤には簡易的なメモリーが搭載されており、シナリオデ

ータを送って自動で動かすこともできる。

Page 11: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

9

3.1.1 操作プログラムの説明

このアームには備え付けのプログラムがあるのでそれと合わせて動作の説明を

する。

図 3.2 アーム制御用プログラム HeartToHeart の操作画面

上の画像がアームとセットになっている制御用プログラム HeartToHeart の

操作画面である。PCと基盤 RCB-1 を USB ケーブルを使い直接接続すること

でアームを制御することができる。本研究ではプログラム内のチャンネル 8~12

をそれぞれのモーターに振り分け、そこへ信号を出すことでアームの制御を行

った。画像では土台、関節1等の名称がついているが、ここでの名前と色の設

Page 12: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

10

定は我々が行った。

3.1.2 取り付けにおける変更

図 3.1 からわかるように、アームにはかなり大きな土台部分がある。これはル

ンバにアームを搭載して動かすには邪魔な部品である。そこで土台パーツと土

台を動かすためのモーター、さらに電池ボックスを土台パーツから取り外して

駆動部のみをルンバに搭載した。

図 3.3 土台パーツを取り外したアーム本体

3.2 iRobot create の運用のために

本体にアームを取り付けるため、クリエイト上部に板を設置し、そこに図 3.3

のアームを取り付けた。アームを固定する板はプラスチック板を用いたが、強

度の関係から直接クリエイトにつけるのではなく、クリエイト上部に鉄板を付

け、その上にアームを固定したプラスチック板を設置した。

Page 13: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

11

図 3.4 クリエイトとその上に取り付けたアーム

また、PCから Bluetooth での通信を行うためにパーツ RooTooth v2 を本体

側部に取り付けている。これはクリエイトだけでなく一般的なルンバにも取り

付けることが出来る。

図 3.5 ルンバの Bluetooth 通信用機器 v2

3.3 プログラムの制作

3.3.1 アーム用のプラグラムと制御

初期のアーム用のプログラムと制御は基盤 RCB-1 の同じ製造会社の製品の

Page 14: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

12

KBC-1 を用いての遠隔操作をしようと試みた。Bluetooth 名称の設定、および

KBC-1 とPCとの通信には成功したが、基盤 RCB-1 への出力が上手くいかなか

った。製造会社に問い合わせたところ、「その基盤には対応してない」という返

答が返ってきた。そこで今回は Arduino を使って制御している。

制御の手順は、通信によって送られてきた一文字をケース文で判断して対象

とするサーボモータとサーボモータに送る数字を変えるという仕組みになって

いる。

3.3.2 クリエイト用のプログラム

クリエイトへの命令は、PCのシリアルポートからBluetooth経由で通信する。

クリエイト側は専用のCPUで動いており、外部からの命令もその規格にそっ

たもので行う。例として、クリエイトのランプを点滅させるプログラムを示す。

require 'rubygems'・・・・・・・・・・・・・・・・①

gem 'serialport','>=1.0.4' ・・・・・・・・・・・・・②

require 'serialport'・・・・・・・・・・・・・・・・③

sp = SerialPort.new('COM7', 57600, 8, 1, 0) ・・・・④

sp.puts"¥x8B¥x08¥x00¥x80"・・・・・・・・・・・⑤

① ~③はシリアルポートを ruby で使うための宣言文である。①で

PC からの命令を送る

Arduino が命令を受け取る

命令によってサーボモータと

送る数字を決める

Page 15: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

13

rubygems ライブラリを呼び出し、②でそのバージョンの指定を行っている。③

では rubygems にある serrialport ライブラリをロードすることでシリアルポー

トを使えるようにしている。

④は PC とクリエイトとを USB を介してシリアル通信するための通信設定を

行なっている。詳しく述べると、PC ではポート番号の7(COM7)を使い、通信

速度は 57600[bps]、データビット長は 8bit、ストップビット長は 1 ビット、パ

リティーチェックは行わない(フロー制御なし)という設定である。

⑤がクリエイトへの命令であるが、ここに示したようにバイナリデータの形

で送信する。バイナリデータを表現するため 16 進数、ここでは”¥x”と数を組み

合わせて表現している。なおマニュアルには 10 進表記されているため、

change16.2 という 10 進数を 16 進数に変換し、文字列として返す関数を作成し

た。この例ではクリエイトに送信した命令は"¥x8B¥x08¥x00¥x80"であり、こ

れは 10 進数に直すと[128,139,8,0,128]である。これはそれぞれに意味があり

[128]・・・壱

[139]・・・弐

[8,0,128] ・参

と分けることが出来る。

壱の部分はクリエイトのスタートコマンドである。クリエイトに何かしらの

命令をするにはまずこのコードを送る必要がある。また、後述のモードにも関

係してくる重要なコマンドである。

弐の部分は命令文の宣言であり、クリエイトが次にする行動を示している。

また、参で使われている数字はここで宣言されたコマンドによって数や値の意

味が異なってくる。

参は弐で宣言されたコマンドを実行する際に必要な数字を示している。今回

は[光らせるライトの位置,ライトの色,光の強さ]の三つを示している。

上記のようなプログラムが必要とされるため、今回の様に直接命令を書き込

んでいては手間が掛かりすぎてしまう。そこで今回はヘッダーファイルを作っ

ておき、そこに命令をハッシュに格納する関数を用意した。

3.3.3 統括用プログラム

Page 16: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

14

統括用のプログラムには、私が扱いなれている ruby を選んだ。仕組みとして

は、入力した文字によってアームまたはクリエイトを動作させるものとなって

いる。

コマンド例 実際の動作 コマンド例 実際の動作

q アームの先端を閉じる i クリエイトを直進させる

w アームの先端を開く m クリエイトを停止させる

アームとクリエイトは別々のポートが割り当てられている。プログラム内で

は二か所のポートをアーム、クリエイトに設定し、ユーザーからの入力によっ

て Bluetooth を通してどちらのポートにどの命令を出すかを決めている。

クリエイトに対して命令を出す場合はそのままポートに対して16進数の数字

を送るために変換作業をしている。

アームに対して命令を出す場合は、一度 Arduino に命令を受け取らせ、アー

ム内部のプログラムにもう一度受け取った命令を判定させている。命令の判定

が統括プログラムがユーザーからの命令を判定し、アーム内部のプログラムが

統括プログラムからの命令を受け取るため二度行われている。これは今回は行

わなかったが、より複雑な命令を送り出す時にノイズや通信によって動作に影

響が出ないようにするためである。

Page 17: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

15

第四章 結果 本章では三章で述べた改良を試みたうえでの現状とこれからの課題について

説明する。

4.1 アームについて

ハードウェア的にはルンバに搭載することが出来たので完成とする。制御に

関してもモーターへの命令によりアームを動かすことは成功している。遠隔操

作も実現できたために本研究での目標は達成できたと考えるが、

① アーム自身の能力、クリエイトの自重の関係で持ち上げることが出来る

重さ、大きさに制限がある

② 操作がサーボモータと数字を指定するものとなっており、感覚的な操作

が出来ない

という問題がある。

4.2 iRobot create について

上記と同様に本体の改装はアームの取り付けが出来ており、BlueTooth での

通信も成功している。しかし、後述の五章で述べるように、既存のプラットフ

ォームを生かした更なる発展は十分可能である。以上からクリエイトにおいて

は発展の余地は多いが完成とする。動作としては移動、音を鳴らす、LEDを

点灯させる事が可能になった。課題としては

① センサーの値を受け取ることが出来ない

が挙げられる。

4.3 ソフトウェアについて

遠隔操作でのアーム、クリエイトの制御は成功している。問題となっている

箇所は

① 完成したプログラムが使いにくい ② アームの稼働域を想定した制御が出来ていない という課題が残っている。

Page 18: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

16

第五章 考察と改良点

プログラムは本研究の中で最も多くの課題が見つかった部分である。今回は

活用することの出来なかった内臓のプログラムやクリエイト自体にプログラム

を組み込むことで動きを複雑にする等、多くの余地が残されている。以下、こ

れから取り組みたい方向について説明する

5.1 アームについて

ここではアームで実現可能なこと、これからの一か月で取り組めることを述

べる。今ある課題は、アームは USB ケーブルを通した PC からの操作しか実現

しておらず、クリエイトに搭載してクリエイトと同様にアームを自由に動かす

ことができない点である。これは制御に使われている基盤 KHR-1 が通信用とし

て購入した KBT-1 に対応していなかったためである。KBT-1 に関してはペアリ

ング、アームロボットへと装着には成功していたが、未対応の KHR-1 との通信

に失敗しており、他の手段を探す必要がある。現在は Bluetooth と XBee(ジグ

ビー)での通信を考えており、実現次第クリエイトに掲載しての遠隔操作を実現

したい。

これからの展望の参考として既存のプラットフォームであるタートルボット

を挙げる。タートルボットはクリエイトとマイクロソフトのゲーム機である

Xbox 360 で用のモーションセンサ Kinect、軽いノート PC、ジャイロセンサで

構成されたプラットフォームである。本研究では実現出来なかった自律走行を

キネクトによる画像処理やジャイロセンサを使って実現しており、このプラッ

トフォームに本研究で使用したアームを取り付けることで、目視ではなくロボ

ットから送られてくる画像でアームの操作を行い、障害物を退けることや目の

前にある物体がある程度小さければ持ち上げて片づけるといった機能も付ける

ことが出来る。

5.2 iRobot create について

iRobot create の形については現状を完成としている。しかし、更なる発展の

Page 19: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

17

構想はある。本研究ではあまり参照していないが、クリエイトにノートPCと

キネクトを掲載して動かすタートルボットというプラットフォームが存在する。

キネクトを搭載することでカメラから外界を認識し、ノートPCを搭載するこ

とで複雑な処理を行うことも可能となっている。この様に、クリエイトは他の

自走式のロボットに比べてある程度の物なら乗せて走れるパワーがあり、今回

搭載したアームはかなり軽いもののため、更なる機能の拡張が期待できる。

5.3 プログラムについて

プログラムは本研究の中で最も多くの課題が見つかった部分である。今回は

活用することの出来なかった内臓のプログラムやクリエイト自体にプログラム

を組み込むことで動きを複雑にする等、多くの余地が残されている。以下、こ

れから取り組みたい方向について説明する

5.3.1 ルンバへの転用

本研究にあたり、クリエイトのみではなくルンバ 5.0(以下製品版)も用いた。

クリエイトのみではなくルンバにも対応したプログラムが作れれば、BlueTooth

用の器材と PC を揃えるだけで誰でもロボット用のプログラム開発に取り組む

ことが出来ると考えたからである。現在ある資料の上ではルンバを外部からの

命令で動かす場合のプログラムはクリエイトのプログラムとある程度同じにな

っている。現に Bluetooth での通信は確認しており、実際に命令の確認と動作

も出来ている。しかし、どのような命令を送っても違った一つのプログラムが

実行されてしまうという問題がある。クリエイトでのプログラムをそのまま市

販のルンバで活用するためにはまだまだ知らなくてはならないことが多いよう

だ。

製品版ルンバとクリエイトのプログラムの違いについて述べると、外部から

の命令を受け取るプログラムが両方に搭載されており、製品版は無料配信され

ているスマートフォン用のアプリも Roomba touch driver を使うことで動作の

確認をした。その際、製品版の MIN-SD は外装の内部にあるためパーツを一部

外している

Page 20: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

18

図 5.1 ルンバ 5.0 内部

殆ど同じプログラムがクリエイトにも入っているはずなのだが、アプリでの

動作は確認出来なかった。その逆に、クリエイトでは実現した BlueTooth によ

る PC からの遠隔操作プログラムが上手く動作しなかった。実際には

require 'rubygems'

gem 'serialport','>=1.0.4'

require 'serialport'

sp = SerialPort.new('COM7', 57600, 8, 1, 0)

sp.puts"¥x80¥x89¥xFF¥x38¥x01¥F4"・・・・①

というプログラムを送った場合を例にあげる。これはクリエイトに対してラジ

アン 50mm、秒速 200mm で動作させる命令なのだが、製品版にこれを送った

場合には望んでいた動作をしなかった。命令に対しての反応はあり、命令通り

ではなかったが動作はしたが、そのまま掃除を開始してしまった。しかし、①

の部分を

sp.puts"¥x80¥x89¥xFF¥x38¥x80¥00"・・・・②

とすると動かなかったのである。②はラジアンを 32768mm に設定してあり、

ほぼ直線を描いて動くものとなっている。この二つの違いから、命令の差を理

解しての動作が行われているようだが、詳細はこれからの研究で解明していき、

ルンバにも転用出来るようにしたい。

Page 21: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

19

5.3.2 アイフォンやアンドロイドでの制御

先ほど出てきた Roomba touch driver をはじめ、android や iphane のアプリ

で製品版ルンバを制御するものがいくつか配信されている。近年は一般の人で

も簡単にアプリ開発を行えるようになってきており、基礎さえあれば様々な人

が操作用のアプリを開発出来るようになると考え、よりロボットが身近なもの

になっていく筈である。だが、視野には入れていたものの開発まで辿り着けな

かった。アプリ実現に向けてクリアしなければならない問題が二つある。スマ

ートフォンとの通信と命令の形式である。スマートフォンとの通信は BlueTooth

でのペアリングの問題であるため時間さえあればクリアできるが、命令の形式

はスマートフォンでの十六進数の扱い方と出力方法次第である。外付けのコネ

クタを経由して通信する方法もあるが、こちらはプログラム自体の作成、改変

が必要となり時間が必要である。実現した時の構想としては、スマートフォン

からクリエイトへ命令を送り、各種センサーの値を取得、表示できるようなも

のである。カメラの映像やバンパーの値を取得できれば操作の幅も広がる。

Page 22: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

20

第六章 まとめ

本研究では実現していないが、画像認識や処理を行う PC をそのままルンバに

乗せるプラットフォームが実現するなど、クリエイトにはまだまだ多くの可能

性がある。しかし日本では認知度が低く、あまり活発な研究が行われていない

ことは大変残念に思う。もっと多くの人が触れ、改良を加えていくことでさら

なる機能の拡張がなされていくだろう。

Page 23: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

21

参考資料・文献 株式会社 iRobot Corporation

iRobot create (3 月 15 日取得)

http://www.irobot.com/hrd_right_rail/create_rr/create_fam/createFam_r

r_projects.html

株式会社 近藤科学株式会社

KBT-1 (10 月 30 日取得)

http://kondo-robot.com/sys/kbt-1

株式会社 日本バイナリー株式会社

タートルボット(10 月 30 日取得)

http://www.nihonbinary.co.jp/Products/Robot/TurtleBot.html

Roomba touch drive(11 月 13 日取得)

http://www.appbrain.com/app/roomba-touch-drive/com.fl#descriptionsect

ion

Page 24: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

22

謝辞

本研究を行うにあたり、白井教授や中谷先輩、可知先輩にご指導いただきま

した。この場を借りて、お世話になった皆様にお礼申し上げます。ありがとう

ございました。

Page 25: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

23

付録1.command.rb

#! ruby -Ks

# require 'rubygems'

#gem 'serialport','>=1.0.4'

#require 'serialport'

#sp = SerialPort.new('COM7', 57600, 8, 1, 0)

def make_com(com)

#モードを変更する

com["start"] = "\x80"#開始またはパッシブモードへ

com["safe"] = "\x83"#セーフモードへ

com["full"] = "\x84"#フルモードへ

#パッシブモードで動くコマンド

com["song"] ="\x8C"#歌作成

#[歌の番号][音の数] [音階][音の長さ]×n

com["pause"] = "\x96"#ポーズ

#[0 or 1] 0 ならそのまま停止、1なら一つ前を止

める?

#セーフモードかフルモードで動くコマンド

com["led"] = "\x8A"#LED を付ける

#[ライト位置 1:adv,3:play][色(0-255)][光の強さ

(0-255)]

com["drive"] = "\x89"#動きます

#[速さ][速さ][ラジアン][ラジアン]

#速さ(-500 - 500)ラジアン(-2000 - 2000)これら

は分けて書く

com["wait"]="\x9B"#待機

#[時間]

com["dd"] = "\x91"#タイヤ操作

#[右タイヤ][右タイヤ][左タイヤ][左タイヤ]どれも

drive の速さと同じ

com["plays"] = "\x8D"#[歌の番号]

#song で指定した歌の番号

Page 26: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

24

com["waitt"] = "\x9B"#時間だけ止まる

#[時間]second/10

com["waitd"] = "\x9C"#距離で止まる

#[距離]mm

com["waita"] = "\x9D"#角度で止まる

#[角度]degrees

com["waite"] = "\x9E"#イベントで止まる

#[イベントナンバー]

com["script"] = "\x98"#スクリプト

#[スクリプトの長さ] {[コマンド]}×数

#コマンド例

com["straight"] = "\x89\x00\x64\x80\x00"#ゆっくり前進

com["straightb"] = "\x89\xFF\x9B\x80\x00"#ゆっくり後進

com["turnr"] = "\x91\xFF\x9B\x00\x64"#右周り

com["turnl"] = "\x91\x00\x64\xFF\x9B"#左周り

com["stop"] = "\x91\x00\x00\x00\x00"

print "コマンド読み込みました。\n"

end

=begin

16 進数メモ

16 -> 10 10 ->16

10=16 A0=160 | 10=A 110=6E 210=D2

20=32 B0=176 | 20=14 120=78 220=DC

30=48 C0=192 | 30=1E 130=82 230=E6

40=64 D0=208 | 40=28 140=8C 240=F0

50=80 E0=224 | 50=32 150=96 250=FA

60=96 F0=240 | 60=3C 160=A0

70=112 | 70=46 170=AA

80=128 | 80=50 180=B4

90=144 | 90=5A 190=BE

|100=64 200=C8

=end

付録2.Contrall.rb

#! ruby -Ks

Page 27: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

25

require 'rubygems'

gem 'serialport','>=1.0.4'

require 'serialport'

sp = SerialPort.new('COM7', 57600, 8, 1, 0)

require "C:/Users/h209015 kaba/Documents/ruby/comand.rb"

com ={}

make_com(com)

sp.puts com["start"]

sleep(1)

sp.puts com["safe"]

print "前進:f 後進:b 右折:r 左折:l 停止:s\n\n"

while(order = gets)

order = order.chomp

if(order == "f")

sp.puts com["straight"]

elsif(order == "b")

sp.puts com["straightb"]

elsif(order == "r")

sp.puts com["turnr"]

elsif(order == "l")

sp.puts com["turnl"]

elsif(order == "s")

sp.puts com["stop"]

else

break

end # if

end

付録 2.

#include <Servo.h>

Servo myservo,myservo2,myservo3,myservo4,myservo5;

Page 28: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

26

char inByte;

int servo[5] = {90,90,90,90,90};

void servoorder(int s1,int s2,int s3,int s4,int s5){

if(servo[0] > s1){

servo[0]--;

myservo.write(servo[0]);

} else if (servo[0] < s1) {

servo[0]++;

myservo.write(servo[0]);

}

if(servo[1] > s2){

servo[1]--;

myservo.write(servo[1]);

} else if (servo[1] < s2) {

servo[1]++;

myservo.write(servo[1]);

}

if(servo[2] > s3){

servo[2]--;

myservo.write(servo[2]);

} else if (servo[2] < s3) {

servo[2]++;

myservo.write(servo[2]);

}

if(servo[3] > s4){

servo[3]--;

myservo.write(servo[3]);

} else if (servo[3] < s4) {

servo[3]++;

myservo.write(servo[3]);

}

Page 29: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

27

if(servo[4] > s5){

servo[4]--;

myservo.write(servo[4]);

} else if (servo[4] < s5) {

servo[4]++;

myservo.write(servo[0]);

}

}

void setup() {

Serial.begin(9600);

myservo.attach(8);

myservo2.attach(9);

myservo3.attach(10);

myservo4.attach(11);

myservo5.attach(12);

servoorder(servo[0],servo[1],servo[2],servo[3],servo[4]);

}

void loop()

{

int t1 = servo[0];

int t2 = servo[1];

int t3 = servo[2];

int t4 = servo[3];

int t5 = servo[4];

int i;

if (Serial.available() > 0) {

inByte = Serial.read();

switch(inByte) {

case 'q':

servoorder(180,t2,t3,t4,t5);

break;

Page 30: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

28

case 'w':

if(t2 <= 170){

t2 += 5;

servoorder(t1,t2,t3,t4,t5);

}

se

break;

case 'e':

if(t3 <= 170){

t3 += 5;

servoorder(t1,t2,t3,t4,t5);

}

servo[2] = t3;

break;

case 'r':

if(t4 <= 170){

t4 += 5;

servoorder(t1,t2,t3,t4,t5);

}

servo[3] = t4;

break;

case 't':

if(t5 <= 170){

t5 += 5;

servoorder(t1,t2,t3,t4,t5);

}

servo[4] = t5;

break;

case 'a':

servoorder(i,t2,t3,t4,t5);

break;

case 's':

if(t2 >= 10){

t2 -= 5;

Page 31: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

29

servoorder(t1,t2,t3,t4,t5);

}

servo[1] = t2;

break;

case 'd':

if(t3 >= 10){

t3 -= 5;

servoorder(t1,t2,t3,t4,t5);

}

servo[2] = t3;

break;

case 'f':

if(t4 >= 10){

t4 -= 5;

servoorder(t1,t2,t3,t4,t5);

}

servo[3] = t4;

break;

case 'g':

case 'G':

if(t5 >= 10){

t5 -= 5;

servoorder(t1,t2,t3,t4,t5);

}

servo[4] = t5;

break;

case 'x':

servoorder(t1,160,t3,t4,t5);

break;

case 'X':

servoorder(t1,20,t3,t4,t5);

break;

case 'c':

servoorder(t1,t2,160,t4,t5);

Page 32: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

30

break;

case 'C':

servoorder(t1,t2,20,t4,t5);

break;

case 'v':

servoorder(t1,t2,t3,160,t5);

break;

case 'V':

servoorder(t1,t2,t3,20,t5);

break;

case 'b':

servoorder(t1,t2,t3,t4,160);

break;

case 'B':

servoorder(t1,t2,t3,t4,20);

break;

case 'y':

case 'Y':

t1 = 180;

t2 = 90;

t3 = 20;

t4 = 177;

t5 = 90;

servoorder(t1,t2,t3,t4,t5);

servo[0] = t1;

servo[1] = t2;

servo[2] = t3;

servo[3] = t4;

servo[4] = t5;

break;

case 'h':

case 'H':

t1 = 90;

t2 = 10;

t3 = 160;

Page 33: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

31

t4 = 10;

t5 = 90;

servoorder(t1,t2,t3,t4,t5);

servo[0] = 90;

servo[1] = 10;

servo[2] = 160;

servo[3] = 10;

servo[4] = 90;

break;

case 'n':

t1 = 90;

t2 = 90;

t3 = 90;

t4 = 90;

t5 = 90;

servoorder(t1,t2,t3,t4,t5);

servo[0] = 90;

servo[1] = 90;

servo[2] = 90;

servo[3] = 90;

servo[4] = 90;

break;

/*過去の servoorder の書き方での命令のまま

case 'p':

t1 = 90;

t2 = 10;

t3 = 160;

t4 = 10;

t5 = 150;

servoorder(t1,t2,t3,t4,t5);

servo[0] = 90;

servo[1] = 10;

servo[2] = 160;

servo[3] = 10;

servo[4] = 150;

for(int count = 1;count <= 2;count ++){

Page 34: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

32

for(;t3 >= 120;t3-=5){

servoorder(t1,t2,t3,t4,t5);

}

for(;t3 <= 160;t3+=10){

servoorder(t1,t2,t3,t4,t5);

}

}

break;

*/

case 'u':

for(;t3 <= 80;t3+=2){

servoorder(t1,t2,t3,t4,t5);

}

servo[2] = t3;

break;

case 'j':

for(;t4 >= 90;t4-=5){

servoorder(t1,t2,t3,t4,t5);

}

servo[3] = t4;

break;

case 'm':

for(;t2 >= 20;t2-=5){

servoorder(t1,t2,t3,t4,t5);

}

servo[1] = t2;

break;

default:

break;

}

}

}

付録 3.Perfectcontrol2.rb(統括プログラム)

#! ruby -Ks

Page 35: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

33

require 'rubygems'

gem 'serialport','>=1.0.4'

require 'serialport'

sp = SerialPort.new('COM7', 57600, 8, 1, 0)

sp2 = SerialPort.new('COM43', 9600, 8, 1, 0)

require "C:/Users/h209015 kaba/Documents/ruby/comand.rb"

com ={}

make_com(com)

text = "\n"

sp.puts com["start"]

sleep(1)

sp.puts com["safe"]

print " 前進:i\n"

print "左折:j 右折:k\n"

print " 停止:m\n"

print "アーム開く : 1 アーム閉じる : 2\n"

print "先端左 : q 先端右 : w\n"

print "第二関節左 : a 第二関節右 : s\n"

print "傾き左 : z 傾き右 : x\n"

print "土台 : 3 土台 : 4\n"

print "基本姿勢:5 構え:6 掲げる:7"

print "デモプレイ : o 音楽再生 : p\n\n"

print "ピックアップ:6 → 8 → 2 → 9 → 0\n"

print "現在のパフォーマンス = ",text,"\n\n"

while(order = gets)

order = order.chomp

case order

when "i" then

sp.puts com["straight"]

text = "roomba:前進"

# elsif(order == "")

# sp.puts com["straightb"]

Page 36: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

34

when "k" then

sp.puts com["turnr"]

text = "roomba:右旋回"

when "j" then

sp.puts com["turnl"]

text = "roomba:左旋回"

when "m" then

sp.puts com["stop"]

text = "roomba:停止"

when "1" then

sp2.puts "q"

text = "arm:アーム開く"

when "q" then

sp2.puts "w"

text = "arm:第一関節左"

when "a" then

sp2.puts "e"

text = "arm:第二関節左"

when "z" then

sp2.puts "r"

text = "arm:傾き左"

when "3" then

sp2.puts "t"

text = "arm:土台左"

when "2" then

sp2.puts "a"

text = "arm:アーム閉じる"

when "w" then

sp2.puts "s"

text = "arm:第一関節右"

when "s" then

sp2.puts "d"

text = "arm:第二関節右"

when "x" then

sp2.puts "f"

text = "arm:傾き右"

Page 37: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

35

when "4" then

sp2.puts "g"

text = "arm:土台右"

when "5" then

sp2.puts "n"

text = "arm:基本姿勢"

when "6" then

sp2.puts "y"

text = "arm:腕を構える"

when "7" then

sp2.puts "h"

text = "arm:腕を掲げる"

=begin

when "d" then

sp2.puts "x"

text = "arm:第一関節左"

when "D" then

sp2.puts "X"

text = "arm:第一関節右"

when "c" then

sp2.puts "c"

text = "arm:第二関節左"

when "C" then

sp2.puts "C"

text = "arm:第二関節右"

when "y" then

sp2.puts "v"

text = "arm:第三関節左"

when "Y" then

sp2.puts "V"

text = "arm:第三関節右"

when "h" then

sp2.puts "b"

text = "arm:土台右"

when "H" then

sp2.puts "B"

Page 38: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

36

text = "arm:土台左"

=end

when "8" then

sp2.puts "u"

text = "腕おろし"

when "9" then

sp2.puts "j"

text = "ピックアップ"

when "0" then

sp2.puts "m"

text = "腕伸ばし"

when "o" then

sp2.puts "p"

text = "アームパフォーマンス"

when "p"

sp.puts

"\x8C\x01\x0C\x5A\x10\x56\x10\x51\x10\x56\x10\x58\x10\x5D\x20\x5D\x10\

x58\x10\x5A\x10\x58\x10\x51\x10\x56\x20"

sleep(3)

sp.puts "\x8D\x01"

when "end" then

sp2.puts "n"

sp.puts com["stop"]

sp.puts com["start"]

print "終了"

break

end # if

for num in 1..15

print "\n"

end

print " 前進:i\n"

print "左折:j 右折:k\n"

Page 39: iRobot Createの拡張 - Chukyo Ulang.sist.chukyo-u.ac.jp/classes/seminar/Papers/2012/K...卒業論文要旨 題目 iRobot create の拡張 学籍番号 H209015 氏名 蒲 恵太 指導教員

37

print " 停止:m\n"

print "アーム開く : 1 アーム閉じる : 2\n"

print "第一関節左 : q 第一関節右 : w\n"

print "第二関節左 : a 第二関節右 : s\n"

print "傾き左 : z 傾き右 : x\n"

print "土台 : 3 土台 : 4\n"

print "基本姿勢:5 構え:6 掲げる:7"

print "デモプレイ : o 音楽再生 : p\n\n"

print "ピックアップ:6 → 8 → 2 → 9 → 0\n"

print "現在のパフォーマンス = ",text,"\n\n"

end