ロボットを作る

子供のころ、映画「STARWARS」 を観てワクワクし、ガンプラにドキドキしていた。時間が経つのも忘れてしまう、そんな時間をもう一度、取り戻すために、Raspberry pi を使って、オヤジがロボット作りに挑戦する!

やり始めてみると、なかなか思い通りに行かない。時間の経つのも忘れて悪戦苦闘中。 「こんなちっちゃな Raspberry Pi で、こんなことができるんだ」を日々実感している今日この頃。

気になっていた

O'Reillyの本
「ゼロから作るDeep Learning
―Pythonで学ぶディープラーニングの理論と実装」

を買ってみた。



レベル感が私にぴったりで、すごく丁寧にわかりやすく、タイトルどおり「ゼロから」説明されている。

まだ半分しか読んでないのだが、じっくり繰り返し読んでいきたい本である。


■RaspberryPi出直し編




訳あって再インストールを。デスクトップ環境が「PIXEL」になってる。

Raspbian Jessie with PIXEL


NOOBS
 Version: 2.1.0
 Release date: 2016-11-29

このOSを使う。
いつもの手順で。
 PCにosをdownload、解凍
 PC上でSDカードに解凍後全部を丸ごとcopy
 RaspberriPi3にSDカードさして、電源on
 Raspbian選んで、画面下の言語選択を「日本語」にして進む
 インストールに若干時間が掛かるが、何事もなく終了

PIXELがなんかいい。デフォルトでの背景がかっこいい。そういわれると軽い(気もする)


sudo apt-get update
sudo apt-get upgrade


■キーボードを日本語設定に。 私のは、ELECOM TK-FCM062

Preferences > Raspberry Pi Configration > Localization タブ
> Keyboad: 
  Country: Japan
  Variant: Japanese(PC98-xx Series)

を選択して終わり。

■日本語入力を

■ python3 を jupyter で
やりたいのは、jupyter notebook で、numpy、matplotlib で Deep Learning のお勉強
「ゼロから作る Deep Learning」のため。 python3 と numpy はもとから入ってた。



$ sudo pip3 install jupyter

※sudo でないと、permittion error で終わる。

$ sudo pip3 install matplotlib

で、確認
$ jupyter notebook

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x=np.arange(0,5,0.1)
y=np.cos(x)
plt.plot(x,y)

動いた。


RaspberryPi3 に、やっと到着した USB マイクを動かしてみる。




 このUSBマイクは、型号:MI-305 made in China で。

ネット情報をもとに、以下すすめる。

差し込んで、立ち上げただけ。
$ lsusb
Bus 001 Device 006: ID:xxxx:xxxx C-Media Electronics, Inc. CM108 Audio Controller
 :

$ arecord -l
カード 1: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
 # USBマイクの カード番号:1/デバイス番号:0

$ amixer sget Mic -c 1
 # マイク音量の確認。 カード番号: 1

$ amixer sset Mic 16 -c 1
 # マイク音量の設定をMAXの 16

$ arecord -M -d5 -twav -fdat voice.wav -D plughw:1
  # マイク入力音声をWAVファイルへ保存
 1.サンプリングフォーマット: 48kHzステレオ(-fdatで DAT品質)
 2.5秒間(-d5で 5秒)
 3.保存ファイル名: voice.wav
 4.使用する PCM 


このあと、aplay で、voice.wav を再生すると、録音できてた。
とりあえず簡単に動いた。

続きを読む

Raspberry Pi3 に Ubuntu を入れる。



RaspPi3をネットで買うときに、ついでに UDB wifi ドングルを買ってしまったが、Pi2と違い Pi3 は Wifi 付いてた(on board)。しまった。

Ubuntu の中でも、RaspPi3対応な、Ubuntu MATE を以下からとってくる。
https://ubuntu-mate.org/download/

7-zip で、xz ファイルを解凍して、sdカードに書き込む。


■ disk容量

Ubuntu MATEインストール後は、本来のSDカード容量に関係なく、8G程度になるらしい。俺のは16Gなのに有効に使えてない。
先達さんのWebに書いてあった手当を行う。

$ sudo fdisk /dev/mmcblk0
  Command (m for help): d
  Partition number (1,2, default 2): 2
  Command (m for help): n
  Select (default p): p
  Partition number (2-4, default 2): 2
  First sector (133120-120946687, default 133120): (Enter)
  Last sector, +sector of +size{K,M,G,T,P} (133120-120946687, default 120946687): (Enter)
  Command (m for help): w
$ sudo reboot
<再起動>
$ sudo resize2fs /dev/mmcblk0p2
$ df -kh で確認


■ 日本語入力
OSインストール後にGUI画面から日本語を選ぶと「表示」は日本語にあるが、「入力」ができない。

システム > 設定 > ユーザ向け > 言語サポート

を開くと ”言語サポートが完全にはインストールされていません” と出てくるのでインストールを。
インストール完了後に キーボード入力に使うIMシステム を fcitx にする。
ログインしなおす。



Tensorflow を勉強するために用意されているチュートリアルをやってみようと思った。
Qiita の記事にも登場しているので先達さんたちの日本語記事を参考にやっていこう。

本家チュートリアル
https://www.tensorflow.org/versions/master/tutorials/index.html
では、以下が用意されている。下から3つ目のように学習データの落とし方も含んでいるのだが。

 MNIST For ML Beginners
 Deep MNIST for Experts
 TensorFlow Mechanics 101
 TensorFlow Serving
 Convolutional Neural Networks
 Vector Representations of Words
 Recurrent Neural Networks
 Sequence-to-Sequence Models
 Mandelbrot Set
 Partial Differential Equations
 MNIST Data Download
 Image Recognition
 Deep Dream Visual Hallucinations



まずは一番初級 MNIST For ML Beginners から


(tensorflow)take@ubuntu:~/tensorflow$ more mnist_for_ml_beginners.py
# -*- coding: utf-8 -*-
import tensorflow as tf
import input_data

# MNISTデータを取り出す。訓練データとテストデータで、画像と0-9のラベル
# mnist.train.images
# mnist.train.labels
# mnist.test.images
# mnist.test.labels
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# Training用の入れ物の準備
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

# y_ : 正しい答え
# y  : 予測した答え
y_ = tf.placeholder(tf.float32, [None, 10])

#  x*W+b を softmax と通し、y にする。
y = tf.nn.softmax(tf.matmul(x, W) + b)

# Training指標の準備
# 訓練するために、悪い(or 良い)を定義する。ここでは悪い(費用:コストがかかる)ことを
# 交差エントロピーで計算する。
cross_entropy = -tf.reduce_sum(y_*tf.log(y))

# その費用を最適化するために、最急降下法を使う
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

#
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)


for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})

# 評価のために正解率を計算
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
(tensorflow)take@ubuntu:~/tensorflow$



走らせてみる。



(tensorflow)take@ubuntu:~/tensorflow$ python mnist_for_ml_beginners.py

Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting MNIST_data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz

0.9183
(tensorflow)take@ubuntu:~/tensorflow$

正解率は、91.8%



Ubuntu(Vmplayer 上の GuestOS) に Tensorflowを入れてみる。

$ uname -a
Linux ubuntu 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$


# $ python —version
Python 2.7.6

# virtualenv による環境準備

$ pip install virtualenv  ←  エラーになった
Could not find any downloads that satisfy the requirement vertualenv

$sudo apt-get install python-virtualenv

$ mkdir ~/tensorflow
$ virtualenv -—system-site-packages ~/tensorflow
$ cd ~/tensorflow
$ source bin/activate

# TensorFlowのインストール
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl

# お約束の Hello world! を
(tensorflow)$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import tensorflow as tf
>>> hello=tf.constant('Hello, Tensorflow!')
>>> sess=tf.Session()
>>> print sess.run(hello)
Hello, Tensorflow!
>>> a=tf.constant(5)
>>> b=tf.constant(17)
>>> print sess.run(a+b)
22
>>>

フランスのAldebaran社が開発した NAO を見せてもらった。

58cm、5.4kg のロボット。そこそこ大きなおもちゃだ。125万するけど。。。。

最近では、ホテルの受付コンシェルジュとして使われてるのがニュースになってた。
NAO自身が、お客様とのインターフェースになって、複雑な会話は、wifi 経由でクラウドの自然言語処理を行っているらしい。

ドコモのしゃべってコンシェルジュなどに繋げることができるのだろう。


Aldebaran社は、ソフトバンクグループで、あの Pepper を作った会社。



届いた!

image

























箱を開ける。
ケーブルとか and タッチスクリーンが。

image













































マニュアル的なのがなかった。箱の裏にURLが。

Raspberry Pi 7” Touchscreen Display
https://www.element14.com/community/docs/DOC-78156 

ここを見ながら組み立てる。ただ、4までの接続&スタンドオフ止め済みだった。

image


























残りのリボンケーブル接続、ジャンパーの赤黒をつなげて、とりあえずタッチスクリーンにつながずに、手持ちモニターで立ち上げる。


sudo apt-get update
sudo apt-get upgrade
タッチパネルの仮想キーボードも入れておく
sudo apt-get install matchbox-keyboard


このタッチスクリーンが 800×480 で、自動的に認識させるために、

sudo raspi-config
 8 Advanced Options
   A1 Overscan 
     Disable 
を選んで、保存して再起動!



酔った勢いで買ってしまった。



タッチパネルのが欲しかったので、まずはこれを。

届くのが楽しみだ。


「実例で学ぶ Raspberry Pi 電子工作」 


第4章 P.90「インターネット上の天気予報データを利用しよう」
をやってみる。

温度センサーで認識した温度と、Livedoor天気予報 東京 からデータを持ってきた今日・明日の天気予報と最高・最低気温を液晶LCDに表示する。


部材は前作の本で使ったものと同じ。

 温度センサー: ADT7410
 LCDモジュール: AQM0802

 以前、ハンダ付けを済ませていたのでブレッドボードに繋げるだけ。サクサクすすめる。


P.108「4.3 LCDへの文字の表示」

サンプルプログラムの bb2-04-03-lcd-practice.py を動かしてLCD表示を確認。
本のとおり、カタカナも表示させてみる。


続いて、本番 bb2-04-04-lcd-4modes.py の4モード切替バージョンを動かす。
タクトスイッチを押して、モードを切り替えてみる。動いた。

↑このページのトップヘ