2017年12月30日土曜日

Report VL53L0X TOF sensor

超音波センサーセンサの代替に、STのVL53L0Xを検証中
野外で使うので、やはり野外でテスト

(1) TOF部分に、光が当たる状態でどうか?

(2) 乱反射するような生地の場合はどうか?

結論を言えば、室内ほどの性能はでないけど、本来の目的につかう範囲においては野外環境でもOK。

(1)に関しては、やはり50㎝以上は難しく、ただTOF表面に日光が差し込まなようにすれば、性能の改善はできる。データも取れたので、それを解析してプログラムに仕込めば大丈夫。

(2)に関しては、野外でよく着るナイロン地のアウターが直射日光に当たる状態でテスト。これは、OK

まぁ、いろいろテストで、、、
GPSをNTPで使うテストも、これはやはりネットに出ている方法ではうまくいかない事がわかったので、ちょっと細工すればOK

年の瀬に、、、Peace!!









Building a Raspberry Pi3 Stratum-1 NTP Server (u-blox 6)


1.基本的な考え方

野外活動用のロボットを開発している。
室内では、電源や、ネットワークなど当たり前にあるけど、野外では無いんだなぁ。。。
ネットワークも、LTEつなげればというけど、、、Docomoの携帯電波が取れない所もあり、、、
逆に、そのような所の方が、自律移動型ロボットのニーズが強いわけで、、、

ネットワーク、電源などは、本当にいろいろ考えさせれる。
ネットワークが届かなければ、ロボットのコントローラのRaspberry Piだって時刻同期ができないという事があり、、、RTCを積めばよいというけど、RTC積んだって同期は必要なわけで、、、

となると解決は、Raspberry Pi自身がGPSを使ってStratum-1のNTPサーバになればよいという変身技、、、

本当は、GPSからとれるtimepluseも一緒に使えば良いけど、それが無いGPSモジュールでも、一秒はずれるかもしれないけど、その程度なら野外ロボットを運用するためには、まずは許容範囲。

まずは、u-blox 6で、次は、timepluse付きのu-blox 8

2.環境

私の場合は、OSはStretchなので以下の説明は、全てStretch前提
Raspberry Piは、2B、3
GPSは、Amazonで購入したのは、これ!

安さ重視(^^)

3.手順

因みに、通常のOSインストールの場合は、NTPクライアントとしては、systemd-timesyncdが動いている。リモートサーバに時刻を同期する為のクライアント側のデーモン。NTPクライアントとして、定期的にNTPサーバと時刻を同期する。
timedatectlコマンドを使うと状態が解る。

timedatectl status
Local time: Fri 2017-12-29 23:54:41 JST
Universal time: Fri 2017-12-29 14:54:41 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

すでに、gpsdは、インストールしてあるものとして、、、
gpsdのインストールは、ここ

sudo apt-get install ntp
sudo vi /etc/ntp.conf
cat /etc/ntp.conf

変更・追加箇所だけ

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst

または、(raspberry Pi 2B)
#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst

# Generic NMEA GPS Reciever
#server 127.127.20.0 minpoll 4 prefer
#fudge 127.127.20.0 refid GPS flag1 0
#server ntp.nict.jp iburst
#これは、USB接続などのGPSを使う場合。
#この時は、gpsxのデバイスファイルを作る必要がある
#sudo ln -s /dev/ttyAMA0 /dev/gps0


#この指定(28)は、gpsd のshare memoryを使う指定
#GPSと、ないけどPPSの指定をしている。
server 127.127.28.0 minpoll 4
fudge  127.127.28.0 time1 0.183 refid NMEA
server 127.127.28.1 minpoll 4 prefer
fudge  127.127.28.1 time1 0.183 refid PPS

127.127.28.0は、IPアドレスでは無くて
https://www.eecis.udel.edu/~mills/ntp/html/refclock.html
ここに説明があるReference Clock Supportの番号
gpsdを立ち上げた場合は、28と指定する。

ところで、time1は遅延の設定値。PPS使わないのでNMEAに0.183秒の遅延幅の設定をしても意味がないと思われるで、
結局このセクションは、以下ように設定をした。

server 127.127.28.0 minpoll 4
fudge  127.127.28.0 flag1 1 refid NMEA
server 127.127.28.1 minpoll 4 prefer
fudge  127.127.28.1 time1 0.183 refid PPS


sudo reboot
または、su
sudo ssytemctl restart ntp

ntpq -p




SHMは、Shared Memoryの略。gpsdをSHMを介してやりとりしている。
/etc/ntp.confではインターネット上のサーバは指定していないので、
上図のようになる。*SHM(0)の'*'は、gpsが採用されている事を現わす。


Peace!!

自分が納得するうえで参考になったリンク。ありがとうございました。

http://lowfreq.info/archives/18314

https://www.eecis.udel.edu/~mills/ntp/html/refclock.html

https://blog.cles.jp/item/7932

補足


2つのdaemonが走っており、かつGPSがgpsd経由でNTPサーバになっている
という事で、、、(^^)/


表 13-4. 符号の意味
符号意味
*現在同期中のサーバーです。
+参照可能なサーバーです。
#距離は遠いものの参照可能なサーバーです。
空白距離が遠いなどの理由で参照しないサーバーです。
x検査で参照不可能と判断されたサーバーです。
.参照しているサーバーが多いために外されたサーバーです。
また、ntpq -p コマンドが出力する各列の意味は以下の通りです。
remote
参照先の NTP サーバーの名前です。
refid
参照先の NTP サーバーがどこから時刻を取得しているかを示します。サーバーのホスト名や GPS.などが表示されます。
st
Stratum の階層を示しています。
t
l(local)、u(unicast)、m(multicast)、b(broadcast)を示します。
when
参照先の NTP サーバーからのパケットを最後に受信してからの経過時間を秒単位で表示します。
poll
ポーリング間隔を秒単位で表示します。
reach
NTP サーバーへの接続を試みた最後の 8 回分の結果を 8 進数で表示しています。8 ビットのビット列で結果を保持しており、サーバー接続できた場合はビットが立ちます。したがって全部成功した場合は、377 と表示されます。
delay
時刻同期要求に対する返答時間をミリ秒単位で表示します。
offset
NTP サーバーと自ホストの時刻の誤差をミリ秒単位で表示します。
jitter
ばらつきをミリ秒単位で示しています。値が低い方が、正確な時刻同期が可能であることをあらわします。

2017年12月28日木曜日

VL53L0X TOF sensor on Raspberry Pi

ロボット用の距離センサーが欲しくて、、
通常よく用いられる超音波センサーは扱いにくいので
STのVL53L0Xを試すが、これが、いいんだなぁ、、、(^^)

3V〜5Vの入力電圧を内部電圧2.8V へ変換するレギュレータが付いている
ストロベリー・リナックスのモジュールを使う
https://strawberry-linux.com/catalog/items?code=15310


この時に、既についているプルアップ抵抗(10KΩ)を2つ取り外す(写真赤の部分)

これをRaspberry PiにI2C接続するとこんな感じ


テスト
ディレクトリーの関係は、、、
~/prj/VL53L0X/VL53L0X_1.0.2
                      /VL53L0X_rasp

(1) APIのダウンロード
STのsiteからAPIをダウンロードする(http://www.st.com/content/st_com/en/products/embedded-software/proximity-sensors-software/stsw-img005.html
ログインの処理が間にあり、指定したメールアドレスにURLを送ってくる
それをダウンロードする。解凍するとVL53L0X_1.0.2のディレクトリーができる
unzip en.STSW-IMG005.zip
ls
VL53L0X_1.0.2

(2) サンプルプログラムダウンロード
git clone https://github.com/cassou/VL53L0X_rasp
cd VL53L0X_rasp
API_DIR=../VL53L0X_1.0.2 make
API_DIR=../VL53L0X_1.0.2 make examples
./bin/vl53l0x_ContinuousRanging_Example

こんな感じで、、、

Peace!!

2017年12月26日火曜日

An installation shell script of openCV3.4.0

Raspberry Pi3
Stretch
3時間41分

バージョンの確認は、、、

/usr/local/bin/opencv_version
3.4.0

Peace!!

---------------------------------------------------------------

#! /bin/bash

date;

if [[ `lsb_release -d` =~ .*Raspbian.* ]]
then
        echo "";
        read -p " Continue installing OpenCV (y/n) ? " CONTINUE
        if [[ "$CONTINUE" == "y" || "$CONTINUE" == "Y" ]]; then
                echo "";
                echo "Installing OpenCV";
                echo "";
                sudo apt-get update -y && sudo apt-get upgrade -y
                sudo apt-get install -y build-essential cmake pkg-config
                sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
                sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
                sudo apt-get install -y libxvidcore-dev libx264-dev
                sudo apt-get install -y libgtk2.0-dev libgtk-3-dev
                sudo apt-get install -y libatlas-base-dev gfortran
                sudo apt-get install -y python2.7-dev python3-dev

                cd ~
                wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip
                unzip opencv.zip
                wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip
                unzip opencv_contrib.zip
                                mv ~/opencv_contrib-master ~/opencv_contrib-3.4.0
                cd ~/opencv-3.4.0/
                mkdir build
                cd build
                cmake -D CMAKE_BUILD_TYPE=RELEASE \
                      -D CMAKE_INSTALL_PREFIX=/usr/local \
                      -D INSTALL_PYTHON_EXAMPLES=OFF \
                      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.0/modules \
                      -D BUILD_EXAMPLES=OFF ..
                make
                sudo make install
                sudo ldconfig
        else
                echo "";
                echo "Skipping OpenCV installation";
                echo "";
        fi
else
        echo "Installing opencv python for non-Raspbian";
        sudo -H pip3 install opencv-python
        sudo -H pip3 install opencv-contrib-python
fi
date;

2017年12月24日日曜日

An installation of NEO-6M GPS onto Raspberry3


こんなことをする為にU-blox NEO-6M GPSモジュールをAmzonでget

Raspberry Pi3+Stretch+GPSの設定です。
Raspberry Pi3は、Bluetoothが、シリアルポートを使っているので、
これを、ハズす事が必要。
いろいろ調べて、試しながら、こんな感じ(^^)

gpsdについては、ここここも

GPS用語集は、ここ



因みに、Raspberry PiとGPSの接続は普通のUARTの接続です。
説明は省略。GPS電場がちゃんと受信できている時は、青いLEDが点滅

1.1 raspi-config

Serial portを有効にします。こんな感じ。raspi-config終了時にreboot選択
「シリアル接続でのログインはしないけど、シリアル使うよ」という設定





2.1 /boot/config.txt

sudo vi /boot/config.txt

# Enable audio (loads snd_bcm2835)
dtparam=audio=on
#start_x=0
gpu_mem=64
enable_uart=1
#dtoverlay=w1-gpio

dtoverlay=pi3-disable-bt
#dtoverlay=pi3-miniuart-bt          # blurtoothを使うとき

2.2 /boot/cmdline.txt

/boot/cmdline.txtの「console=ttyAMA0,115200」の部分を削除

sudo vi /boot/cmdline.txt
cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

sudo reboot
sudo cat /dev/ttyAMA0


2.3 install

sudo apt-get install gpsd gpsd-clients python-gps
sudo vi /etc/default/gpsd
cat /etc/default/gpsd
# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time
START_DAEMON="true"

# Use USB hotplugging to add new USB devices automatically to the daemon
USBAUTO="true"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyAMA0"

# Other options you want to pass to gpsd
GPSD_OPTIONS="-n"

GPSD_OPTIONS="-F /var/run/gpsd.sock -b -n"
これは、ntpサーバーにする時

#udo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock
#stty -F /dev/ttyAMA0

sudo reboot

stty -Fは、open and use the specified DEVICE instead of stdin
という意味だから、設定するのはおかしいね。
だから、ここは sudo rebootのみで、、、
reboot後は、

systemctl status ntp gpsd
ntp -p

で確認する。
gpsdが立ち上がっていない時は
sudo systemctl start gpsd

でも、大事な事は原因を把握して、対処する事

2.4 確認

scgps -s

xgps

Peace!!

ところで、いろりろな情報があるけど、、、
Raspberry Pi2、だったり、Jessieだったり
少し混乱しました。

sudo cat /dev/ttyAMA0  で、文字化けなどの時
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service

もしおかしい時は、この情報を参照して、AMA0関連の余計なサービスが無いか確認する

systemctl | grep tty
  sys-devices-platform-serial8250-tty-ttyS0.device                                                   loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS0
  sys-devices-platform-soc-3f201000.serial-tty-ttyAMA0.device                                        loaded active plugged   /sys/devices/platform/soc/3f201000.serial/tty/ttyAMA0
  sys-devices-virtual-tty-ttyprintk.device                                                           loaded active plugged   /sys/devices/virtual tty/ttyprintk
  getty@tty1.service                                                                                 loaded active running   Getty on tty1     
  system-getty.slice                                                                                 loaded active active    system-getty.slice 
  getty.target                                                                                       loaded active active    Login Prompts


Raspberry Pi3+Jessieのとき、下のおまじない必要らしいけど
Stretchではしない。

sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service


参考リンク

本家
https://www.raspberrypi.org/documentation/configuration/uart.md

http://mcommit.hatenadiary.com/entry/2016/09/07/233816

http://blog.robit.co.jp/entry/20170411

http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_serial_gps/

https://www.rs-online.com/designspark/add-gps-time-and-location-to-a-raspberry-pi-project-jp

http://ain0204.hatenablog.com/entry/2015/08/30/235729




おわり(^^)

2017年12月14日木曜日

Setup Pimoroni HyperPixcel on Raspberry Pi Stretch to use TensorFlow

PimoroniのHyperPixcel購入した。
セットアップ自体は、このURLの通りやればすんなり、こんなにきれいな画面(写真2枚目)が手に入る


Raspberry Pi3に、Movidiusをくっつけて、Webcamで撮った画像をTensorFlowで画像認識した結果を、HyperPixcelで見るという単純な事をしている訳で、、、
何気に良いんですね。
キーボードも、もっと早く買えば良かったのに、、、と
優れモノ、、、

で、このセットで何をするんだって、、、
内緒(笑)

Peace!!




An installation of lighttpd(1.4.48) on Raspberry Pi Stretch

僕は、相も変わらず、lighttpdを使っているわけで、、、
apt-getでインストールすると 1.4.45
でも、最新は、1.4.48

今回は、クリーンインストールするので、、、

wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.48.tar

tar xvf lighttpd-1.4.48.tar
cd lighttpd-1.4.48.tar
./configure
make -j4
sudo make install

で、、、?

/etc/lighttpdが無い、、、躊躇せず

sudo make clean
sudo apt-get install lighttpd
sudo make install
lighttpd -v
lighttpd/1.4.48 - a light and fast webserver

よしよし、、、

cd /etc/lighttpd/conf-enabled
sudo ln -s ../conf-available/10-cgi.conf 10-cgi.conf
sudo cp ../conf-available/10-cgi.conf ../conf-available/10-cgi.conf.org

sudo vi ../conf-available/10-cgi.conf
cat ../conf-available/10-cgi.conf
# /usr/share/doc/lighttpd/cgi.txt

server.modules += ( "mod_cgi" )

$HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign = ( "" => "" )
}
$HTTP["url"] =~ "^/api/" {
        cgi.assign = ( "" => "" )
}
## Warning this represents a security risk, as it allow to execute any file
## with a .pl/.py even outside of /usr/lib/cgi-bin.
#
#cgi.assign      = (
#       ".pl"  => "/usr/bin/perl",
#       ".py"  => "/usr/bin/python",
#)

sudo systemctl restart lighttpd
cd /var/www/html
sudo mkdir api
cd api

sudo vi q1.c
cat q1.c
#include <stdio.h>
#include <stdlib.h>

void main(void);

void main(void)
{
  char *s_dt;
  long m,n;

  printf(" Content-Type:text/html;charset=utf-8\n\n");
  printf("<html><title>Test C-Language CGI</title><body>\n");
  printf("<H3>Result</H3>\n");
  s_dt = getenv("QUERY_STRING");
  printf("<P>%s\n", s_dt);

  if(s_dt== NULL)
    printf("<P>no argument.");
  else if(sscanf(s_dt,"m=%ld&n=%ld",&m,&n)!=2)
    printf("<P>not numeric.");
  else
    printf("<P>result %ld x %ld = %ld.",m,n,m*n);

  printf("</body></html>\n");

  return;
}

sudo gcc q1.c -o q1

で、、、他のマシンのChromeで
http://192.168.11.166/api/q1?m=10&n=20
とすると、、、画面に、以下のように表示されて、めでたしめでたし(^^)

Result

m=10&n=20
result 10 x 20 = 200.

という事で、、、呪文を唱えた感じだけど、、、

Peace!!

2017年12月6日水曜日

An installation bcm2835 library in Raspberry Pi and testing spi program

Adafruit PiTFT3.5を間違えて購入してしまった。



もったいないので、ロボットの簡易的なディスプレーにしようと思い、サイトに書いてあるGPIOをつないだけど動かない。もちろん直付けすると動くけど、他のGPIOが使えなので、、、

<追記>
初稿を書いた後に、Pin1の3.3Vを接続したら、ディスプレーとして動きました。SPIの件は、変わらずですが、、、
ディスプレーとして動いたので良しとします。
デバイスファイルは、/dev/input/touchscreen以外にもあると思うけど、、、
いつかちゃんと確認するという事で、、、
</追記>

ということで、写真のように接続した時に、SPIちゃんと動いているのかしら
その為にSPIのテスト

(2) bcm2835 libraryのインストール(最新バージョンは都度確認)

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.52.tar.gz
./configure
make
sudo make install

(2) SPIのテスト

ls /dev/spi*
ls: cannot access /dev/spi*: No such file or directory

なぬ?

lsmod
.
.
snd                    68784  5 snd_timer,snd_bcm2835,snd_pcm
i2c_bcm2835             6433  0
spi_bcm2835             7424  0
bcm2835_gpiomem         3791  0
uio_pdrv_genirq         3718  0
.
.

cat t1.c

#include <bcm2835.h>
#include <stdio.h>
int main(int argc, char **argv)
{
    if (!bcm2835_init())
        return 1;
    bcm2835_spi_begin();
    bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST);      // The default
    bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);                   // The default
    bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_65536); // The default
    bcm2835_spi_chipSelect(BCM2835_SPI_CS0);                      // The default
    bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW);      // the default
    uint8_t send_data = 0x23;
    uint8_t read_data = bcm2835_spi_transfer(send_data);
    printf("Sent to SPI: 0x%02X. Read back from SPI: 0x%02X.\n", send_data, read_data);
    if (send_data != read_data)
      printf("Do you have the loopback from MOSI to MISO connected?\n");
    bcm2835_spi_end();
    bcm2835_close();
    return 0;
}

gcc -o t1 t1i.c -l bcm2835

./t1
Segmentation fault

だめだぁ、、、

(3) 直付け


ls /dev/spi*
ls: cannot access /dev/spi*: No such file or directory

あれ?
でも、PiTFT動いているし、、、???

./t1
Segmentation fault

ダメだぁ、、、

(4) SPI Off


sudo reboot

ハングアップしするので、電源Off-Onで再起動、、、

ところが、UIでるんだなぁ、、、(笑)

どうなっているのでしょうか?
何で、接続されているのかしら、、、
SPIではないのかしら、、、、

とっても、Peaceではない。

2017年12月4日月曜日

lighttpd 1.4.48 インストール

ロボットコントローラーには、lighttpdを使って

RDCSのRESTモドキや、ロボットのコントロールに活用している。

最新が、1.4.48 になっていたのでインストール

./configure
make
sudo make install

確認すると、

$ lighttpd -v
lighttpd/1.4.48 - a light and fast webserver

めでたし、めでたし、

Peace!!

2017年11月30日木曜日

An installation shell script of OpenCV3.3.0 on Raspberry Pi3

Movidius のインストールスクリプトの中にある
OpenCV3.3.0のスクリプト

このスクリプトは、便利なので自己メモとして、記録

Peace!!


#! /bin/bash

#test for python already installed for opencv
python3 -c "import cv2" > /dev/null 2>&1
if [ $? -eq 0 ] ;
then
        echo "";
        echo "OpenCV already setup for python";
        echo "";
        exit 0
fi;

## Install OpenCV
if [[ `lsb_release -d` =~ .*Raspbian.* ]]
then
        echo ""
        echo "************************ Please confirm *******************************"
        echo " Installing OpenCV on Raspberry Pi may take a long time. "
        echo " You may skip this part of the installation in which case some examples "
        echo " may not work without modifications but the rest of the SDK will still "
        echo " be functional. Select n to skip OpenCV installation or y to install it."
        read -p " Continue installing OpenCV (y/n) ? " CONTINUE
        if [[ "$CONTINUE" == "y" || "$CONTINUE" == "Y" ]]; then
                echo "";
                echo "Installing OpenCV";
                echo "";
                sudo apt-get update -y && sudo apt-get upgrade -y
                sudo apt-get install -y build-essential cmake pkg-config
                sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
                sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
                sudo apt-get install -y libxvidcore-dev libx264-dev
                sudo apt-get install -y libgtk2.0-dev libgtk-3-dev
                sudo apt-get install -y libatlas-base-dev gfortran
                sudo apt-get install -y python2.7-dev python3-dev

                cd ~
                wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
                unzip opencv.zip
                wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
                unzip opencv_contrib.zip
                cd ~/opencv-3.3.0/
                mkdir build
                cd build
                cmake -D CMAKE_BUILD_TYPE=RELEASE \
                      -D CMAKE_INSTALL_PREFIX=/usr/local \
                      -D INSTALL_PYTHON_EXAMPLES=OFF \
                      -D ENABLE_NEON=ON \
                      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
                      -D BUILD_EXAMPLES=OFF ..
                make
                sudo make install
                sudo ldconfig
        else
                echo "";
                echo "Skipping OpenCV installation";
                echo "";
        fi
else
        echo "Installing opencv python for non-Raspbian";
        sudo -H pip3 install opencv-python
        sudo -H pip3 install opencv-contrib-python
fi

Nara

ちょっと、接待で、、、

いにしえの奈良

大神神社、長谷寺

疲れた。。。でも綺麗。

最後の写真が、日本らしいかも、、、(^^)/

Peace!








Upgrade Jessie to Stretch

今更感、満載だけど、、、

ロボットのOSを、アップグレードするメモ

apt-get でアップグレードするので、apt関連のファイル設定を変更して実行

(1) バックアップ
僕の場合は、~/prj 以下に全部あるので、、、

tar cvf 171129_prj.tar

history > 171129_history.txt


(2) Jessieを最新版にする

sudo apt-get update && sudo apt-get upgrade -y

(3) 設定ファイルの変更部分を探す

grep jessie /etc/apt/ -R

/etc/apt/sources.list:deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
/etc/apt/sources.list:#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi
/etc/apt/sources.list.d/raspi.list:deb http://archive.raspberrypi.org/debian/ jessie main ui
/etc/apt/sources.list.d/raspi.list:#deb-src http://archive.raspberrypi.org/debian/ jessie main ui

sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/raspi.list

変更の確認
sudo grep stretch /etc/apt/  -R

/etc/apt/sources.list:deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
/etc/apt/sources.list:#deb-src http://archive.raspbian.org/raspbian/ stretch main contrib non-free rpi
/etc/apt/sources.list.d/raspi.list:deb http://archive.raspberrypi.org/debian/ stretch main ui
/etc/apt/sources.list.d/raspi.list:#deb-src http://archive.raspberrypi.org/debian/ stretch main ui

(4) 更新
sudo apt-get update

sudo apt-get -y dist-upgrade

途中で、2回、聞いてくるので、y
で、、、小一時間

確認

cat /etc/debian_version
9.1

sudo reboot


最後に、
sudo apt-get -y autoremove


Peace!!

2017年11月25日土曜日

Movidius and PiTF3.5 on Raspberry Pi

MovidiusとAdafruitのPiTFT3.5 をセットアップ

しかし、問題がある。

Movidiusは、Stretchが推奨
PiTFT3.5は、Jessieがサポート対象

という事で、
PiTFT3.5 は、AdafruitのこのURLのEasy Installでインストール
このパッケージは、Jessie

https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi/easy-install

実は、Stretchで、下のURLの通りに処理したら、逝ってしまった。

https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi/detailed-install

kernelをdownloadして、そのページある設定をする。

最後に、rpi-upgradeしちゃだめって、出たけどやっちゃた。

で、こんな感じ


まずは、問題なくPiTFT3.5 の設定完了


Movidiusですが、

手順1 TesorFlowをインストールする
手順2 Movidiusのライブラリーインストール
         OpenCV3.3もインストールするけど、途中でY/N聞いてくる

TesorFlowは、ここからdownload

wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.4.0/tensorflow-1.4.0-cp35-none-linux_armv7l.whl

sudo pip3 install tensorflow-1.4.0-cp35-none-linux_armv7l.whl

ここで問題が発生する。
Jessieは、python3.4、よってpip3でエラー発生。
このwhlは、3.5じゃないとダメと怒られる

で、python3.5のbuild&install

sudo apt-get remove python3 python3-dev

wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tar.xz

tar xvf Python-3.5.4.tar.xz

cd Python-3.5.4

./configure

make -j4

sudo make install

sudo cp /usr/local/bin/pip3 /usr/bin

sudo ln -s /usr/local/bin/python3.5 /usr/bin/python3

再度

sudo pip3 install tensorflow-1.4.0-cp35-none-linux_armv7l.whl

なんかやっている、、、、OK!

次は、MovidiusのSDK

git clone http://github.com/Movidius/ncsdk && cd ncsdk && make install && make examples

OSは、Jessieではダメだそうです。。。

Movidiusは、Stretch

PiTFT3.5は、Jessie

当面組み合わせられない。。。

Peace!!

2017年9月19日火曜日

An installation of openCV 3.3.0 on raspberry ZERO W stretch

初めての組み合わせ、、、10時間(笑)

OSはStretchにするのが良いのかの議論はありますが、、、

基本、これまでのインストールの手順です。

でも、いろいろあったわけで、


(1) 依存ファイルのインストール

以前
sudo apt-get install -y build-essential git cmake pkg-config cmake-qt-gui mesa-utils  libgl1-mesa-dri libjpeg-dev libtiff5-dev libpng12-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libgtk2.0-dev libprotobuf-dev protobuf-compiler libvtk5-dev libvtk5-qt4-dev python-vtk tcl-vtk  libatlas-base-dev gfortran libeigen3-dev libv4l-dev libqt4-core libqtgui4 libqt4-test libqt4-opengl-dev sphinx-common doxygen



今回、最小限です。かつ、Raspberry Piをセットアップして、


最初の、update, upgrade, raspi-update して、reboot した直後の状態

sudo apt-get -y install build-essential cmake pkg-config cmake-qt-gui git libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get -y install libxvidcore-dev libx264-dev
sudo apt-get -y install  libqtgui4 libqt4-test libqt4-opengl-dev


(2)cmakeは、こんな感じ

cd ~
cd opencv-3.3.0
mkdir build
cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D PLANTUML_JAR=/usr/share/java/plantuml.jar \ -D ENABLE_NEON=OFF \ -D WITH_TBB=OFF -D BUILD_TBB=OFF \ -D WITH_QT=ON -D WITH_OPENGL=OFF \ -D BUILD_opencv_freetype=OFF \ -D BUILD_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF ..



(3) makeとインストール

make

10時間待ちます。。。(^^)


sudo make install

sudo ldconfig


(4)確認

cd ~/opencv-3.3.0/samples/cpp

cd ~/opencv-3.3.0/samples/cpp


g++ `pkg-config opencv --cflags --libs` facedetect.cpp -o facedetect

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

どーーん、peace!!







2017年8月7日月曜日

OpenCV 3.2 Module List (自分用)


ABCD

modulefunctionlink

cappsapps provides various nodes that run internally OpenCV's functionalities

ccalib3dThe functions in this section use a so-called pinhole camera model. In this model, a scene view is formed by projecting 3D points into the image plane using a perspective transformation.
カメラキャリブレーション、ステレオ対応点探索
calib3d

ccore画像・行列データ構造の提供、配列操作、基本図形描画、XMLおよびYAML入出力、コマンドラインパーサー、ユーティリティ機能などcore

cfeatures2d特徴点抽出(ORB、BRISK、FREAKなど)features2d

cflann多次元空間のクラスタリングやサーチ問題flann

chighguiGUI(ウィンドウ表示など)highgui

cimgcodecs画像ファイル入出力imgcodecs

cimgprocフィルター処理、アフィン変換、エッジ検出、ハフ検出、色変換、ヒストグラム計算、ラベリングなどimgproc

cjavajava

cmlSVM、決定木、ブースティング、ニューラルネットワークなどml

cobjdetectオブジェクト検出(顔検出、人体検出など)objdetect

cphoto画像修復、ノイズ除去処理、HDR(High Dynamic Range)合成、画像合成などphoto

cpython2python

cshape形状マッチングshape

cstitchingパノラマ合成stitching

csuperres超解像処理superres

ctsテスト用モジュールts

cvideoオプティカルフロー、カルマンフィルター、背景差分などvideo

cvideoio動画ファイルの入出力、カメラキャプチャなどvideoio

cvideostab手ブレ補正(Video Stabilization)videostab

cviz3Dデータの可視化(内部的にVTKを使用)viz

cworldOpenCV を利用するときには複数のライブラリをリンクする必要があり、world は、その手間を軽減するために作られた、複数のモジュールをまとめた一つのライブラリ。つまりwrapperworld

earucoThis module is dedicated to square fiducial markers (also known as Augmented Reality Markers) These markers are useful for easy, fast and robust camera pose estimation.ARマーカーaruco

ebgsegmThis algorithm combines statistical background image estimation and per-pixel Bayesian segmentation.背景セグメンテーションnbgsegm

ebioinspiredThis class provides the main controls of the Gipsa/Listic labs human retina model. This is a non separable spatio-temporal filter modelling the two main retina information channels.視覚モデルに従う処理bioinspired

eccalibCustom Calibration Pattern for 3D reconstruction
キャリブレーションパターンのカスタム
ccalib

econtrib_worldThe world module is actually a wrapper module that builds the complete openCV module interface, so basically all modules available.contrib_world

edatasetsInterface forinterfacing With existing Computervision databases.
様々なデータセットをダウンロード
datasets

ednnFunctionality of this module is designed only for forward pass computations (i. e. network testing). A network training is in principle not supported.
ディープラーニング
dnn

ednn_modernThe module is wrapper to tiny-dnn, a header only, dependency-free deep learning framework in C++11.dnn_modern

edpmThis is a C++ abstract class, it provides external user API to work with DPM.
デフォマブル パートモデル
dpm

eface顔認識face

efreetypematにtextをマージするfreetype

efuzzyファジーfuzzy

eimg_hash画像の各種ハッシュ処理img_hash

eline_descriptor線記述子line_descriptor

eoptflowオプティカルフロー推定optflow

e
phase_unwrapping
位相アンラッピングphase_unwrapping

eplotグラププロットplot

ereg画像のレジストレーションreg

ergbdRGB+デプス処理rgbd

esaliency顕著性マップsaliency

estereoステレオマッチングstereo

estructured_lightカメラープロジェクション用パターン投影structured_light

e
surface_matching
3次元点マッチングsurface_matching

etext文字認識text

etrackingトラッキングtracking

exfreatures2d拡張特徴量計算モジュールxfeatures2d

eximgproc拡張画像処理モジュールximgproc

exobjdetect拡張物体検出モジュールxobjdetect

exphoto拡張コンピュテーショナルフォトグラフィモジュールxphoto



cnn_3dobj

cvv

dnns_easily_fooled

hdf

matlab

sfm

CUDA