2019年2月23日土曜日

Raspberry Pi 3B+ SDカード 修復

Raspberry Piを2013年の7月から使っているけど
始めて、SDカードの問題でシステムが立ち上がらなくなった。

原因は、電源のブチ切れ

ただ、対象のマシンはMySQLを運用していたので、DBのデータを可能な限り復旧させたかった。

それで、いろいろ調べて結局VMwareを使って修復作業
MacでFUSE使ったけど、一部のファイルの救出はできたけど、read onlyの為にSDカードの復旧はできず。
DBのフォルダーは、Xが付いたままでした。その他にも試したけど ZVR Xも対応できなかった。
で、一番面倒くさそうなVMwareを使う事に。

昔のVMwareしか知らないので、抵抗感もあったけど、、、
ビックリVMware凄いじゃん

最初は無料版をインストールしたけど、Proのライセンスを購
これは、Raspberry Piが無くてもWindowsマシンで開発ができるメリットが大きいと判断した。

1.VMwareのインストール

これは、ダウンロードして、インストールして終わり
詳しい事は、他の方のブログを参照

2.VMwareに仮想OSインストールと設定

Raspberry Piとの関係を考えて、Debianをインストール
Debianのサイトから、isoイメージをダウンロードし、このイメージを使って仮想マシンのセットアップ

fsck -fn /dev/sdb2 実行中

3.修復

rootでログイン
対象のSDカードをPC(Let's note)のUSBにBuffaloのアダプター経由で接続。MCR-A27/U2という大昔のモノですが、これで接続する事によりDebianが自動的に認識をしてくれた。




df で、マウント先とデバイスを確認
/dev/sdb2でした。ちなみに/dev/sdb1は、/boot

fsck -fn /dev/sdb2
エラーのオンパレード。too many なんてメッセージ出てくるし (泣)

意を決して、、、
fsck -fy /dev/sdb2

あれ?
エラー....fsckは、e2fsckを呼びだしているから

e2fsck -p /dev/sdb2
マウントされているからダメ!

umount /dev/sdb2

e2fsck -p /dev/sdb2
なんか、すぐ終わり、不安になり

fsck -fn /dev/sdb2
出るわ出るわエラー

fscl -fy /dev/sdb2
54GBもあるから、、、時間がかかる。でも進んでいる。

もう一度、-fnオプションで、、、だいぶ減ったけどエラー
で-、-fyオプションで、、、

(4)結果

ダメでした。
成果は、VMwareがとっても便利な事が解った事(笑)

Peace!!



2019年2月18日月曜日

Raspberry Pi と CAN接続

僕は、複数のRaspberry Piを使ってロボットを開発している。

問題になるのは、Raspberry Piの同期で、、、

今までは、GPIOを使って同期をとっていたけど

これからは、CAN接続で同期をとる

そんな事をしなくても、Wifiでやればいいじゃんと思う人もいると思うけど

でも、、、その質問には答えない

こんな感じで

Peace!!



2019年2月10日日曜日

lighttpd 最新版をbuild , 環境設定する時の手順

lighttpd は、ロボットのHTTP通信で使っている
なんといっても軽量で早い

これはでは、一度 aptでインストールしてから、上書きしていたけど、
最初から、最新版のインストールしちゃう手順。

まぁ、シェル化すればいいんだけど、それは今度



手順は、下に記述しました。

Peace!!

#-----------------------------------------------------------
#step1 install
#-----------------------------------------------------------
mkdir tmp
cd tmp
wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.53.tar.gz
tar xvf lighttpd-1.4.53.tar.gz
cd  lighttpd-1.4.53
sudo apt-get install libpcre3-dev bzip2 libbz2-dev
./configure
make
sudo make install
sudo ldconfig

#-----------------------------------------------------------
# step2 systemd
#-----------------------------------------------------------
which lighttpd
sudo cp doc/systemd/lighttpd.service /lib/systemd/system
sudo vi /lib/systemd/system/lighttpd.service
# change /usr/sbin/lighttpd -> /usr/local/sbin/lighttpd

sudo systemctl enable lighttpd.service

#-----------------------------------------------------------
# step3 /etc/lighttpd
#-----------------------------------------------------------
sudo mkdir /etc/lighttpd
sudo cp doc/config/lighttpd.conf /etc/lighttpd
sudo cp doc/config/modules.conf /etc/lighttpd
sudo cp -r doc/config/conf.d /etc/lighttpd

cd /etc/lighttpd
sudo vi lighttpd.conf
# var.server_root = "/var/www"
# #server.use-ipv6 = "enable"
# server.username  = "www-data"
# server.groupname = "www-data"
sudo vi modules.conf
# "mod_alias"
# include "conf.d/cgi.conf"

sudo vi conf.d/cgi.conf
#######################################################################
##
##  CGI modules
## ---------------
##
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modcgi
##
server.modules += ( "mod_cgi" )

##
## Plain old CGI handling
##
## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini.
##
#cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
#                               ".cgi" => "/usr/bin/perl",
#                               ".rb"  => "/usr/bin/ruby",
#                               ".erb" => "/usr/bin/eruby",
#                               ".py"  => "/usr/bin/python" )
#
##
## to get the old cgi-bin behavior of apache
##
## Note: make sure that mod_alias is loaded if you uncomment the
##       next line. (see modules.conf)
##
#alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )
alias.url += ( "/api" => server_root + "/api" )
$HTTP["url"] =~ "^/api" {
   cgi.assign = ( "" => "" )
}

##
#######################################################################

#-----------------------------------------------------------
# step4 /var/www /var/log/lighttpd /var/run/lighttpd.pid
#-----------------------------------------------------------
sudo mkdir /var/www
sudo mkdir /var/www/htdocs
sudo mkdir /var/www/api
cd /var/www/htdocs
sudo vi index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lighttpd alive</title>
</head>
<body>
<p>lighttpd server success/p>
</body>
</html>

sudo chown -R www-data:www-data /var/www

sudo mkdir /var/log/lighttpd
sudo chown -R www-data:www-data /var/log/lighttpd

sudo touch /var/run/lighttpd.pid
sudo chown www-data:www-data /var/run/lighttpd.pid

sudo systemctl start lighttpd

#-----------------------------------------------------------
# step5 cgi
#-----------------------------------------------------------
cd /var/www/api
sudo vi test.c

#include <stdio.h>

void main(){
        printf("Content-type: text/plain\n\n");
        printf("Hello, World!");
        return;
}

sudo gcc test.c -o test


//EOF

2019年1月24日木曜日

Set up CAN device and software on Raspberry Pi 3B+

自分なりの忘備録です。

まずは、こんな感じ

とっても参考になったのは、こちらで、ありがとうございました。

OBD2(CAN)で自動車と通信(ソフト編)
Raspberry Pi で CAN通信(準備)

でも結局、大本のこちらで確認した。
上記のURLもここを見ている。
[quick-guide] CAN bus on raspberry pi with MCP2515



こんな感じで、CAN コントローラMCP2515との通信もOK




まず、ネットで購入したRaspberry Piを対象のCANシステムに接続するためのモジュールは、写真上のモジュール
USB接続の数万円のモノから、このモジュールのように$2のモノまでいろいろ、、、
中国製だから、本当にMCP2515は怪しいけど、、、
もう、昔のような状態ではないと思うので、、、

このモジュールは、Amazonでもいろいろあり、、、どれが本物?
そもそも、本物があるのか?
そんな感じで、同じようなものがたくさんある。

ただ、いずれにせよ、このモジュールのややっこしいのは、

[quick-guide] CAN bus on raspberry pi with MCP2515

に書いてあるように、回路を切らないとならないこと
あと、V5の電源を基盤に接続する事



ただ、切らなくても、CANのソフトは動いたのだぁ、、、
テストは、これでする。

手間取ったのは、5Vの電源を基板上にはんだ付けする事
直径の小さな穴をあけてRaspberry Piの5V GPIOをつなげる加工をする。



この加工は、穴あけ、半田の乗りが悪いなど、意外と大変で手間取った。

これができれば、GPIO 25番を INTとした下の配線をすればよい。
INT の番号は、config.txtに設定する時に必要なので決めてする。
まぁ、いろいろな例もGPIO25だから25で良いとおもう。


配線は、以下の様に接続

Module    Pin No

INT              22
SCK            23
SI                19
SO               21
CS               24
GND            25
VCC(3.3)     17

VCC(5V)        2

CAN GND      6

ソフトは、いろいろな所に書いてあるように

sudo vi /boot/config.txt

dtparm=spi=on

dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
dtoverlay=spi-bcm2835

この25番が、moduleのINT

CANのソフトをインストール

git clone https://github.com/linux-can/can-utils.git
cd can-utils
./autogen.sh
./configure
make
sudo make install
reboot

立ち上がってcan0があればOK

 /sys/class/net/can0

こんな感じでも確認できる
dmesg
[    4.160946] CAN device driver interface

[    4.201788] mcp251x spi0.0 can0: MCP2515 successfully initialized.


で、CANのおまじない

sudo ip link set can0 type can bitrate 500000 loopback on
sudo ifconfig can0 can0: flags=128<NOARP> mtu 16 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

candump can0 read: Network is down


もういっちょおまじない,,,というか最初にこうすればよい(笑)

sudo ifconfig can0 up

つまり、下記ような簡単なシェル。ネットの起動は最終的にはserviceにする
loopback on は自己チェックの時だけなのでCANに接続する場合

#!/bin/bash
sudo ip link set can0 type can bitrate 500000
sudo ifconfig can0 up

Raspberry PiとMCP2515との間での通信テスト

candump can0

さらにもう一つターミナルを開いて入力する

cansend can0 00001234#FFAA00CC22DD33FF

と、入力すると、candumpを入力したターミナルに2枚目の写真のように現れる。

Peace!

2019年1月20日日曜日

An Installation of OpenCV4 on Raspberry Pi 3B+

OpenCV4に本格的に移行する為に、Buldする

真っ新のRaspiにインストールする。
これは僕のやり方なのでディレクトリーは読み替えて下さい。

cd
time sudo apt install -y \
    build-essential cmake pkg-config \
    libjpeg-dev libtiff5-dev libpng-dev \
    libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
    libxvidcore-dev libx264-dev \
    libgtk2.0-dev libgtk-3-dev \
    libcanberra-gtk* \
    gfortran \
    python2.7-dev python3-dev \
    libavresample-dev libtesseract-dev libleptonica-dev \
    libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev libhdf5-dev \
    libatlas-base-dev liblapacke-dev \
    python3-numpy python-numpy libjasper-dev

大体、7~8分。3B+は早い (^^)

mkdir prj
cd prj

wget https://github.com/opencv/opencv/archive/4.0.1.zip -O opencv-4.0.1.zip
wget https://github.com/opencv/opencv_contrib/archive/4.0.1.zip -O opencv_contrib-4.0.1.zip
unzip opencv-4.0.1.zip
unzip opencv_contrib-4.0.1.zip

cd opencv-4.0.1
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.0.1/modules \
    -D ENABLE_VFPV3=ON \
    -D ENABLE_NEON=ON \
    -D BUILD_TESTS=OFF \
    -D WITH_TBB=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_SKIP_PYTHON_LOADER=ON \
    -D OPENCV_PYTHON2_INSTALL_PATH=/usr/local/lib/python2.7/dist-packages \
    -D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.5/dist-packages \
    -D OPENCV_GENERATE_PKGCONFIG=ON \

    -D BUILD_EXAMPLES=OFF ..
make -j4
sudo make install
sudo ldconfig

cd ../samples/cpp
g++ `pkg-config opencv4 --cflags --libs` facedetect.cpp -o facedetect -std=c++11

./facedetect  --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 ../data/lena.jp

お久しぶりです Lenaさん

Peace!!



2019年1月14日月曜日

これからの生産の自動化

生産の自動化は、どの業種でも、これから大事な事であり、僕もその分野にだんだん足を突っ込んでいる。

まだ、いろいろ自分の考えをまとめている途中だけど、こんな感じで考えている。

・機械が定められた動作を繰り返す

・機械が能力範囲の仕事を自律制御する。つまり、人が制御プログラムを書き換える事がない。かつ、最適解を求めて学習する。

・生産プロセスにおけるバッファ―を人が制御する。

・生産プロセスにおける工程管理を自律的に制御する。

つまり、個の機能とプロセスの機能だけど、この協調が最も必要なのだろうと、、、

これって、実は人の組織と同じで、人が自律的に動き、そして彼らが協調する組織ってやはり、パフォーマンスが高いわけで、、、

このように考えた時、必要になる事がいろいろ見えてくる。

それを、一つ一つ作って、実現するのが今の仕事、、、

世界中に工場を持つグローバル企業と共同研究をする事になった。

また未踏の世界に、足を突っ込んでしまった。

その時のデータ集めに、このロボットが役立つとは、考えてもみなかった。


Peace!!

2019年1月7日月曜日

Memo: /var のram化

lighttpdが立ち上がらなくなり、、、

原因を調べると

立ち上がり時に、/var/log/lighttpd    が無い

ムムム、、、

$ cat /etc/rc.local
............
............
#
# create folder on ram disk
#
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/samba
mkdir -p /var/log/fsck
mkdir -p /var/log/apt
mkdir -p /var/log/ntpstats
mkdir -p /tmp/motion
chown root.ntp /var/log/ntpstats
chown root.adm /var/log/samba
touch /var/log/lastlog
touch /var/log/wtmp
touch /var/log/btmp
chown root.utmp /var/log/lastlog
chown root.utmp /var/log/wtmp
chown root.utmp /var/log/btmp

setterm -blank 0
exit 0

あれ?
こんな事、誰がしたのかしら、、、???
忘れている

$ cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=ec1fea93-01  /boot           vfat    defaults          0       2
PARTUUID=ec1fea93-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
tmpfs     /tmp            tmpfs    defaults,size=84m,noatime,mode=1777      0       0
tmpfs     /var/tmp        tmpfs    defaults,size=16m,noatime,mode=1777      0       0
tmpfs     /var/log        tmpfs    defaults,size=32m,noatime,mode=0755      0       0

で、、、/etc/rc.local に2行を付け加えて一件落着

mkdir -p /var/log/lighttpd
chown www-data:www-data /var/log/lighttpd

しかし、自分でいつしたのかしら、、、思い出せない(泣)

Peace!!