R2D2 on RaspberryPi Project

制作の様子

09-16-2014
2nd DevMeeting
1st DevMeeting

目的

家の中を走り回り人間のサポートをしてくれるR2D2を作成する
日本語命令に反応し行動する

関連記事

長くなってきたので分けました

I2C電圧・電流センサ活用
http://kouzu.info/ina226-sensing-on-raspberrypi-python/

サーボモータで頭ドライブ
http://kouzu.info/r2d2head-servo-drive/

必須機能

  • 動き周る
    Hasbro社 R2D2は単一4本,単三4本で動作するがバッテリ化したい
  • WebSocket通信対応 R2D2自体を制御できる
    HTML5で簡易リモコンを作成したい
  • リモコン機能(TV/エアコン...) 「R2 テレビの音量上げて/下げて...」
  • 音楽再生 「R2 ネットラジオ流して」

機能を組み合わせて

「R2 ただいまー」
部屋のリモコンライトを付ける、エアコンを入れる、音楽を流す

将来的な実装予定

  • 自動走行
  • 空間認識

ハードウェア

製品がわかりづらい物だけAmazonリンクを貼り付けてみました

利用モジュール

R2D2

  • Hasbro社 Interactive R2D2

メインボード

  • Raspberry Pi B+ (or 2 Model B)
  • Raspberry Pi Camera
  • Raspberry Pi Camera 延長ケーブル
  • Sparkfun RaspiRobot Board

https://www.sparkfun.com/products/11561
後述しますが、電源周りが弱いため下記ブログを参考にし
標準の3端子レギュレータを破棄して外部電源に任せる事にしました
http://ameblo.jp/takeoka/entry-11583049748.html

周辺機器/センサ

電源周り

ラジコン用のバッテリを流用しました

  • 3900mAh ストレート パックバッテリー
  • AC デルタピーク・チャージャー (1.2A充電)タミヤ 7.2Vコネクター付
  • DC-DC 直流電圧 コンバータ

ソフトウェア

方針

全ての機能をWebSocket経由で動作させる事で
HTML5でリモコンを簡単に作成したり、能力の必要な処理を
PCやサーバから制御させる方針で行く事にしました。

下記制御をそれぞれ独立して実装します

  • メインループ (AI)
    AIと言う名の音声認識待ち受け
  • 電源状況 (I2C 電圧・電流センサ)
  • モータ制御 (Sparkfun RaspiRobot Board)
  • コンパス/加速度認識 (I2C 6軸センサ コンパス・加速度)
  • 音声認識
  • 音声発話 (R2D2語を話す)
  • 電飾

利用オープンソース

実装

とりあえず必要な部品/モジュールから殻割りをしたR2D2に組み込んでいきます

バッテリ

元々の単一電池格納部分にRC用バッテリをマウント出来るようにしました

DC-DCコンバータ/RaspberryPi/RaspiRobot Board

赤黒・青黒ケーブルが足モータへと伸びています

元々のバッテリ電圧は7.2VなのでDC-DCコンバータにて5Vへ降圧
RaspiRobot Boardの3端子レギュレータを外しIN/OUTを接続しています
GND端子とのショートが怖かったためホットボンドで固めました

付属の3端子レギュレータが手で触れない温度になったため即決しました

スピーカ

USBスピーカをモノラル化(もう一方のスピーカへの配線を切っただけ)
元々のスピーカがマウントしてある場所に無理矢理設置しました

マイク

外装をはがすのにかなり苦労しました
メイン基盤からコンデンサマイクへの配線を接続し直しました

USBリモコンキット irMagician

表面実装部品にかなり手こずりMicroUSB端子が剥がれる危険性があるので
ホットボンドで固めました、よってUSBケーブルの抜き差し不可

動かしてみる

頭無しのためちょっとかわいそうな感じですがモータ駆動まで
問題なくこぎ着けました! (8/17 - /8/23)

8/24

バッテリ制御のため、I2C対応の電圧・電流センサを装着
左下がDC-DCコンバータ、右下が電圧・電流センサ

8/31

バッテリ制御用にI2C通信で電圧/電流/電力を取得を行えるようにしました
区切りが良いので下記にまとめました

http://kouzu.info/ina226-sensing-on-raspberrypi-python/

9/6

いよいよ頭部分に取り掛かりました
Raspi-cameraを延長ケーブルで伸ばして設置するために
まずはカメラ設置部分をドリルで地道に広げヤスリがけ

電飾部分(赤/青LED)はRaspiRobot基板のオープンコレクタ出力ポートに接続
元々のセンサ部品やコネクタは一部を除いて破棄しました

9/7

この記事の先頭にムービ/開発チーム写真をアップロードしました
頭をマウントするために基板の再配置を含め
全体的に再調整を実施し仮組みで動作させてみました

元々の頭固定具がBox状で場所を取るためステー部分だけ切り出し&取り付け
小林くんナイス加工Thanks!

胴体 外観 表

胴体1-1

胴体2

胴体 外観 裏

基板の再配置後は上記のような状態になりました
頭固定用の台座がぎりぎりかつRasberryPiとUSB接続部分が場所を食うため
基板を斜めにしております。

9/16

3連休にて秋葉原に買い出し&サーボモータ化が完了しました
この記事の先頭に新しいムービを追加しています。
いわゆる紙芝居形式のロボット制御ですが、とりあえず半手動で動作したため
いよいよここから、ソフト主体で自動化に持って行きます

http://kouzu.info/r2d2head-servo-drive/

残る課題

ハード部分

  • 電源スイッチのアクセスを改善
  • ポリスイッチにて電流制限をハード的に実施

ソフト部分

ようやくこちらをメインに実施できる状態に!

  • 音声認識エンジン最適化
  • WebSocket化
  • カメラ活用

開発チーム紹介

会社チーム内の優秀なアルバイトのお二人と一緒に開発をしております
趣味の集まりです

写真左から

  • プログラミング大好きなスーパープログラマKu君
    GoLang推し!&実装中
  • LegoMindstormからプログラミングまでなんでもござれ Ko君
    ムードメーカから開発TODO整理、プログラミングまでこなします
  • 全体的に電源・モータ担当 自分

R2D2マウントカメラで開発チーム撮影

だいぶ見上げる角度でカメラが固定されていたため後ほど修正予定

takashi