たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

ルンバを Raspberry Pi でコントロールする

こんにちは、たるこすです。
ルンバを Raspberry Pi からコントロールできるようにしました。 以下の動画のように、Raspberry Pi に Web サーバを立ててスマホから操作もできます。(この部分は次回ブログで紹介します)

ルンバと Raspberry Pi の接続については、こちらの記事を参考にさせていただきました。

karaage.hatenadiary.jp

また、上記記事でも書かれている通り場合によってはルンバを壊してしまう可能性があるため、試される方は自己責任でお願いします。

用意したもの

ルンバ622

Amazon で調べて安そうなものを購入しました。900番台のルンバは有線での通信ができないそうなのでご注意ください。

【国内正規品】 iRobot ロボット掃除機 ルンバ 622 ホワイト

【国内正規品】 iRobot ロボット掃除機 ルンバ 622 ホワイト

Raspberry Pi 3 Model B

棚の中で眠っていた Raspberry Pi 3 を使いました。

micro SD カード

Raspberry Pi 3 用です。

FTDI USBシリアル変換アダプター Rev.2

この変換アダプターを使うことで、Raspberry Pi 側は USB で接続することができます。

www.switch-science.com

micro USB ケーブル 2本

USB シリアル変換アダプターと Raspberry Pi との接続に1本、Raspberry Pi への給電に1本必要です。

ジャンパワイヤ 3本

ルンバと変換アダプターとの接続にオス-オスの普通のジャンパワイヤを3本使います。

www.switch-science.com

モバイルバッテリー

Raspberry Pi への給電用として使います。

Raspberry Pi への OS インストール

詳細は省略しますが、新しく Raspberry Pi を購入した場合は OS のインストールが必要です。今回は、以前インストールしていた Raspbian という標準の OS を利用しています。

ルンバと Raspberry Pi の接続

カバーの取り外し

まず、ルンバ上面のカバーを取り外します。ダストボックスを取り外し、取り外したあたりからカバーを上に持ち上げたらガコッと外れました。

接続

まず、USB シリアル変換アダプターが 5V の設定になっていることを確認してください。

USB シリアル変換アダプターの RX, TX, GND にそれぞれジャンパワイヤをさします。

ルンバ側は、中段左に変換アダプターの TX からのワイヤ、中段右に RX からのワイヤ、下段中央に GND からのワイヤをさします。

最後に、USB シリアル変換アダプターと Raspberry Pi を USB ケーブルで接続します。

Raspberry Pi からの操作

バイスの設定

Raspberry Pi で以下のコマンドを実行し、デバイス名を確認します。 私の場合は /dev/ttyUSB0 で認識されていました。

$ ls /dev/tty*

しかし、以下のように権限を確認すると、一般ユーザに Read Write 権限がありません。

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0  9月  9 20:54 /dev/ttyUSB0

そこで、 /etc/udev/rules.d/50-udev-default.rules を作成(すでにある場合は編集)し、以下の行を記入します。

KERNEL=="ttyUSB[0-9]*", GROUP="dialout", MODE="0666"

USBケーブルを抜き差しすると、以下のように権限が変更されました。

$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0  9月  9 21:05 /dev/ttyUSB0

この部分は、以下のページを参考にしました。

ルンバの操作

上記PDFの仕様を読んでコマンドを送信することも可能ですが、以下のライブラリでコマンドをラップしてくれているのでこれを使います。

github.com

リポジトリのクローンと pyserial のインストールを行います。

$ git clone https://github.com/martinschaef/roomba.git
$ pip install pyserial

roomba フォルダ内で以下のスクリプトを作成し、実行します。

うまくいけば、センサの値が表示されルンバが少し回転します。

また、roomba に含まれる starwars.py を実行すると、ダースベイダーのテーマが演奏されます。

今回のブログは一旦ここまでとして、次回はこのライブラリを使って遠隔から操縦できるようにしていきます。