ロボットを作る

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

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

習うより、慣れろ。

機械学習を勉強するのにさわって学んでみよう。

scikit-learn Tutorials


1.インストール。scikit-learn を入れてみる

 $ sudo apt-get install python-sklearn

これだけ。


2.動作確認。さわってみる。

Webの情報のとおり、いきなりコマンドを叩いてみる。
インストールパッケージに含まれるサンプルデータ digits を使う。

load_digits の Examples

 $ python
Python 2.7.3 (default, Mar 18 2014, 05:13:23) [GCC 4.6.3] on linux2
>>> 
>>> from sklearn.datasets import load_digits
>>> digits = load_digits()
>>> print digits.data.shape
(1797, 64)
>>> import pylab as pl
>>> pl.gray()
>>> pl.matshow(digits.images[0])
<matplotlib.image.AxesImage object at 0x2dfdef0>
>>> pl.show()
>>> 


【参考情報】
http://www.slideshare.net/tkm2261/scikit-learn 
http://sucrose.hatenablog.com/entry/2013/05/25/133021 
http://techblog.yahoo.co.jp/datascience/use_scikit-learn/ 

Raspberry Pi2 の起動時に warning が出る。
ずっと出ていたが、差し支え無かったので放ったらかしだった。
いまさらだが手当てしておこう。

kernel lacks cgroups or memory controller not avaiable, not starting cgroups [warn]



対処方法は、googleが教えてくれた。

/boot/cmdline.txt の elevator=deadline の後ろに、cgroup_enable=memory を入れる。

 変更前 rootfstype=ext4 elevator=deadline rootwait
 変更後 rootfstype=ext4 elevator=deadline cgroup_enable=memory rootwait

再起動。消えたことを確認した。 

うまく繋がったはずの wifiドングルが、つながらなくなった。


つながっているときは、

$ iwconfig 
wlan0     IEEE 802.11bgn  ESSID:"xxxx"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.432 GHz  Access Point: xx:xx:xx:xx:xx:xx 
          Bit Rate:150 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=67/100  Signal level=28/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

 $ cat /proc/net/wireless 
Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
 wlan0: 0000   67.   31.    0.       0      0      0      0      0        0

で、Link Quality もこれくらいあった。で、何かの拍子にネットが切れてしまう。


debugのコマンドをとりあえず残しておく。

 $ sudo wpa_supplicant -d -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf

ただ出力結果を見てもいまいち分からなかった。で、つながっているときに iwconfig をなんどか叩いてると Link Quality が、50以下になるときもあった。
で、おそらく wifi 電波の強さが関係しているんだと思う。

家のリビングに置いてある wifi ルータから RaspPi2 までは、廊下を挟んだ距離にあり、ドアを締め切っていた。念のためドアを開けっ放しにしたら、取りあえずつながるようになった。

増幅器でも買ってくるか。
 




いよいよラジコンのように切り離す。wifiドングルはうまく使えるようになったので、poweroff スイッチを付ける。

/etc/rc.local の exit 0 の前に以下を足す。

  sudo python /home/pi/Desktop/raspi-sample/10-01-sw-poweroff.py

本では、LCDも足すのだが、前にテストでLCDがうまく認識できてなかったのでスキップする。(改めてLCDにリトライしよう。と思いつつ。。。)
 
再起動。・・・・、途中で止まる。 がぁーーー、やってしまった。rc.local に追記した行の最後に & を忘れた。

えーーー、どうしよう。Goolge に聞いてみよう。すぐに答えを教えてくれた。



【Rasbian OSを single mode user で起動し、ファイル編集】

起動直後のRaspberryマークで、 shift + 上↑ で、cmdline.txt を以下のとおり追記する。

 dwc_otg.lpm_enable=0 init=/bin/sh console=・・・・・

このまま立ち上がっても、rc.local を編集できない。write権を与えるために remount

  # mount / -o remount,rw

これでめでたく rc.local を編集できて、うまく立ち上がった。


で、タクトスイッチで poweroff できた。
が、起動はスイッチじゃだめなので、電源抜き差しに。



そしてキャタピラ模型を組み立てる! こんな感じに。

DSC04905
DSC04904


ELECOM WDC-150SU2MBK を使えるようにする。



なにげにはまった。Raspberry Pi2 で、8188eu のdriver を入れるの巻。



ここをちゃんと読んでやるべし。
https://www.raspberrypi.org/forums/viewtopic.php?p=462982

ここにちゃんと書いてある。Pi2 は、

"a different one for Pi 2 with kernel 3.18.7-v7+ #755, 8188eu-v7-20150212.tar.gz."

と。使うgzファイル名が違うのだと。

まず、自分のOSバージョン確認。以下に #755 と出てる。

$ uname -a Linux raspberrypi 3.18.7-v7+ #755 SMP PREEMPT Thu Feb 12 17:20:48 GMT 2015 armv7l GNU/Linux


だから wgetするのも違う。

  $ wget https://dl.dropboxusercontent.com/u/80256631/8188eu-v7-20150212.tar.gz
  $ tar xzf  8188eu-v7-20150212.tar.gz
  $ ./install.sh


でOK!


そのあと、いろいろあったが結果的に以下に落ち着いた。

$ sudo cat wpa_supplicant.conf 
 
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="elecomXXXXX"
psk="PASSWORD"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}


これでやっと動いた。この Webも wifi 経由で書いてる。






ついにここまで来たぞ。
第10章「WebIOPiを用いたキャタピラ式模型の操作」


準備として、TAMIYAのキットを組み立てる。これは得意分野だ!

まずは、ギヤーボックスから。

 楽しい工作シリーズ NO.97
 ツインモーターギヤーボックス

DSC04897
DSC04898

と、思いきや、ちゃんと本を読んでから取りかかることに!


アームクローラー工作セットに付属するモータ1つのギアボックスと入れ替えるために、ちゃんと本を読んで、全体の工作ストーリーを理解してから取りかかることに。

 楽しい工作シリーズ NO.211
 アームクローラー工作セット


の説明書の応用編に「ツインモーターギヤボックスの取り付け」が出てきた。
本にも書いてあるが、ツインモーターギアボックスは、Cタイプで組む。

DCモータにコンデンサ(0.01μF=103)と25cm程の長めのケーブルをハンダ付けした。
DSC04899

モータドライバ2つを、左右のDCモータにつなげて、いざプログラム起動!

でけた。
 

商用のS/W。どうも避けて通れない感じのものか。否が応でも勉強しないといけない感じ?

MATLAB ans Simulink の新リリース 2015a。

新製品: Robotics System Toolbox



備忘録として残しておく。

ROS (Robot Operating System) とは?

日本語のチュートリアルがある。
http://wiki.ros.org/ja/

この ROS を Raspberry Piに入れる方法も出てた。
http://wiki.ros.org/ROSberryPi


これも勉強してみるか。

第9章の
 9.5 ブラウザのスライダの利用 〜RGBフルカラーLED
 9.6 タッチイベントの利用 〜DCモーターの速度調整
を本のとおりに。



ブラウザのスライダの利用では、4本足のLEDを利用。前回3つ必要だったときは検証をスキップしたが、今回1つだけの利用なので、ちゃんとやってみる。

一番長い足が、共通アノード(+)で、抵抗を3つ接触しないように組んで完成。
本のとおりスライダを動かして、RGBでの濃淡がきれいに変化した。

次の検証へは念のため(接触させないため)電源切ってから組み替える。


タッチイベントも本のとおり、さくっとできた。
iphoneで、真ん中よりにタッチすると弱めで、外よりにタッチすると強めになった。


ここまできたか。
今年1月下旬に、この本に出会ってゆっくりではあるが、ここまできた。

ついに第10章の戦車!!!!だぁ!!!!

「Raspberry Pi で学ぶ電子工作」(講談社ブルーバックス)


 

第9章 P.250「9.4 ブラウザへの温度センサの値の表示」



I2C接続して前に利用した温度センサ ADT7410 を使用する。

準備として P.251の
 $ sudo apt-get update
 $ sudo apt-get install libi2c-dev
 $ wget http://ftp.de.debian.org/debian/pool/main/i/i2c-tools/i2c-tools_3.1.0.orig.tar.bz2

とりあえず本のとおり、3.1.0 を入れる。3.1.1 があったが。
 $ tar xf i2c-tools_3.1.0.orig.tar.bz2
 $ cd i2c-tools-3.1.0/py-smbus
 smbusmodule.c を sampleのものと入れ替える。
 $ python3 setup.py build
 $ sudo python3 setup.py install

エラーなく、終わった様子。



で、前回同様に iphone から http://<rasp ip>:8000/bb/02/ へアクセスしたが、あれ?

取りあえず、rasp自身のプラウザからはアクセスでき、温度も表示したのでネットワークが問題か。/etc/init.d/webiopi restart とかしてみる。

wireshark で iphoneからアクセスされてるかを確認しようと、
 $ apt-cache search "tshark"

で、wireshark を見つけて入れた。
 $ sudo tshark -i eth0 -f "port 8000"

を実行して流れてる。
あれ、今度は iphone で見れた。なんだったのか?  結局?のまま続きを読む

↑このページのトップヘ