ロボットを作る

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

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

Raspberry Pi2 で、物体追跡 の続き。

適当に動かしてると物理的にぶつかり、サーボが悲鳴を上げていた。このままだと壊れる。そのため、
そもそも思い通りにカメラを動かせるのかを試すために、サーボ SG90 の動かし方を調べる。

以下のpythonサンプルを読み解きながら進める。
https://github.com/adafruit/Adafruit_Python_PCA9685

以下の データシートの Example1 を見て、計算方法を理解できた。
PCA9685データシート



カメラマウントで、2つのサーボを使うのだが、実際に動かして

 pwm.set_pwm(channel, on, off)

の off を実測する。縦廻旋は、物理的に横廻旋サーボにぶつかるところや配線でぶつかるところを考慮して許容範囲を狭くすると、以下のようになった。同じ SG90 だが基本の値が違っていたのは愛嬌か、何かミスってるか。

channel 0 横廻旋(左右) 104 - 296 - 491
channel 1 縦廻旋(上下) 116 - 309 - 500 ⇒ 165 - 309 - 447

この値(min - center - max)を使えば、壊れないだろう。


Installing ROS Indigo on the Raspberry Pi

 OS:Raspbian GNU/Linux 8 (jessie)
 ROS:indigo
 python:2.7.9



Ros-comm を入れる。(Desktopを入れればよかった。と後で反省)

基本は ROS のページどおりだが、いくつか地雷を踏んだ。(後で反省)

◆empy で落ちる
 $sudo apt-get install python-empy

◆cpp-comm あたりで落ちる
 $sudo apt-get install libconsole-bridge0.2 libconsole-bridge-dev

◆rospack で落ちる。Could NOT find TinyXML
 $sudo apt-get install libtinyxml-dev

◆roslz4 で落ちる。lz4 includes not found
 $sudo apt-get install liblz4-1 liblz4-dev

◆rosbag_storage で落ちる
gtest not found, C++ tests can not be built.
$sudo apt-get install libgtest-dev

Could NOT find BZip2
$sudo apt-get install libbz2-dev

◆roscpp

warning: unused parameter /// serializedLength

超超時間がかかった上にエラーが出てとまる。

make[1]: *** [CMakeFiles/roscpp.dir/all] Error 2
Makefile: 138: recipe for target 'all' failed
make: *** [all] Error 2
<== Failed to process package 'roscpp':

どうも swap が足りないらしい。swap増やす。defaut 100M から 1Gへ。

sudo vi /etc/dphys-swapfile

CONF_SWAPSIZEを1024MB(1GB)
CONF_SWAPSIZE=1024

$ sudo systemctl stop dphys-swapfile
$ sudo systemctl start dphys-swapfile
$ free -h  増えたのを確かめる。

インストールはできた。

$ roscore で落ちる。

$ sudo apt-get install python-netifaces

これでやっとインストールできた。振り返ると 3.2 Resolve Dependencies を飛ばしてた自分のせいでこんな面倒になっていただけだった。


で、なにか動かしてみたい。チュートリアルに出てくる tutlesim を動かす。

余計な環境変数を消して(unset)から
$ source /opt/ros/indigo/setup.bash
をしてから rosコマンドを実行する。

ROSのノードを理解する
ROSトピックの理解

いきなり、rosdep install turtlesim で、「turtlesim なんてパッケージない!」と。

$ rosinstall_generator turtlesim --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-custom_ros.rosinstall
$ wstool merge -t src indigo-custom_ros.rosinstall
$ wstool update -t src
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie

ーーーーーーー
rpt がない。どうも ROS-comm を入れたあとに Desktop 部分を入れるのは苦行のような。
いちから入れなおそうか。

http://flow-developers.hatenablog.com/entry/2016/06/05/172041

$ sudo apt-get install libblkid-dev e2fslibs-dev libaudit-dev

いくつか本が出てた。悩まずにこのとおりにやれば早いかも


Raspberry Pi2 で、サーボを使って、物体追跡をする。このサイトを見て、

Raspberry Pi サーボモーターとOpen CVで物体追跡カメラ(Meanshift)
ArduinoとAdafruit 16-channel Servo Driverでサーボモーター多数制御

ブツを揃える、


これらを Amazon で Getした。この Qiita のサイトとは異なるブツだが、とりあえず安かったので買ってみた。
カメラは手持ちのヤツを使う。

◆サーボモータを動かす
i2c を有効にする

$ sudo apt-get install i2c-tools
$ sudo raspi-conifig

 > 5. interfacing options
     > P5 I2C

以下のように結線する。サーバを動かすために、Servo Driver基板中央に別途電源をつなぐ(6Vまでらしい)

   RaspPi2   16ch Servo Driver (PCA9685)
  -------------------------------------------------------------
    3.3V○   ○ GND
   I2C SDA○   ○
   I2C SCL○   ○ SCL
           ○   ○ SDA
     GND○   ○ VCC
        ○   ○


結線して、servo_test.py を動かすとちゃんと動いた。
# いかん! サーボモータが、動作電圧:4.8V(~5V) なので、乾電池は3つにしておこう。

PCA9685 16-channel 12bit PWM Fm + I2C-bus LED controller


◆カメラを動かす
$ sudo apt-get install libopencv-dev python-opencv


USBカメラと OpenCV で画像を表示させるサンプルプログラムはググると沢山でてくる。
ただ、最近のサンプルでないと遠回りする。
結局、
import cv2.cv  や CaptureFromCAM ではなく、以下に落ち着いた。(ターミナル上で、ctrl + c で終了)
これを camera.py に保存して、実行
import cv2

cv2.namedWindow("monitor")
vc=cv2.VideoCapture(0)

if vc.isOpened():
   rval, frame = vc.read()
else:
   rval = False

while rval:
   cv2.imshow("monitor", frame)
   rval, frame = vc.read()
   key = cv2.waitKey(10)
   if key == 27:
      break
cv2.destroyWindow("monitor")     

【追記 4/22】
自分の環境で、TightVNCで Raspiを動かしていた。 2行目の namedWindow で以下が出てこけた。

GdkGLExt-WARNING **: Window system doesn't support OpenGL.

で、ググったら、対処方法があったので試してみた。

$ sudo apt-get install libgl1-mesa-dri 
$ sudo reboot

で、これでもダメで、workaround(1) として

$ sudo apt-get install guvcview

をした。workaround(2) は、VNC をTightvnc をやめて、X11vnc 変えるとできるらしい。がやってない。
workaround(3) は、元に戻して、VNCやめて Raspi にモニター直結したら、もちろんOK。

Raspberry Pi3 で、NHKラジオ英語を定期的に録音して、ノートPC(Windows10)から聞く方法の備忘録。


RaspberryPi3

sambaをインストールして、とりあえず設定を。
printerは使わないので、[global] に printing =  bsd を入れる(?)
共有するフォルダ [/home/pi/REC] は、Windwos で [homes] で見える
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install samba

$ cd /etc/samba
$ sudo cp smb.conf smb.conf_org

$ sudo vi smb.conf

[global]
  printing = bsd

[homes]
  browseable = yes
  path = /home/pi/REC
 read only = no
 create mask = 0664
 directory mask = 0775

$ sudo touch /etc/printcap
最後の touch は、/var/log/samba/log.smbd にエラー吐いたので。


piアカウントで、sambaにアクセスするために。
$ sudo smbpasswd -a pi
New SMB password:  ←RaspPi3の pi アカウントのパスワードを。
Retype new SMB password:
Added user pi.

cronに入れる シェルプログラムは以下からもらってきた。
らじるらじるをrtmpdumpで録音する(8放送局対応)おまけで
https://gist.github.com/riocampos/5656450

crontab 設定。いつも迷う。
項目は、左から「分」「時」「日」「月」「曜日」
$ crontab -e
   :
10 09 * * 1,2,3,4,5 ~/bin/rec_nhk.sh NHK2 5 ~/REC enjoy_english
30 16 * * 7 ~/bin/rec_nhk.sh NHK2 75 ~/REC conversation


ノートPC

エクスプローラ > PC で右クリック > ネットワークドライブの割り当て

 ドライブ():Z:
 フォルダー:\\RASPBERRYPI\homes

 □ 別の資格情報を使用して接続する  ←チェックする

これでノートPC側から Raspberrypi3側に保存してある mp3 ファイルが聞ける。

以下に従ってインストールしてみる。

Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3



Raspberry Pi3 で
 Raspbian: 4.4.38-v7+  #938
 Python: 3.4.2
を使う。

URLのインストール手順のなかでも、

 cmake
 make

に恐ろしく時間がかかる。


気になっていた

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 にする。
ログインしなおす。



↑このページのトップヘ