ルンバを買ったので早速改造してみることにしました
ずっと欲しかったルンバを購入しました。
【国内正規品】 iRobot ロボット掃除機 ルンバ 622 ホワイト
- 出版社/メーカー: iRobot (アイロボット)
- 発売日: 2014/09/12
- メディア: ホーム&キッチン
- この商品を含むブログ (2件) を見る
目的はもちろんお掃除してもらうことなのですが、やはりルンバを買ったら色々いじりたくなってしまいますね。というわけで、サクッとRaspberry Piでルンバをコントロールしてみることにしました。
方針は以下です。
- Raspberry PiとROS(Robot Operating System)を使う
- 普通に掃除機としても使うので、基本的に元に戻せない改造はしない
ROSに関しては以下記事を参照下さい。
同じようにルンバを改造している記事は、ネットに色々あるので参考にしたものを本記事の最後で参考リンクとしてリンク貼っています。一応この記事は、わかりやすく簡単にルンバを改造する方法を紹介しているつもりなので、ある程度PCやLinuxがわかる人ならルンバを改造できるようになると思います。
ただし、念のため最初に書いておきますが、この記事の内容はメーカの想定している使い方ではないので、完全無保証となります。ルンバが壊れても文句を言わない覚悟がある方のみチャレンジすることをおすすめします。
この記事の内容でできたこと(改造したルンバ)
以下のようにRaspberry Piでルンバを制御できるようになりました。パソコンはRaspberry Piにsshでログインしているだけで、基本的にRaspberry Piだけでルンバを制御しています。
改造は、半田付けも不要で、2時間程度で簡単にルンバがハックできました(なんと抵抗2本だけで繋ぐことも可能です)。とりあえず繋がった、という感じですね。これをベースに今後も色々ためしていきたいなと思います。
ここからは、どうやってルンバを改造するかという内容の説明になります。興味ない方にとっては宇宙語が続きますので、興味ある方のみ続きをご覧下さい。
ルンバをRaspberry Piを使ってROSでコントロールする方法
必要なもの
- 出版社/メーカー: Raspberry Pi
- 発売日: 2016/05/31
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: トランセンド・ジャパン
- 発売日: 2015/10/02
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る
Amazonベーシック USB2.0ケーブル 1.8m (タイプAオス- マイクロタイプBオス)
- 出版社/メーカー: AmazonBasics
- メディア: Personal Computers
- この商品を含むブログを見る
PLANEX 無線LAN子機 (USBアダプター型) 11n/g/b 150Mbps MacOS X10.10対応 GW-USNANO2A (FFP)
- 出版社/メーカー: プラネックス
- 発売日: 2013/09/06
- メディア: Personal Computers
- この商品を含むブログを見る
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
レベル変換して、直接Raspberry Piのピンヘッダに繋ぐ方法もあり、その場合はUSB-シリアル変換は不要です。初心者はUSB-シリアル買っておいた方がよいです。上級者の方は、この記事の後半読んで必要なものを調達下さい。
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
cheero Power Plus 3 10050mAh 大容量かつコンパクト モバイルバッテリー iPhone&Android対応 Auto-IC機能搭載 (ホワイト) CHE-072-WH
- 出版社/メーカー: cheero
- メディア: エレクトロニクス
- この商品を含むブログ (3件) を見る
写真にはRaspberry Piの純正カメラモジュールが付いていますが、本記事では使用しません(今後使用予定)。
必要なもの(電源をルンバから供給する場合)
モバイルバッテリは、ルンバに載せるのには大きいですし、ルンバとモバイルバッテリ両方のバッテリの残りを気にするのはいやですよね。そんなときは、ルンバから電源供給するのが良いです。参考までにその際に必要なものを記載します。ただし、ここは半田付けは必要となりますのでそれでも問題ない方向けです。
D/Dコンバータ(電圧変換)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
goot 電子工作用はんだこて セット 安定感抜群の大型コテ台付き 半田こて はんだ吸い取り線 はんだ 40W BM-40S
- 出版社/メーカー: 太洋電機産業(goot)
- メディア: その他
- この商品を含むブログを見る
フジ矢 スモールニッパ 110mm 刃部鏡面仕上げで切れ味抜群 より線Ф2.0まで切断可能 MP4-110
- 出版社/メーカー: フジ矢
- メディア: Tools & Hardware
- この商品を含むブログを見る
ルンバとRaspberry Piの接続
ルンバオープンインターフェース(Roomba Open Interface)
ルンバとRaspberry Piの接続は、ルンバオープンインターフェースと呼ばれるシリアルインターフェースを使用します。仕様も公開されています。
Roomba 500となっていますが、色々調べたところルンバの500/600/700/800シリーズには全部コネクタが付いていて、仕様も基本共通のようです。残念ながら、WiFiが標準搭載となったルンバ900には付いていないようです。900シリーズでもWiFi経由でハックは可能なようですが、現状ROSには対応してないようなので本記事の内容は500/600/700/800シリーズを想定しています。
ルンバのシリアルインターフェースとRaspberry Piをつなぐ方法は、以下2つあります
- シリアル-USB変換アダプタでRaspberry PiのUSBポートに接続
- レベル変換して直接Raspberry Piのシリアルインターフェース(UART)に接続
シリアル-USB変換は、少しお金がかかる代わりに、設定が簡単(ほぼ不要)でRaspberry Pi以外のPC等でもそのまま使用可能というメリットがあります。シリアルインターフェースを使う場合は、安い(抵抗2本でOK)の代わりに、色々設定の変更が必要なのとRaspberry Pi専用になってしまうというデメリットがありますので、そこらへんを考慮した上で接続方法を選択下さい。初心者にはシリアル-USB変換がおすすめです。
一応両方の接続方法に関して説明いたします。
シリアル-USB変換アダプタで接続する方法
ルンバのシリアルインターフェースと接続するには、まずルンバの外装を外します。
爪を押して外していけばOKです。最初はちょっとバキッといきそうで不安ですが、特に工具などは不要で外せました
以下のようなむき出しの状態にします
以下のコネクタがルンバオープンインターフェース。信号名は仕様書から抜き出して書き加えました。
ルンバとシリアル-USB変換アダプタの接続は以下の図と表を参照下さい。表の配線の色は、写真との対応をとっているだけですので、好きな色を使用して下さい。ルンバのシリアル通信の電圧は5Vなので、変換アダプタは5V対応のものを選ぶよう注意しましょう(3.3Vの場合はレベル変換が必要)。
シリアル変換アダプタのUSBポートはRaspberry Piのお好きなUSBポートに接続して下さい。
配線の色 | ルンバ | シリアル変換アダプタ |
---|---|---|
黒 | 6pin(GND) | GND |
緑 | 4pin(TXD) | RXD |
黄 | 3pin(RXD) | TXD |
レベル変換してシリアル接続する方法
外装を外すまでは、シリアル-USB変換アダプタで接続するときと同じです。Raspberry Piのシリアルインターフェース(UART)につなぐ場合は、ルンバの5VからRaspberry Piの3.3Vにレベル変換が必要です。Raspberry PiのTx(3.3V)はルンバのRx(5V)に直結して実用上は問題なくて、ルンバのTx(5V)を抵抗2つで分圧してRaspberry Piに繋ぐだけで良いという情報があったので、試してみました。
抵抗は手持ちの10kΩのものを使いました。Raspberry PiのGPIOヘッダの接続先は、Raspberry Pi GPIO Pinoutを参照下さい。具体的には以下のような形です。
ルンバ | Raspberry Pi | Memo |
---|---|---|
6pin(GND) | 6pin(GND) | 直結OK |
3pin(RXD) | 8pin(TXD) | 直結OK |
4pin(TXD) | 10pin(RXD) | レベル変換必要 |
実際に接続した様子は以下になります。
これを読んでよく意味がわからない人は、シリアル-USB変換を購入した方が無難です。
また、シリアル通信を使う場合は、設定変更が必要になるので注意下さい。一旦本記事の内容の動作確認のところまで進めた後、以下の設定を実施して下さい。
Raspberry Pi 3の場合は、シリアル通信を実施する際に/boot/config.txt
ファイルの修正が必要です。具体的には以下でエディタを開いて
$ sudo vim /boot/config.txt
以下の1行を追加して下さい
core_freq=250
また、以下の記述があるかを確認しておきましょう(デフォルトでは記述があるはずです)
enable_uart=1
Raspberry Pi 2の場合は、この設定は不要のはずですが、試せてはいません。ここらへんのもう少し詳細はMacからRaspberry Piにシリアル通信(UART)でログイン - karaage. [からあげ]を読んでおいてもらうと良いかもしれません。
ROSのパッケージに関しても、修正が必要です。具体的には、create_autonomy/ca_driver/config/default.yaml
というファイルを編集します。Raspberry Pi 3では、2行目を以下のように変更してください(-の行が変更前、+の行が変更後の意味です)
- dev: "/dev/ttyUSB0" + dev: "/dev/ttyS0"
Raspberry Pi 2では /dev/ttyS0
が/dev/ttyAMA0
になるはずですが、こちらも試せてはいません。
Raspberry PiへのROSのセットアップ
以下の記事のUbuntuにROSをインストールする方を参照しセットアップ下さい
Raspberry Piにはディスプレイをつながず、他のPCからsshなどで接続するのがよいでしょう。その場合は、byobuもインストールしておくと色々楽です。
ただ、byobuでプログラム実行して以下のようなエラーが出る場合があります
what(): locale::facet::_S_create_c_locale name not valid
そのときは以下実行ください。毎回実行するのはめんどう臭いので.bashrc
とかに追記しておくとよいでしょう
$ export LC_ALL="en_US.UTF-8"
また、ホスト名でアクセスするために、avahi-daemon
も入れておくとよいでしょう。MacかiTunesをインストールしたWindowsからなら、ssh ubuntu@ubuntu.local
でアクセスできるようになります(ubuntu.localの部分は、必要に応じて自分のRaspberry Piのホスト名に入れ替えてね)。IPアドレスで直接アクセスするなら不要です。
$ sudo apt-get install avahi-daemon
ルンバを制御するROSパッケージをセットアップする
ルンバ用のROSパッケージは以下2つがメジャみたいです。
ネット情報だとroomba_500_series
の例が多かったのですがcreate_autonomy
の方がアップデートも頻繁で、READMEもしっかりしていたのでcreate_autonomy
を使用することにします。roomba_500_series
でも多分問題はないとおもいますので、お好みで。以下はcreate_autonomy
のセットアップの例です。
READMEを見ると、catkin tools(catkin_build)でのビルドを推奨しているので、以下でインストール
$ sudo apt-get install -y python-catkin-tools
ワークスペースはcatkin_ws
として、あらかじめビルドしておきましょう。よくわからん人はとりあえず以下実行して下さい。
$ rm -rf ~/catkin_ws $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws $ catkin init $ catkin build
あとは、ほぼREADME通りです。以下コマンドでリポジトリのクローン、必要なパッケージのダウンロード、ビルドをします。
$ cd ~/catkin_ws/src $ git clone https://github.com/AutonomyLab/create_autonomy.git $ cd ~/create_ws $ rosdep update $ rosdep install --from-paths src -i $ catkin build
エラーなくビルドできたら完了
ROSでルンバコントロールの動作確認
ルンバとRaspberry Piを以下のように接続します。Raspberry Piの電源はモバイルバッテリからとるのがよいでしょう。
PCからRaspberry Piにログインします。ルンバの電源を入れた後、1つ目のターミナルで以下実行します。
$ roslaunch ca_driver create_2.launch
ルンバから電子音がして、残りバッテリがターミナルに表示されたら接続成功です。
次に2つ目のターミナルで以下を実行します。これがルンバに回転しろという指令になります
$ rostopic pub /cmd_vel geometry_msgs/Twist -r 60 -- '[0, 0, 0]' '[0, 0, 0.5]'
このコマンドを詳しく知りたい方は以下を参照下さい。 ROSトピックの理解
このように何度もターミナル開いてsshで接続するのも大変ですね。ROSではよくこういうことを行うので、先ほどROSのセットアップのところで紹介したbyobuなどの仮装端末ソフトを使うのがおすすめです。
ルンバからRaspberry Piに電源供給
ルンバオープンインターフェースのBattery VoltageピンからRaspberry Piに電源供給することも可能です。ただこの電源ピン、仕様の詳細が公開されていません。ネットで色々調べると、どうもルンバのバッテリと直接接続されているわけでなく、間に過電流保護素子(ポリスイッチ)が入っているらしいことがわかりました。
あるサイトによると、200mAのポリスイッチで330mA程度引っ張れるみたいなことが書いてあります。ルンバの電圧は14V程度なので間に90%程度の効率のD/Dコンを挟んで14Vから5Vに降圧するとすると、14V330mA0.9/5V=830mA。むむ、Raspberry Piを動かすにはちょっと厳しそう…
ダメ元でスイッチサイエンスさんで買った、D/Dコンを使用します。9Aも引っ張れるハイパワーな電源ですが、そもそも大元の電流がそんなに引っ張れないので、もっと小さなものでもOKです。今回はたまたま手持ちにあったものを使用しました。
必要な工具は以下くらいです。ピンヘッダはD/Dコンに付属していました。ピンヘッダをニッパで切って半田付けします
あとは、Battery VoltageからD/Dコン、Raspberry Piのピンヘッダの5Vという順に接続してやるだけです。
一応問題なく動きました。ただ、どれだけ余裕があるかはちょっと不安ですね。Raspberry Pi 3だと重い処理させると落ちちゃったりするかも…
まとめ
ルンバをハックしてRaspberry PiとROSでコントロールできるようになりました。今後、スマホでコントロールとか、音声認識/音声合成とか人工知能搭載とか、地図生成(SLAM)とか色々試してみたいなと思っています。ただ、今の基板ムキ出しのままだと、普通のルンバとして使用できず妻に怒られてしまうので、ケースとかを作るところからでしょうか。あと、娘はルンバが怖いみたいなので、娘が怖がらないようにも出来たらよいなと考えています。
ルンバに怯えるレモンちゃん。先は長そう
もし、この記事ではよく分からなかったけど、もっとRaspberry PiとROSのこと知りたいということであれば以下の本が参考になると思います。Raspbery Piの基礎、バージョン管理システム(Git/GitHub)から始まり、ROSでのソフト開発にとどまらず、デバイスドライバの開発まで踏み込んでいる意欲的な良書です。
- 作者: 上田隆一
- 出版社/メーカー: 日経BP社
- 発売日: 2017/03/30
- メディア: 単行本
- この商品を含むブログ (1件) を見る
ちなみに、上記の本では下記のRaspberry Pi Mouseを対象にしていますが、ルンバにも応用が利きます。ハードウェアが変わっても応用が利くのがROSの良いところですね(もちろん本のコードが全部そのまま動くわけではありません)。ルンバの方がRaspberry Pi Mouseより安くてお得でもありますが、本の意図している教育的な内容の多くが(センシング、デバイスドライバ開発等)が失われることには留意下さい。教育目的であれば、Raspberry Pi Mouseを使用することを強く勧めます。
- 出版社/メーカー: 株式会社アールティ
- メディア:
- この商品を含むブログを見る
関連記事
Raspberry Piで作ったロボット。下記記事では、ROSは使っていません。
参考外部リンク
ハードウェア関係
Roo Pi - controlling a Roomba with a raspbery pi
ソフトウェア関係
アイロボットルンバ|ロボット開発応援プロジェクト 公式サイト
ROS_21:Roomba Driver Install - Qiita
ROSでroombaを動かすまでのまとめ - AKHrobotics
「@Roomba 掃除しろ」 Slack BOT から新型ルンバ980をWiFiで制御する – しくみ製作所ブログ
「Hey Siri 掃除をして」で、Roomba(ルンバ)に掃除をしてもらう | マルチクラウドインテグレーター データホテルのテックブログ