RaspberyPi4の準備
OS/電源など
講演時間15分㈱人工知能ロボット研究所
西村輝一

㈱人工知能ロボット研究所
高齢化が進む中、ロボットへの期待は膨らむが・・・・・安全性、信頼性、ロバスト性、ランニングコストは?
出展:国立社会保障・人工問題研究所

3K職場ロボット

農業ロボット・検査ロボット・異常診断・交換時期予測・走行アシスト1). 3K職場ロボット
2). 農業ロボット
3). 物流ロボット
4). 介護ロボット
5). 医療ロボット

・トマト収穫予測
・病気判定
・収穫ロボット

物流ロボット・4WS4輪駆動
ロボットカー

RasPi4への期待
ASUS Tinker Board S

RasPi3

RasPi4

Intel Z8350

Jetson Nano

￥5,427￥12,540￥12,524￥7,4001.CPUの高速化/メモリ4GB
2.USBポートの高速化
3.boot用EEPROM搭載
4.低価格￥23,930
16GB eMMC(embedded MultiMediaCard)

ロボット用CPU要求仕様-Ubuntu LTS/ROS1/ROS2搭載-Stereo Camera搭載-on Board Disk

RaspberyPi4の準備

RasPi4 4Gbyte memory

SDカード



高速のもの/32Gbyte以上。同じものを使用すると良い、5V電源

5.3Vから5.5V 3A以上。雷マークが出ない。

DC-DCコンバータは出力可変のものを使用。3A以上。

Heat sink＋FANの装着memoryは4GByteのものを。

CPU温度は60度以下を目安に。温度計マーク80℃

HDMI

シールドがしっかりしているもの。WiFi接続トラブルの原因

キーボード・マウス

オーディオアンプ

シールド線使用の事

LinkinPerk ハイスピード HDMI ケーブル Micro HDMI to HDMI変換 オス-オス,イーサネッ
ト| 4K|1080p | 3D,金メッキコネクタ搭載 プレミアムアルミケース

RaspberyPi4のOS

Raspbianのinstall

SD Formatter
FAT32で再フォーマットWin32DiskImager
https://www.raspberrypi.org/downloads/



EEPROMのアップデート
https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md$ sudo rpi-eeprom-update
OpenCV4
https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/Ubuntu/ROSのインストール
UbuntuはLinuxのディストリビューションの一つ. UbuntuはDebianというLinuxディストリビューションから派生• Ubuntu
Ubuntu 14.04 LTS ⇒Ubuntu 16.04 LTS⇒Ubuntu 18.04 LTS(LTS: Long Term support)• ROS1(Ubuntu Trusty)(Ubuntu Xenial)

indigo Igloo

kinetic Kame

melodic MoreniaEloquent Elusor

Dashing Diademata• ROS2
Ubuntu 18.04 install

OpenCV4のinstall

https://jamesachambers.com/raspberry-pi-4-ubuntu-server-desktop-18-04-3-image-unofficial/https://opencv.org/
http://milq.github.io/install-opencv-ubuntu-debian/

(Ubuntu Bionic)

ROS2/Python3の install
https://index.ros.org/doc/ros2/Installation/
http://lunablanca.dip.jp/ros2-install/Ubuntu/ROS2動作確認
python#Stereo Cameraの確認プログラム #!/usr/bin/env
import time

実演:
$ ros2 run arm 2cam

<参考>#CPU温度の測定プログラム
import subprocess
import timefrom time import sleep
cmd="cat /sys/class/thermal/thermal_zone0/temp"
while(1):aa=subprocess.check_output(cmd.split())
print ("CPU temp.=",(int(aa))/1000,"deg.C")
sleep(6)from time import sleep
import subprocess
import cv2
import sys
import numpy as np#ros2
import rclpy
from rclpy.node import Nodeimport sensor_msgs.msg
from cv_bridge import CvBridge#def main():capH = cv2.VideoCapture(0)rclpy.init()
node = rclpy.create_node("Source")
pub_img = node.create_publisher(sensor_msgs.msg.Image, "img_topic")time.sleep(1.0)
cvb = CvBridge()
print ('start')
while True:
ret, dataH = capH.read(-1)
image1=cv2.cvtColor(dataH,cv2.COLOR_BGR2RGB)
pub_img.publish(cvb.cv2_to_imgmsg(image1,"rgb8"))
cv2.imshow('frameH',dataH)
if cv2.waitKey(1) & 0xFF == ord('q'):
break#the end
print ("finished!!!")
capH.release()
cv2.destroyAllWindows()#
if __name__ == "__main__":main()

RasPi4+OpenCV
による色認識講演時間15分㈱人工知能ロボット研究所
西村輝一

画像処理の活用• 色認識• テンプレートマッチング• Key-pointマッチング• 機械学習• HAAR• HOG• 深層学習• 分類/Classification• 物体認識• セグメンテーション• Depth Point cloud色について/HSV(参考)ウィキペディアより・色相（ hue）は、赤、黄、緑、青、紫といった色の様相の相違である。特定の波長が際立っていることによる変化であり、際立った波長の範囲によって、定性的に記述できる。ただし、常に同じ波長が同じ色に見える訳ではない。
赤から、黄、緑、青を経て、紫までは、スペクトル上の色であると言える。
・彩度、明度と併せて、色の三属性と言う。色から彩度と明度または輝度の要素を取り除いた残りであるということもできる。

色空間色相環

ツール: 色数値化プログラムの実演紹介

for y in range(0,320):hsv[x, y, 0]=yhsv[x, y, 1]=255
hsv[x, y, 2]=255
bgr_img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR_FULL)
return bgr_img

ツール: 色認識プログラム

実演:screen_color_set.py

def find_color(img):
global xx,yy
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)h = hsv[:, :, 0]s = hsv[:, :, 1]v = hsv[:, :, 2]mask = np.zeros(h.shape, dtype=np.uint8)
mask[((h>xx) & (h<yy)) & (s>50)] = 255
kernel = np.ones((10,10),np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
contour,hierarchy= cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
mmm=cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
cv2.imshow('mask2',mmm)
rects = []print (len(contour))for contour in contour:
approx = cv2.convexHull(contour)
rect = cv2.boundingRect(approx)
rects.append(np.array(rect))#find top1
nn=0
for rect in rects:
nn=nn+1#cv2.circle(img, (int(rect[0]+(rect[2]/2)),int(rect[1]+rect[3]/2)),int(rect[2]/2), (0, 0, 255), thickness=1)
cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (0, 0, 255), thickness=1)
cv2.putText(img, str(nn), tuple(rect[0:2]), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), thickness=1)
return img#def draw_sq(event,x,y,flags,param):

if __name__ == "__main__":capL = cv2.VideoCapture(0)capR = cv2.VideoCapture(2)capL.set(3,320)
capL.set(4,240)
capR.set(3,320)
capR.set(4,240)
while (capR.isOpened()):
実演:streoCamera.py
ret, frameR= capR.read()ret, frameL= capL.read()imgGrayL = cv2.GaussianBlur(cv2.equalizeHist(cv2.cvtColor(frameL, cv2.COLOR_BGR2GRAY)),(5,5), 0)
imgGrayR = cv2.GaussianBlur(cv2.equalizeHist(cv2.cvtColor(frameR, cv2.COLOR_BGR2GRAY)),(5,5), 0)
window_size = 3
min_disp = 16
num_disp = 112-min_dispstereo = cv2.StereoSGBM_create(minDisparity = min_disp,
numDisparities = num_disp,blockSize = 16,
P1 = 8*3*window_size**2,P2 = 32*3*window_size**2,disp12MaxDiff = 1,
uniquenessRatio = 10,
speckleWindowSize = 100,speckleRange = 32)
print('computing disparity...')
disp = stereo.compute(imgGrayL,imgGrayR).astype(np.float32) / 16.0

ステレオカメラによる距離計測
対象物

D:距離
B:基線長
左カメラ

レンズ
f:焦点距離右カメラ

S:視差

距離 D=B×f/S
実演:colorStereo.py
subun_color_simpl.py

print('generating 3d point cloud...',)h, w = imgGrayL.shape[:2]f = 0.8*w# guess for focal length
Q = np.float32([[1, 0, 0, -0.5*w],[0,-1, 0, 0.5*h], # turn points 180 deg around x-axis,[0, 0, 0, -f], # so that y-axis looks up[0, 0, 1,0]])points = cv2.reprojectImageTo3D(disp, Q)
colors = cv2.cvtColor(frameL, cv2.COLOR_BGR2GRAY)
mask = disp > disp.min()RasPi4+Dlibによる機械学習
講演時間15分㈱人工知能ロボット研究所
西村輝一

人工知能と深層学習
機械学習と深層学習

深層学習
分類/Classification
物体認識
セグメンテーション

機械学習
HAAR
HOG

人工知能
色認識
テンプレートマッチング
Key-pointマッチング比較的簡単な機械学習• 色認識• テンプレートマッチング• Key-pointマッチング• 機械学習• OpenCV3 HAAR
• Dlib HOG• 深層学習• 分類/Classification• 物体認識• セグメンテーション• Depth Point cloudOpenCV4 HAAR特徴量
カスケード分類器

Haar特徴:輝度の勾配方向の分布
実演:haar.py

import cv2#def main():
cap = cv2.VideoCapture(0)cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
while(cap.isOpened()):
img = cap.read()[1]gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=1, minSize=(30, 30))for (x, y, w, h) in face:cv2.rectangle(img, (x, y), (x + w, y+h), (0,0,300), 4)
cv2.imshow("frame", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()#
if __name__ == '__main__':main()

画像処理ライブラリーdlib
OpenCV3になって消えたHog特徴量。dlibがすごいらしい。
SwapFile作成$ git clone https://github.com/JetsonHacksNano/installSwapfile$ cd installSwapfile$ ./installSwapfile.sh
dlibのインストール
http://dlib.net/compile.html$ git clone https://github.com/davisking/dlib.git$ cd dlib$ python setup.py install

Python dlib examples
実演:hogsvm.py
実演:hogStereo.py
実演: video_facial_landmarks.py

Hog特徴量の学習
1.画像収集プログラム$ pip3 install icrawler
https://qiita.com/NakaokaRei/items/8c7e7b1f2c0c7ef8b3a3

2.Annotation

delib/tools/imglab readme.txt 参照

3.学習
delib/python_examples/train_object_detector.py

4.推論

delib/python_examples/

RasPi4+深層学習
講演時間10分㈱人工知能ロボット研究所
西村輝一

深層学習の活用• 色認識• テンプレートマッチング• Key-pointマッチング• 機械学習• OpenCV2 HOG• OpenCV3 HAAR
• Dlib HOG• 深層学習• 分類/Classification• 物体認識• セグメンテーション• Depth Point cloudOpenCVhttps://opencv.org/
OpenCV (Open Source Computer Vision Library) is an open source
computer vision and machine learning software library.
https://docs.opencv.org/master/

Main modules:
core. Core functionality
imgproc. Image Processing
imgcodecs. Image file reading and writing
videoio. Video I/Ohighgui. High-level GUI
video. Video Analysis
calib3d. Camera Calibration and 3D Reconstruction
features2d. 2D Features Framework
objdetect. Object Detection
dnn. Deep Neural Network module
ml. Machine Learning
flann. Clustering and Search in Multi-Dimensional Spaces
photo. Computational Photography
stitching. Images stitchinggapi. Graph API

OpenCV4DNN(Deep Neural Network module)
OpenCV4 DNNは、OpenCVの関数で、Caffe / Tensorflow / Darknet / ONNX / Torchが利用できます。OpenCV3.4.1よりCaffeやTensorFlow等のモデルを読み込みできましたが、OpenCV4.0ではONNXフォーマットもサポートされました。
https://docs.opencv.org/master/d6/d0f/group__dnn.html*畳み込みニューラルネットワーク（Convolution Neural Network)とは、AIが画像分析を行うための学習手法の１つです。

Caffe / Tensorflow / Darknet / ONNX / Torch
Caffe(カフェ)とは、オープンソースのディープラーニングライブラリです。画像認識に特化しており、高速処理が可能です。カリフォルニア大学バークレー校の「コンピュータビジョンおよび機械学習に関する研究センター(Berkeley
Vision and Learning Center)」が中心となって開発しています。
TensorFlow（テンソルフロー）とは、Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリです。
Darknet は C で書かれた機械学習フレームワークです。darknetを用いて構築されたreal-time object
detection systemがYOLOです。
Torch(トーチ)とは、「機械学習ライブラリ」「科学計算フレームワーク」です。GPUを活用する機械学習アルゴリズ
ムを幅広くサポートしています。Facebook が開発している。http://torch.ch/
ONNX(Open Neural Network Exchange)はニューラルネットワークのモデルを定義するためのオープンフォーマットの一つで、様々なDNNフレームワークで作成したモデルをONNXフォーマットで出力することで相互利用することができます。
https://github.com/onnx/models

画像分類/物体認識/セグメンテーション
Classification
画像分類するアルゴリズムです。
Object detection
1: 物体領域候補の抽出
2: 物体領域候補の物体認識
3: 検出領域の絞り込み
SSD (Single Shot Multibox Detector)
SSD は深層学習ベースの物体検出アルゴリズム，物体候補領域の生成と分類を同時に学習・実行することが可能です。
YOLO(You only look once)
YOLO では領域候補の抽出するのではなく直接的に物体検出をしようというものです。

Segmentation
画像の領域を分割するタスクをSegmentation(領域分割)と呼び、Semantic Segmentationは「何が写っているか」で画像領域を分割するタスクのことを指す。

実演• 分類• 物体検出
• セグメンテーション

おまけOpenCV AI Kits
What are OpenCV AI Kits?
Now, to be honest, we are not ready to share a whole lot about our AI kits at this point. But
because you an OpenCV fan, we will share a few secrets!
The kits consist of a board with an embedded camera(s). The kits will come in a few different
configurations. The biggest one will be about the size of a Raspberry Pi. The smallest onewill be less than half of it.
The AI board will be able to run Deep Learning models for image classification, object
detection, segmentation, human pose estimation, and many more in real time.
Some configurations will have a depth camera in addition to a regular RGB camera.
We will make it really easy for you to train your own models and bring it to the device withawesome tutorials and support.

MATLABからサーボをコントロール
講演時間10分㈱人工知能ロボット研究所
西村輝一

MATLABの活用方法
MATLAB Simulink

制御プログラム開発

二足歩行ロボット協会データベース
http://biped-robot.or.jp/dbreports/

MATLAB Script

プロトの開発

機械学習のツール充実

簡単に開発可能ROSと連携Simulink連携サーボ駆動プログラム robo-one server
http://bipedrobot.or.jp/upload/dbmaterials/389_bca292de0a969fc91793281ec
5d73780original.pdf
http://bipedrobot.or.jp/upload/dbmaterials/566_bdd990b6575556054f928bc44061159foriginal.pdf

KRSコマンドポジション設定コマンド
角度の指定によりサーボを動作させることができます。
ＣＭＤ ポジション設定コマンド
POS_H / POSL サーボの設定舵角

ＣＭＤ ポジション設定

サーボの設定舵角

MATLAB script M-fileプログラム
実演:M-fileでサーボを動かそう。
s = serialport("/dev/ttyUSB0",115200);
s.Parity="even";
sid=0;
t_angle=3500;
while t_angle<11500
t_angle=t_angle+5
s_angle=set_angle(s,sid,t_angle)
end
clear sfunction s_angle = set_angle(s,sid,t_angle)
buff(1)=0x80+bitand(sid,0x1f);b2=uint16(bitshift(t_angle,-7));
buff(2)=uint8(bitand(b2,0x007f));
buff(3)=uint8(bitand(t_angle,0x007f));
write(s,buff,"uint8");data = read(s,3,"uint8");s_angle=bitshift(data(2),7)+data(3);end

USBアダプターのセッティング$ sudo modprobe ftdi_sio$ sudo su
root@$ echo 165C 0008 > /sys/bus/usbserial/drivers/ftdi_sio/new_id
root@$ chmod 666 /dev/ttyUSB0
root@$ exit
$ ls /dev/ttyU*ご清聴ありがとうございました。