2015年6月30日火曜日

AWSロボを作ってきました。

こんにちは。okeeeです。

暑かったり寒かったり、体温調整が難しい今日この頃。
個人的にはエアコン全開で毛布完備が体調には最もいいと思います。財布にはよくないけど。

さて、06/20(土)にスペースアルファ三宮で開催された、JAWS-UG神戸:AWSロボを工作しよう!でロボを作ってきました。ADSJ清水さん(公式AWS芸人)がとあるLTで披露したAWSロボをみんなで作る会、というJAWS-UGとしては異色な回でした。さすがJAWS-UG神戸はやることが尖ってる。初めての勉強会親子参加です。




JAWS-UG神戸単体としては2年振りくらい?前回はOpsWorks(Chef)特集だった気がします。

スペースアルファ三宮
http://www.spacealpha.jp/sannomiya/
ここ凄くいいスペースでした。綺麗だしアクセスいいし。

JAWS-UG神戸:AWSロボを工作しよう!
https://jaws-ug-kobe.doorkeeper.jp/events/24411

当日のその前も準備でバタバタしていたのでTweetとか写真とか少なめでした。
ADSJ清水さんの当日の資料がこちら。


準備中は色々あり、用意した20台中何台が動くのか不安でしたが、結果全台ちゃんと動かすことが出来てよかったです。あと親子参加というのも珍しい感じだったのですがいい感じにユルく進めることが出来てよかったな、と。

当日のやった内容は上のスライド見てね、とうことで今回は準備とかAWSロボ/Raspberry Piのキッティングをまとめてみます。

必要なパーツ、ツールの準備

今回はAWSロボ用に以下のパーツを用意しました。
- Raspberry Pi B+
  http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/8111284/
- Raspberry Pi ラズベリー・パイ 超小型パソコン Pi Model B+ / Pi 2 Model B 専用ケ-ス(Clear)
  http://www.amazon.co.jp/dp/B00NEEA47I
- 【Amazon.co.jp限定】Transcend microSDHCカード 8GB Class4 (無期限保証) TS8GUSDHC4E (FFP)
  http://www.amazon.co.jp/dp/B004XIB9SW
- BUFFALO 無線LAN子機 コンパクトモデル 11n技術・11g/b対応 WLI-UC-GNM
  http://www.amazon.co.jp/dp/B003NSAMW2
- 【Tower Pro】マイクロサーボ SG90(10個セット)
  http://www.amazon.co.jp/dp/B00ESBHZVE
- ジャンパワイヤ 50本セット(オス~メス)
  https://www.switch-science.com/catalog/1683/
- コクヨ 板目表紙 A3 10枚 セイ-840
  http://www.amazon.co.jp/dp/B0012N8BHI
- 紙コップ本体  370W  10オンス(296ml) ホワイト  50P
  http://www.amazon.co.jp/211/dp/B00BXWUEKU
- その他両面テープ、セロハンテープ、スティックのり、色鉛筆、マジック、折り紙、毛糸などなど飾り付け用品
RasPi、ケース、microSD、無線LAN子機、サーボモータがあればなんとかなるかと。
LEDとかあるとチカチカさせれます。

他に必要なものとして
- HDMI接続出来るディスプレイ
- USB接続出来るキーボード(ドライバーが不要な安いもの)
- MicroUSBケーブルと2A出力くらいの電源
- インターネットに接続出来る環境
- 無線LAN親機
- LANケーブル
があります。

ネットワーク環境セットアップ

セットアップにネットワーク接続が必要になるので以下の図のようにネットワークを構築します。Raspberry Piは最終的に無線LANでインターネットに繋がるようにします。出来ればDHCPでプライベートIPアドレスを割り当てたいのでDHCP機能がついたルータを。またDHCPでIPアドレス割り当て後に名前で接続したいので名前解決できるものだと尚いいです。

ちなみに今回のネットワーク構築は当日残念ながら体調不良で参加出来なかった澤登さんがモクモクとやってらっしゃいました。ありがとうございました!

Raspberry Pi OSインストール準備

最初にmicroSDをフォーマットします。
今回はこれ使ってフォーマット。
https://www.sdcard.org/jp/downloads/formatter_4/
SDアダプターにmicroSDを差し込んでPCのSDリーダーに指してFAT32でフォーマット。
まれにSDアダプターの不良でmicroSDが認識されない場合があります。今回20台のセットアップ中に2台発生しました。

次にRaspberry PiにOSインストール用イメージを入れます。イメージのダウンロードは以下から。
https://www.raspberrypi.org/downloads/
Offline環境でインストールしたのでNOOBS 1.4.1を。Raspbianです。
※ちなみに最初からOS入りのRaspberry Piも売ってます。

zipをダウンロードして解凍して出てくるNOOBS_v1_4_1フォルダ「以下」をmicroSDにそのままコピーします。ここ微妙に時間がかかります。

OSインストール用のmicroSDが出来たら、Raspberry Piに差し込みます。スマホのような感じで押しこむとちょっと戻って固定されます。
その後、 HDMIディスプレイ、USBキーボード、LANケーブルを接続した後にMicroUSBを接続して電源を投入します。

OSインストール

電源を投入するとダラダラと起動メッセージが流れた後にGUIが表示されます。
ここでは「Raspbian」にチェックして「Install」をクリックします。ダイアログが表示されたら「Yes」をクリック。その後20〜30分でRaspbianのInstallが完了します。
慣れるとRaspbianのチェックボックスにカーソルを置いておいて「クリック」→キーボードの「I」→キーボードの「Y」と高速化できます。

Raspberry Pi初期設定

電源を投入するとダラダラと起動メッセージが流れた後にraspi-configという初期設定画面が表示されます。ここでは以下の項目を設定します。
- Internationalisation Options → Change Locale
  言語設定です。初期は「en_GB.UTF8 UTF8」が選択されています。これを「en_US.UTF8 UTF8」「ja_JP.UTF8 UTF8」の2つを選択し、defaultを「en_US.UTF8」に変更します。
- Internationalisation Options → Change Timezone
  タイムゾーンをAsia/Tokyoに変更します。
- Advanced Options → Hostname
  任意の名前に変更します。
- Advanced Options → SSH
  Enableに変更します。
- Advanced Options → SPI
  Enableに変更します。

ここまで変更したら「Finish」を選択して「Enter」ッターン。
ちなみにraspi-configはキーボードしか使えません。上下左右を駆使してください。

「Enter」ッターン後、再起動が終わりログインプロンプトが表示されるまで待ちます。
ログインプロンプトが表示されたらユーザ名:pi、パスワード:raspberryでログインします。

Raspberry Piネットワーク設定

ここまででRaspberry Piにコンソールログイン出来るようになりました。後はRaspberry PiをWifiでインターネットに接続出来るようにする必要があります。またメンテナンス性を考えると都度ディスプレイ&キーボードを接続するのは面倒なので外部からSSHでログイン出来るようにします。
今回は全てコンソールからやったので、まずはvimをインストールします。
pi@ras12 ~ $ sudo apt-get install vim
次にネットワーク設定を変更します。/etc/network/interfacesを編集してDHCPでIPアドレスを取得させます。
sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp ← staticをdhcpに

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp ← staticをdhcpに
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
次にWifiのSSID/KEYを設定します。
pi@ras12 ~ $ sudo bash
root@ras12:/home/pi# wpa_passphrase awsrobo01 awsrobo01 >> /etc/wpa_supplicant/wpa_supplicant.conf
root@ras12:/home/pi# exit
ここまで。後はLANケーブルを外して
pi@ras12 ~ $ sudo reboot
で、起動を待ちます。
数分後、Raspberry Piの無線LANが有効になっていることを祈りつつPC側から
okeee-mba:~ okeee$ ssh pi@ras12.local
として接続します。「ras12」はhostnameに設定した名前です。passwordを聞かれたら「raspberry」でEnterをッターン。
接続出来ない場合は今までの設定を見直します。ちなみに20台全て1発で成功しました。

Raspberry Piキッティング完了

これでRaspberry Piのキッティングは完了です。1台あたり平均1hくらいで出来ると思います。慣れてくると刺し身たんぽぽなので並列度を上げてサクサク出来ます。
あとはAWSロボのBodyを自由な発想で作成してRaspberry Piをつないであげれば完成です。

(補足①)Wifi接続設定の変更方法

JAWS-UG神戸に参加した方のRaspberry Piには会場のWifi接続情報が設定されているため、そのままでは他の場所で接続出来ません。以下の手順で使う場所のWifi設定を行ってください。

A. HDMIディスプレイ、USBキーボードがある場合

この場合は簡単です。HDMIディスプレイ、USBキーボードを接続してRaspberry Piを起動し、以下の手順でWifi設定を行います。
pi@ras12 ~ $ sudo bash
root@ras12:/home/pi# wpa_passphrase SSID KEY >> /etc/wpa_supplicant/wpa_supplicant.conf
root@ras12:/home/pi# /etc/init.d/networking restart
SSID/KEYの部分は接続先のWifi設定に読み替えてください。

B. HDMIディスプレイ、USBキーボードがない場合

この場合、なんとかしてJAWS-UG神戸会場のWifi接続情報で接続し、Wifi設定を行う必要があります。私は以下の方法でWifi設定を行いました。

1. iPhoneのテザリング設定を変更する。
JAWS-UG神戸会場のWifi接続情報は、SSID:awsrobo01、KEY:awsrobo01でした。
自前のiPhone(スマホ)のテザリング設定を一時的に変更します。

2. Raspberry PiとPCをiPhoneのテザリングに接続する。
ここはおそらくiPhoneのテザリング/Wifi共有を有効にすればそのまま繋がるはず。

3. Raspberry PiにPCからSSH接続し、Wifi設定を行う。
ここはAの場合と同様です。私のiPhone(5s)の場合、会場で利用していたhostnameでの接続がそのまま使えました。

他には家庭の無線LAN設定を一時的に変更する、とかでも大丈夫だと思います。注意点としてはルータ(iPhone、家庭用ルータ)によってhostnameでの接続が出来ない場合があります。その場合はIPアドレス(適当にDHCP範囲にping打って返ってきたらそれ)でのアクセスとなります。

(補足②)Raspberry Piが上手く動かない場合に確認するポイント

1番多いのは電源です。MicroUSBケーブルからの給電になりますが、電流容量が足りないと変な動きをしたり暴走したりします。よくあるiPhone/スマホなどに付属するプラグは1AでRaspberry Piの安定稼働には足りません。iPad/タブレットに付属するようなもの(2A以上)、大容量の電源供給が出来るアダプターを利用してください。
ノートPCのUSBポートなどでも足りない場合があります。変な動きをする場合は電源を最初に疑ってくだだい。
もう1点、サーボモータが動かない場合は結線に誤りがある場合があります。こちらも正しく接続できているか確認が必要です。

(補足③)AWSロボのBodyの設計図とか工夫とか 2015/06/30 23:39追記

ADSJ清水さんからAWSロボのBodyの設計図を公開いただいたのでリンクを置いておきます。
https://github.com/shimy/awsrobo
A3用紙に印刷してハサミなどで切ってつかってください。キンコーズとかで板目表紙に印刷することもできます。
実際にやってみた感じだと腕の部分とサーボモータの取り付けで腕の強度不足がありました。ここはダンボールとか厚紙を腕パーツの内側に貼るなどして補強するといいです。
あと、装飾時にクレヨンを使うとその上にテープを貼ることが出来ません。クレヨンの上にラッピングとかするといいと思います。
また、頭パーツを胴体パーツに完全に固定してしまうとAWSロボ自体のメンテナンス性が損なわれます。頭パーツと胴体パーツを1点止めで接続すると頭を開いてケーブルを胴体パーツに格納することが出来るのでオススメです。

頭パーツを開いてケーブルを格納するとこんな感じに。胴体パーツの後ろの切れ込みはケーブルを外に出す場合に通すスペースです。
作った後、持ち運びが大変だったりします。ここではコンビニのビニール袋が便利です。500mlのペットボトルを1本買った際に入れてくれる小さめ縦長のビニール袋がジャストフィットします。1番下に重いRaspberry Piを置いてその上にAWSロボを置くといい感じになります。

まとめ

初めてRaspberry Piをちゃんと触りましたが簡単でした。Windows10の導入とかもできるので時間あったらやってみたいと思います。後は少し前に届いたRingZEROを組み合わせて何か出来ないかなぁと。
今回のロボ作成手順はそのうちJAWS-UG公式に公開されるとのことなので、夏休みとかに全国各地で開催されるといいなーと思います。夏休みの自由研究とかにAWSロボは如何でしょう。
今回の企画を進めていただいたdigital cubeの小賀さん、その企画にのってくれたADSJ清水さん、お手伝い頂いた他の皆さまに感謝感謝です。

最後は少ないですが例によって写真で。ではでは。