Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
掃除をさせるだけではもったいない
「ルンバ」の魅力と攻略法
玲 / @Plemling138
自己紹介
 岡田 修弥 a.k.a. 玲
 仙台電波高専(今の仙台高専広瀬キャンパス)卒
 豊橋技術科学大学大学院 情報・知能工学専攻
博士前期課程1年
 TwitterID: @Plemling138
 HP: http://blo...
アイスブレイク
 在学生 or 卒業生?
2015/12/20 3
アイスブレイク
 ルンバ持ってる(家にある)人!
https://en.wikipedia.org/wiki/IRobot#/media/File:IRobot_Roomba_780.jpg
http://www.wired.com/2012...
ルンバは「ロボット掃除機」?
 ルンバをロボットとして見ると…
センサいっぱい
車輪ついてて動き回る
バッテリ積んでる
なんかピコピコ言ってる
ボタン一つで勝手に掃除してくれる
たまにケーブルにひっかかるのはご愛嬌
 これだけ付...
ルンバは
「ロボット屋さんが作ったお掃除ロボット」
製造元のiRobot社は日本ではお掃除ロボットのイメージが強いが、
ビジネス向け製品や軍事用ロボットまで手掛ける
ガチなロボット屋さん
http://www.irobot.com/For-th...
ルンバを「お掃除ロボット」の呪縛から
解き放とう!
- Let’s Hack Roomba!! -
なんのために?
ルンバをベースとしてロボットを開発する
→製作コストを削減できる
ルンバをより便利に使い倒せる
→アプリからの制御、ソーシャルサービスとの連携等
2015/12/20 8
なんのために?
ルンバをベースとしてロボットを開発する
→製作コストを削減できる
ルンバをより便利に使い倒せる
→アプリからの制御、ソーシャルサービスとの連携等
でも、ハックって悪いことなんじゃ…?
2015/12/20 9
安心してください
リファレンスはすべて公開されていますよ!
2015/12/20 10
http://www.oricon.co.jp/news/2063618/photo/2/
3ステップでHack!
2015/12/20 11
http://www.amazon.com/iRobot-530-Roomba-Vacuuming-
Robot/dp/B000UU7TZE
はがす!
 天板カバーを外します
 カバー本体...
詳細:はがす!
 シリアルポートは天板カバー下にあるので、これを外します
 隙間からマイナスドライバーで周りにこじっていくと外れます
 冬場は樹脂が硬く割れやすいので暖めながらやると良いです
2015/12/20 12
詳細:つなぐ!
 カバーをはがすとCLEANボタン横にシリアルポートが現れます
 オフィシャルのケーブルもありますが…
入手困難です(研究用キットやiRobot Create 2に付属?)
市販プラグとUSB-シリアル変換アダプタやXb...
詳細:つなぐ!
 カバーをはがすとCLEANボタン横にシリアルポートが現れます
 オフィシャルのケーブルもありますが…
入手困難です(研究用キットやiRobot Create 2に付属?)
市販プラグとUSB-シリアル変換アダプタやXb...
詳細:たたく!
 魔導書(後述)に従って使用したいコマンドをプログラムから
送信します
 シリアル通信が簡単にできる言語をおすすめします
Arduinoなど、既にライブラリが開発されている言語もあります
フルスクラッチしてもそれほどコス...
魔導書
 Roomba Open Interface(OI)
Specificationsのこと
http://irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Int
erface_S...
魔導書
 シリアルポートの規格・仕様
 制御モードの設定方法
 コマンドの内容(概要)
走行用アクチュエータの制御
LEDの制御
お掃除コマンド
音楽の演奏(!)
センサデータの取得
2015/12/20 17
開発のしかた(ざっくり)
 シリアルポート通信用のコードを書きます
割と読みやすい(と思う)ので、ここではC#.NETで書きます
2015/12/20 18
class RoombaControl
{
SerialPort RoombaPo...
開発のしかた(ざっくり)
 シリアルポート通信用のコードを書きます
割と読みやすい(と思う)ので、ここではC#.NETで書きます
2015/12/20 19
public int sendCommand(byte[] data)
{
if ...
ちょっとだけTips
 最初にモード指定をする必要があります
OFF/Passive/Safe/Full の4状態があります
デフォルトではPassiveモードになりアクチュエータが使えないため、
基本的にはSafeモードでコマンドを叩き...
実際に動かしてみよう!
2015/12/20 21
private static void moveRoomba() {
RoombaControl Roomba = new RoombaControl();
if (Roomba.connec...
アイデアは無限大!
 SNS経由でお掃除命令を送ったり…
 WebカメラやKinectで得られた情報を基に制御したり…
 音楽を演奏させたり…
 公式ハック用キットも市販されています(iRobot Create 2)
輸入モノなので市...
まとめ
 ルンバをただ使うのはもったいない!
 ルンバは「電気屋さんで買えるハッカブルデバイス」
自分好みの動きや機能を追加できる!
ロボットのプラットフォームとしても使える!
 ルンバのハックは超簡単!
リファレンスが公開されてい...
参考資料
 「Roomba Hack」などで検索すると役に立つ情報がいっぱい出てきます
 参考になりそうなページ
Roomba 500 Open Interface(OI) Specification
http://irobot.lv/u...
Upcoming SlideShare
Loading in …5
×

掃除をさせるだけではもったいない「ルンバ」の魅力と攻略法 Public

4,935 views

Published on

How to Hack Roomba

Published in: Technology
  • Be the first to comment

掃除をさせるだけではもったいない「ルンバ」の魅力と攻略法 Public

  1. 1. 掃除をさせるだけではもったいない 「ルンバ」の魅力と攻略法 玲 / @Plemling138
  2. 2. 自己紹介  岡田 修弥 a.k.a. 玲  仙台電波高専(今の仙台高専広瀬キャンパス)卒  豊橋技術科学大学大学院 情報・知能工学専攻 博士前期課程1年  TwitterID: @Plemling138  HP: http://blog.hsy.me/ 2015/12/20 2
  3. 3. アイスブレイク  在学生 or 卒業生? 2015/12/20 3
  4. 4. アイスブレイク  ルンバ持ってる(家にある)人! https://en.wikipedia.org/wiki/IRobot#/media/File:IRobot_Roomba_780.jpg http://www.wired.com/2012/09/irobot-roomba-650/ 2015/12/20 4
  5. 5. ルンバは「ロボット掃除機」?  ルンバをロボットとして見ると… センサいっぱい 車輪ついてて動き回る バッテリ積んでる なんかピコピコ言ってる ボタン一つで勝手に掃除してくれる たまにケーブルにひっかかるのはご愛嬌  これだけ付いて39,800円~!お買い得!! 2015/12/20 5
  6. 6. ルンバは 「ロボット屋さんが作ったお掃除ロボット」 製造元のiRobot社は日本ではお掃除ロボットのイメージが強いが、 ビジネス向け製品や軍事用ロボットまで手掛ける ガチなロボット屋さん http://www.irobot.com/For-the-Home/Vacuum-Cleaning/Roomba.aspx http://www.irobot.com/For-Business/RP-VITA.aspx http://www.irobot.com/For-Defense-and-Security/Robots/510- PackBot.aspx#Military Roomba InTouch Vita (院内回診ロボット) PackBot (軍用ロボット) 2015/12/20 6
  7. 7. ルンバを「お掃除ロボット」の呪縛から 解き放とう! - Let’s Hack Roomba!! -
  8. 8. なんのために? ルンバをベースとしてロボットを開発する →製作コストを削減できる ルンバをより便利に使い倒せる →アプリからの制御、ソーシャルサービスとの連携等 2015/12/20 8
  9. 9. なんのために? ルンバをベースとしてロボットを開発する →製作コストを削減できる ルンバをより便利に使い倒せる →アプリからの制御、ソーシャルサービスとの連携等 でも、ハックって悪いことなんじゃ…? 2015/12/20 9
  10. 10. 安心してください リファレンスはすべて公開されていますよ! 2015/12/20 10 http://www.oricon.co.jp/news/2063618/photo/2/
  11. 11. 3ステップでHack! 2015/12/20 11 http://www.amazon.com/iRobot-530-Roomba-Vacuuming- Robot/dp/B000UU7TZE はがす!  天板カバーを外します  カバー本体や爪を 折らないように注意! つなぐ!  シリアルポートがボタン の脇に出現!  リファレンスに従って PCやマイコン等と接続 しましょう たたく!  対応するAPIコマンドを 各種言語で叩く! 楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
  12. 12. 詳細:はがす!  シリアルポートは天板カバー下にあるので、これを外します  隙間からマイナスドライバーで周りにこじっていくと外れます  冬場は樹脂が硬く割れやすいので暖めながらやると良いです 2015/12/20 12
  13. 13. 詳細:つなぐ!  カバーをはがすとCLEANボタン横にシリアルポートが現れます  オフィシャルのケーブルもありますが… 入手困難です(研究用キットやiRobot Create 2に付属?) 市販プラグとUSB-シリアル変換アダプタやXbeeと組み合わせたり、 ジャンパワイヤを直挿ししても大丈夫です ピンアサインは魔導書(後述)に書いてあります 2015/12/20 13
  14. 14. 詳細:つなぐ!  カバーをはがすとCLEANボタン横にシリアルポートが現れます  オフィシャルのケーブルもありますが… 入手困難です(研究用キットやiRobot Create 2に付属?) 市販プラグとUSB-シリアル変換アダプタやXbeeと組み合わせたり、 ジャンパワイヤを直挿ししても大丈夫です ピンアサインは魔導書(後述)に書いてあります 2015/12/20 14
  15. 15. 詳細:たたく!  魔導書(後述)に従って使用したいコマンドをプログラムから 送信します  シリアル通信が簡単にできる言語をおすすめします Arduinoなど、既にライブラリが開発されている言語もあります フルスクラッチしてもそれほどコストはかかりません…たぶん 2015/12/20 15
  16. 16. 魔導書  Roomba Open Interface(OI) Specificationsのこと http://irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Int erface_Spec.pdf  シリアルポートのピンアサインや コマンド一覧がすべて書かれて います ただし、全編英語です 英語が得意な高専生の皆さんなら 大丈夫ですよね!! 2015/12/20 16
  17. 17. 魔導書  シリアルポートの規格・仕様  制御モードの設定方法  コマンドの内容(概要) 走行用アクチュエータの制御 LEDの制御 お掃除コマンド 音楽の演奏(!) センサデータの取得 2015/12/20 17
  18. 18. 開発のしかた(ざっくり)  シリアルポート通信用のコードを書きます 割と読みやすい(と思う)ので、ここではC#.NETで書きます 2015/12/20 18 class RoombaControl { SerialPort RoombaPort; public RoombaControl() { RoombaPort = new SerialPort(); //接続COMポートの設定。 RoombaPort.PortName = SerialPort.GetPortNames()[0]; Console.WriteLine("Port:" + RoombaPort.PortName); //ボーレートなどの設定 RoombaPort.BaudRate = 115200; //ボーレート(115200bps) RoombaPort.DataBits = 8; //データビット(8ビット) RoombaPort.Parity = Parity.None; //パリティなし RoombaPort.StopBits = StopBits.One; //ストップビットなし RoombaPort.Handshake = Handshake.None; //ハンドシェイクなし RoombaPort.Encoding = Encoding.ASCII; //エンコードはASCII方式 //RoombaPort.DataReceived += new SerialDataReceivedEventHandler(RoombaPort_DataReceived); } public int connect() { if (RoombaPort == null) return -1; try { RoombaPort.Open(); RoombaPort.DtrEnable = true; RoombaPort.RtsEnable = true; this.sendCommand(new byte[1] { 130 }); //最初からSAFEモードへ } catch (Exception e) { return -2; } return 0; } public int close() { if (RoombaPort == null) return -1; try { //ポートを閉じる前にOFFモードへ移行 this.sendCommand(new byte[1] { 133 }); RoombaPort.Close(); } catch (Exception e) { return -2; } return 0; }
  19. 19. 開発のしかた(ざっくり)  シリアルポート通信用のコードを書きます 割と読みやすい(と思う)ので、ここではC#.NETで書きます 2015/12/20 19 public int sendCommand(byte[] data) { if (RoombaPort == null) return -1; try { RoombaPort.Write(data, 0, data.Length); } catch (Exception e) { return -2; } return 0; } public byte[] receiveData(int recvBytes) { byte[] buf = new byte[recvBytes + 1]; RoombaPort.Read(buf, 0, recvBytes); return buf; } public int Drive(int DriveMode, short leftSpeed, short rightSpeed) { byte[] data = new byte[5]; data[0] = (byte)(DriveMode & 0xFF); data[1] = (byte)((rightSpeed & 0xFF00) >> 8); data[2] = (byte)(rightSpeed & 0x00FF); data[3] = (byte)((leftSpeed & 0xFF00) >> 8); data[4] = (byte)(leftSpeed & 0x00FF); return sendCommand(data); } public int changePowerLEDColor(byte Color, byte Brightness) { byte[] data = new byte[4]; data[0] = (byte)139; data[1] = 0; data[2] = (byte)Color; data[3] = Brightness; return sendCommand(data); }
  20. 20. ちょっとだけTips  最初にモード指定をする必要があります OFF/Passive/Safe/Full の4状態があります デフォルトではPassiveモードになりアクチュエータが使えないため、 基本的にはSafeモードでコマンドを叩きます Fullモードを使用する際は暴走に注意してください  駆動モードは3種類の指定方法があります Drive(速度と半径を指定する) Drive Direct(左の車輪と右の車輪の速度をそれぞれ直接指定) Drive PWM(左の車輪と右の車輪の出力レートを指定) サンプルコードでは各コマンドをユーザが指定し、値を整形して コマンドとして送信しています 2015/12/20 20
  21. 21. 実際に動かしてみよう! 2015/12/20 21 private static void moveRoomba() { RoombaControl Roomba = new RoombaControl(); if (Roomba.connect() < 0) Console.WriteLine("Failed to connect Roomba!!"); else Console.WriteLine("Roomba Control Start!!"); Roomba.changePowerLEDColor(0, 255); Roomba.changePowerLEDColor(128, 255); Roomba.changePowerLEDColor(255, 255); Roomba.Drive(137, 100, 100); //100mm/sで前進 Roomba.Drive(137, 0, 0); Roomba.Drive(137, -100, -100); //100mm/sで後退 Roomba.Drive(137, 0, 0); Roomba.Drive(137, -100, 100); //左旋回 Roomba.Drive(137, 0, 0); Roomba.Drive(137, 100, -100); //右旋回 Roomba.Drive(137, 0, 0); Roomba.sendCommand(new byte[] { 135 }); } ※実際はsleepを各命令間に挟んでいます
  22. 22. アイデアは無限大!  SNS経由でお掃除命令を送ったり…  WebカメラやKinectで得られた情報を基に制御したり…  音楽を演奏させたり…  公式ハック用キットも市販されています(iRobot Create 2) 輸入モノなので市販品より高めですが…(6万円弱?) 2015/12/20 22
  23. 23. まとめ  ルンバをただ使うのはもったいない!  ルンバは「電気屋さんで買えるハッカブルデバイス」 自分好みの動きや機能を追加できる! ロボットのプラットフォームとしても使える!  ルンバのハックは超簡単! リファレンスが公開されているのでハックとは言えない!? プログラムを書いて動かすスキルより蓋を外すほうが大変? もっとルンバを活用しようぜ! 2015/12/20 23
  24. 24. 参考資料  「Roomba Hack」などで検索すると役に立つ情報がいっぱい出てきます  参考になりそうなページ Roomba 500 Open Interface(OI) Specification http://irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Interface_Spec. pdf ArduinoからRoombaをSoftware Serialで動かす http://qiita.com/DUxCA/items/36a13e68722c51c72927 趣味で作るロボット用ソフトウェア:ルンバの制御について http://hyakuren-soft.sakura.ne.jp/hobby_robot_sdk/about_roomba_page.html ROS(ロボット制御用OS)での動かし方(英語) http://wiki.ros.org/roomba_500_series お掃除しないルンバをプログラミングして自分だけのロボットが作れる プラットフォーム「iRobot Create 2」が発売開始 http://gigazine.net/news/20141211-irobot-create-2/ 2015/12/20 24

×