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+ & 4B

OpenCV4に本格的に移行する為にBuldする。  2019/8/12更新

最初に確認するのは、OpenCVのインストールページ

真っ新のRaspiにインストールする。
これは僕のやり方なのでディレクトリーは読み替えて下さい。
homeディレクトリーが散らかるのが嫌なので
~/prj/cv4を作りそこで作業をしている。
swapファイルは拡張する。
sudo vi /etc/dphys-swapfile
CONF_SWAPSAIZE=100 -> 1024
sudo /etc/init.d/dphys-swapfile restart
swapon             確認

RaspberryPi 4B  Buster
この組合せはまだ安定していないのかなぁ。
apt installでもエラーが発生する場合もあるし、build途中でもエラーが発生
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_compare_exchange_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_fetch_sub_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_load_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_store_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_fetch_add_8'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/version/CMakeFiles/opencv_version.dir/build.make:85: bin/opencv_version] エラー 1
make[1]: *** [CMakeFiles/Makefile2:12504: apps/version/CMakeFiles/opencv_version.dir/all] エラー 2
cmakeの赤字分が追加の回避設定

cd
time sudo apt install -y \
    build-essential cmake pkg-config libcurl4-openssl-dev intltool devscripts debhelper  ant \
    libldap2-dev libgtkmm-3.0-dev libarchive-dev \
    libjpeg-dev libtiff5-dev libpng-dev  libjpeg-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 \
    libblas-dev libeigen{2,3}-dev  libatlas-base-dev liblapacke-dev \
    python3-numpy python-numpy libjasper-dev

python2関連のライブラリーを削除した
time sudo apt install -y \
    build-essential cmake pkg-config libcurl4-openssl-dev intltool devscripts debhelper  ant \
    libldap2-dev libgtkmm-3.0-dev libarchive-dev \
    libjpeg-dev libtiff5-dev libpng-dev  libjpeg-dev \
    libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
    libxvidcore-dev libx264-dev \
    libgtk-3-dev \
    libcanberra-gtk* \
    gfortran python3-dev  \
    libavresample-dev libtesseract-dev libleptonica-dev \
    libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev libhdf5-dev \
    libblas-dev libeigen3-dev  libatlas-base-dev liblapacke-dev \
    python3-numpy  libjasper-dev


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

mkdir prj/cv4
cd prj/cv4

wget https://github.com/opencv/opencv/archive/4.1.2.zip -O opencv-4.1.2.zip; wget https://github.com/opencv/opencv_contrib/archive/4.1.2.zip -O opencv_contrib-4.1.2.zip; unzip opencv-4.1.2.zip; unzip opencv_contrib-4.1.2.zip; cd opencv-4.1.2; mkdir build; cd build

cmake-guiを使って環境を作るのがおすすめ。
例えば下記の CPU_BASELINE=NEONは
ENABLE_NEON=ONとENABLE_VFPV3=ONと同時に設定するとエラーになる。
ITT、EIGEN、ITT等はチェックを外す。EIGENは使わない。
PYTHON2もサポートが2020年までなので、PYTHON3に移行する為にチェックを外す。
下の赤字は付け加える。
それくらいかなぁ、、、

//---------------------------------------------
// Raspi 4  Buster
//---------------------------------------------
cmake-guiを使うときは下記の設定をする。
特に、赤字をAdd Entryする。python2,EIGENの項目を消す。
CPU_BASE_LINE系は削除して、NEON、VFPV3はENABLEで設定
でも、この関係良く分からない。cmakeでエラーの出ない設定。
以下をコピペするのではなく、cmake設定するのが良い
下も動くけど、、、

time cmake -D CMAKE_BUILD_TYPE=RELEASE \
   -D BUILD_EXAMPLES=ON \
   -D BUILD_TESTS=OFF \
   -D BUILD_SHARED=OFF \
   -D CMAKE_INSTALL_PREFIX=/usr/local/ \
   -D CMAKE_CXX_FLAGS=-latomic \
   -D CPU_BASELINE=NEON \
   -D ENABLE_NEON=ON \
   -D ENABLE_VFPV3=ON \
   -D ENABLE_LTO=OFF \
   -D ENABLE_PRECOMPILED_HEADERS=OFF \
   -D INSTALL_C_EXAMPLES=ON \
   -D INSTALL_PYTHON_EXAMPLES=ON \
   -D OPENCV_SKIP_PYTHON_LOADER=ON \
   -D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.7/dist-packages \
   -D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \
   -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \
   -D OPENCV_GENERATE_PKGCONFIG=ON \
   -D WITH_TBB=OFF \
   -D WITH_OPENCL=OFF \
   -D WITH_GSTREAMER=ON ..

time make -j4

real    67m43.556s
user    252m19.934s
sys     17m26.788s

build/binにbuild されたサンプル、contribが入っている

python3でimport cv2 エラーがでる
対策はここ
-DCMAKE_CXX_FLAGS=-latomic          → build 確認済み 9/1
-DOPENCV_EXTRA_EXE_LINKER_FLAGS=-latomi

vmware上でbuild する時は、青字の部分削除してcmake する

//---------------------------------------------
// Raspi 3B+ Strech
//--------------------------------------------- 
cmake -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/prj/cv4/opencv_contrib-4.1.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 ..

time make -j4

                             基本同じcmake設定
                             raspi4で、、、
                             real    104m18.468s
                             user    185m40.628s
                             sys     13m25.275s

                             raspi3B+
                             real    154m58.275s
                             user    550m24.650s

                             sys     16m18.052s

                             real:実行時間
                             user:CPU
                             sys:OSが処理をした時間
                             4coreの合計値がuser?

sudo make install
sudo ldconfig

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

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

お久しぶりです Lenaさん
.
ところで、g++でエラーが発生した。
一度うまくできたのに、ある時からエラー
それで、exampleのコードを参考に、facedetect,cpp 先頭の
includeのコメントアウトを外して、g++したら成功
なんで、できなくなったのだろう?


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!!

2019年1月6日日曜日

Memo: `PNG12_0' not found

何故か、突然、、、

動いてソフトが、簡単に

[1]+  Segmentation fault

詳細確認すると、、、

$ js_main: /usr/lib/arm-linux-gnueabihf/libpng12.so.0: version `PNG12_0' not found (required by /usr/local/lib/libopencv_imgcodecs.so.3.4)

に対して、、、

sudo apt install libpng12-0

一件落着

Peace!!

脱サラして10年目、2019年初頭に、、、

このブログは、2012年7月から始めたけど、ちょうど農業初めて丸々2年。

脱サラして、農業初めて、事業的にもそれなりに、、、

で、ひょんな事で、ロボットの世界に入り、そして製造業サービス、AIと

結局、元の製造業に戻ったわけで、、、

人生って解りません。

ただ、農業には未練もないし、やはり「文化」が違う世界は

しんどいなぁ~と、、、ただ、経験できた事はとっても良かった。

2009年に脱サラしたわけだけど、

で、この10年どうだったのだろうかと振り返ると

・「気張らなくても、自由に、それなりに生きていけるんだぁ」という実感

・「誰もやっていない領域の匂いを嗅ぐ力」これは、本当に大事だと再認識

・対象を分析・構造化し、それをシステムに置き換える力こそ、大事

・大手企業を辞めて .....     やめて自由に生きれた10年最高!!!

でも、誰にも勧められる事はでないなぁとも、、、

まず、会社や、農業もそうだけど、毎日同じ事をする事に、満足している人

ダメですね。

そもそも、会社やルーチンをやめる事は、他に自立できる能力が無いと難しい。

例えば、会社で成功していても、自立したらどうなるというと、、、

日本という社会では難しい

自立できる能力とは、実は答えは上段に書いたのだけど、、、

社会で、0から自立するって、かなり難しい。

これからは、より難しくなると思う。

今年、最初の投稿で、なんか中途半端だけど、、、

自分の思うままに、健康に自由に生きてこれた、この10年本当に幸せだったと思う。

また、続きは改めて、、、

全ては、Raspberry Piからはじまった


現在位置、これから進化・真価へ 

Peace!!