2020年4月2日木曜日

最近,,,

最近、またオートバイに乗り始めました。

早く、遠くにキャンプしながら旅をしたいです。

でも、当面は自粛ですが、、、


Peace!!

2020年1月3日金曜日

国際ロボット展に出展しました

2019年12月18日~ 東京ビックサイトで開催された国際ロボット展に出展しました。

サービスロボットゾーンの奥の角に2ブース
展示したのは、
低速度自律走行コントローラ
19.8万円のATVキット
AGVキットの応用例
等々

で、、、、、
大変なことに、

で、、、、、
AGVキットやりきろう!!!と決心しました。

「人が運ぶ」を無くす

この目標を掲げて邁進します。

どうぞよろしくお願い致します。

蒲谷直樹@フューチャアグリ株式会社






2019年10月5日土曜日

Raspberry Pi 開発をVMwareで行う

標題のまんまですが、、、
Raspberry Piを同じ環境を作れるので、大変便利です。


Desktopの表示サイズの設定は、下記のツールで行う。
デフォルトのままは、800 x 600
Raspberry Pi > Preferences > Screen Configuration

ネットワーク設定は、NATで構築
Windowsのアダプターは、VMnet8
VMware側の設定は、このツールでおなう。
編集 > 仮想ネットワークエディター


こんな感じ

ホストオンリーに印がついているのは、既にNAT接続しているので、NAT一つ制限の為にこのような表示になっている。
最初の設定の時はNATを指定している。

Peace!!

2019 国際ロボット展に出展します

僕、国際ロボット展に出展します。12 月 18日(水)~21日(土)

サービスロボットゾーンです。

僕でなくて、フューチャアグリ株式会社です。(笑)

内容は、

低速度自律走行UNIT

低コスト自律走行AGV

不整地自律走行ロボット

その他、いろいろ

是非、お越しください。

Peace!!



2019年9月9日月曜日

Build TensorFlow Lite on Raspberry Pi 4

TesorFlow Lite Raspberry Pi 用の libtensorflow-lite.a を作る
TensorFlowの当該のページ通りにすればよい。
他のページは見ない方が良い
About 40 minutes.

Build TensorFlow Lite for Raspberry Pi

cd ~/prj
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
./tensorflow/lite/tools/make/download_dependencies.sh
./tensorflow/lite/tools/make/build_rpi_lib.sh
ls -al tensorflow/lite/tools/make/gen/rpi_armv7l/lib
   drwxr-xr-x 2 root root     4096 Sep  9 02:32 .
   drwxr-xr-x 5 root root     4096 Sep  9 02:32 ..
   -rw-r--r-- 1 root root 12164884 Sep  9 02:32 benchmark-lib.a
   -rw-r--r-- 1 root root  5796642 Sep  9 02:32 libtensorflow-lite.a

上記のページでは
tensorflow/lite/tools/make/gen/lib/rpi_armv7/libtensorflow-lite.a
ちょっと違う(笑)

Peace!!

Build Bazel(0.29.0) on Raspberry Pi 4

Bazel 0.26.0, 0.29.0のbuildです。

1.準備

sudo apt install openjdk-8-jdk

jdk は下記では8がサポート対象となっている
8にしないとエラーが発生する。このような対応不能なエラーが発生した。
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (g1ConcurrentMark.cpp:1666), pid=5210, tid=5234
#  fatal error: Overflow during reference processing, can not continue. Please increase MarkStackSizeMax (current value: 2097152) and restart.
#
# JRE version: OpenJDK Runtime Environment (11.0.3+7) (build 11.0.3+7-post-Raspbian-5)

https://docs.bazel.build/versions/master/install-compile-source.html

もし違う場合には、確認して変更またはインストールする
下の例は0だったので、2に変更した後に、再度確認した画面
sudo update-alternatives --config javac

There are 2 choices for the alternative javac (providing /usr/bin/javac).



  Selection    Path                                          Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-armhf/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-armhf/bin/javac   1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-armhf/bin/javac    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number:

2. ソースのダウンロード

mkdir ~/prj/bazel;cd ~/prj/bazel
$ wget https://github.com/bazelbuild/bazel/releases/download/0.29.0/bazel-0.29.1-dist.zip
$ unzip bazel-0.29.0-dist.zip

3. build前の設定と変更

環境変数追加
$ EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk"

2つのファイルを変更
compile.sh
before
bazel_build "src:bazel_nojdk${EXE_EXT}" \
  --action_env=PATH \
  --host_platform=@bazel_tools//platforms:host_platform \
  --platforms=@bazel_tools//platforms:target_platform \
  || fail "Could not build Bazel"

after
bazel_build "src:bazel_nojdk${EXE_EXT}" \
  --host_javabase=@local_jdk//:jdk \
  --action_env=PATH \
  --host_platform=@bazel_tools//platforms:host_platform \
  --platforms=@bazel_tools//platforms:target_platform \
  || fail "Could not build Bazel"

scripts/bootstrap/compile.sh
before
  run "${JAVAC}" -classpath "${classpath}" -sourcepath "${sourcepath}" \
      -d "${output}/classes" -source "$JAVA_VERSION" -target "$JAVA_VERSION" \
      -encoding UTF-8 ${BAZEL_JAVAC_OPTS} "@${paramfile}"

after
  run "${JAVAC}" -classpath "${classpath}" -sourcepath "${sourcepath}" \
      -d "${output}/classes" -source "$JAVA_VERSION" -target "$JAVA_VERSION" \
      -encoding UTF-8 ${BAZEL_JAVAC_OPTS} "@${paramfile}" -J-Xmx1024M

で、Go!!!
time comple.sh

この文字列が出ればOK
Build successful! Binary is here: /home/pi/tmp/output/bazel

次にコピーして完了
sudo cp output/bazel /usr/local/bin

tころで、こんなエラーがでた。
これは、上記の一番目の変更をしなかったから。。。
ERROR: /tmp/bazel_SwJ5aUhR/out/external/bazel_tools/tools/jdk/BUILD:492:14: Configurable attribute "actual" doesn't match this configuration: Could not find a JDK for host execution environment, please explicitly provide one using `--host_javabase.`

Peace!!

2019年8月31日土曜日

OpenCV4 Stereo matching

Stereo matchingは古くからある重要な手法。
僕も、いろいろな場面で使っている。
OpenCV4をセットアップしたあと、cpp ディレクトリーに移動

g++  `pkg-config opencv4 --cflags --libs` stereo_match.cpp -o stereo_match -std=c++11 -latomic

stereo_match ../data/aloeL.jpg ../data/aloeR.jpg --algorithm=sgbm --blocksize=3 --max-disparity=128

こんな感じでbuild とコンパイル

で、いろいろパラメータ変えるとこんな感じ


更にフィルターをかけて、、

 pip3 install scikit-learn
 sudo apt install python3-sklearn

import numpy as np
from sklearn.preprocessing import normalize
import cv2

print('loading images...')
imgL = cv2.imread('../data/aloeLs.jpg')  # downscale images for faster processing if you like
imgR = cv2.imread('../data/aloeRs.jpg')

# SGBM Parameters -----------------
window_size = 3
left_matcher = cv2.StereoSGBM_create(
    minDisparity=0,
    numDisparities=80,
    blockSize=1,
    P1=8 * 3 * window_size ** 2,
    P2=32 * 3 * window_size ** 2,
    disp12MaxDiff=1,
    uniquenessRatio=15,
    speckleWindowSize=0,
    speckleRange=2,
    preFilterCap=63,
    mode=cv2.STEREO_SGBM_MODE_SGBM_3WAY
)
right_matcher = cv2.ximgproc.createRightMatcher(left_matcher)

# FILTER Parameters
lmbda = 80000
sigma = 1.2
visual_multiplier = 1.0
wls_filter = cv2.ximgproc.createDisparityWLSFilter(matcher_left=left_matcher)
wls_filter.setLambda(lmbda)
wls_filter.setSigmaColor(sigma)

print('computing disparity...')
displ = left_matcher.compute(imgL, imgR)  # .astype(np.float32)/16
dispr = right_matcher.compute(imgR, imgL)  # .astype(np.float32)/16
displ = np.int16(displ)
dispr = np.int16(dispr)
filteredImg = wls_filter.filter(displ, imgL, None, dispr)  # important to put "imgL" here!!!

filteredImg = cv2.normalize(src=filteredImg, dst=filteredImg, beta=0, alpha=255, norm_type=cv2.NORM_MINMAX);
filteredImg = np.uint8(filteredImg)
cv2.imshow('Disparity Map', filteredImg)
cv2.waitKey()
cv2.destroyAllWindows()

Peace!!


stm1 imgKittyl.bmp imgKitty.bmp  --algorithm=sgbm --blocksize=1 --max-disparity=64


stm1 imgKittyl.bmp imgKitty.bmp  --algorithm=sgbm --blocksize=1 --max-disparity=80

stm1 imgKittyl.bmp imgKitty.bmp  --algorithm=sgbm --blocksize=9 --max-disparity=64