Zybo/Petalinux 2018.3でUSBカメラを使う
無印ZyboにPetalinux 2018.3をインストールしてUSBカメラ(Webカメラ)を使用する。
- 無印Zybo(Zybo Z7-10/20ではなく古いほうのZybo)
- 開発用PC:Windows 10(Vivado/XSDKをインストール)
- 開発用Linux:Ubuntu 16.04(Petalinux開発環境をインストール)
次の記事の手順で開発環境をインストールする。
ZYBO (Zynq) 初心者ガイド (1) 開発環境の準備
https://qiita.com/take-iwiw/items/966f252f6ca954aff08b
ただし、Vivado/XSDK/Petalinuxのバージョンは2018.3を使用する。
次の記事の手順で、ZyboをEthernet使用可能な状態にする。ボードファイルのMDIO設定ミスを修正したPS部のみのブロックを生成する。
ZYBO (Zynq) 初心者ガイド (13) LAN(Ethernet 0)を使う (PetaLinux)
https://qiita.com/take-iwiw/items/ac489acaca1ab54d7ce8
ボードファイルは、"Zybo"(Zybo Z7-10/20ではない)を使用する。
開発用Linuxで次のようにコンフィグ、ビルドする。以下の例では、~/work/SimplePS/images/linux/ディレクトリにBOOT.BINとimages.ubが生成されるので、この2つのファイルをSDカードに書き込んでZyboを起動する。
cd ~/work/ petalinux-create --type project --template zynq --name SimplePS cd SimplePS/ petalinux-config --get-hw-description=../project_1.sdk →このコンフィグ画面では何も変更しない。 petalinux-config -c kernel →UVCサポートなどを有効にする。下記の通り。 petalinux-config -c rootfs →packagegroup-petalinux-x11などを有効にする。下記の通り。 vi project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dsti →デバイスツリーを修正する。 petalinux-build petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga project-spec/hw-description/design_1_wrapper.bit --u-boot
最後に実行するpetalinux-packageコマンドによるBOOT.BIN生成は上記の通りで、Qiitaの記事(Petalinux 2017.4)とはdesign_1_wrapper.bitのディレクトリが異なる。
petalinux-build時に次の警告が出るが、無視しても大丈夫なようだ。
WARNING: petalinux-user-image-1.0-r0 do_rootfs: [log_check] petalinux-user-image: found 1 warning message in the logfile: [log_check] warning: %post(sysvinit-inittab-2.88dsf-r10.plnx_zynq7) scriptlet failed, exit status 1
参考
AR# 71110
2018.x Zynq UltraScale+ MPSoC: Yocto or PetaLinux throws warnings when the build do_rootfs task completes
https://www.xilinx.com/support/answers/71110.html
petalinux-config -c kernel時のコンフィグ項目
Device Drivers > USB supportには最初からチェックが入っている。その項目内で、Support for Host-side USBなどいくつかの項目に最初からチェックが入っている。さらに次の項目にチェックを入れる。
Device Drivers > USB suport > USB Gadget Support > [*] USB Webcam function <*> USB Webcam Gadget Device Drivers > Multimedia support > [*] Media USB Adapters > ←チェックを入れると、さらに下層に入れるようになる <*> USB Video Class (UVC) (NEW)
petalinux-config -c rootfs時のコンフィグ項目
Filesystem Packages > misc > python3 > [*] python3 Filesystem Packages > misc > v4l-utils > [*] v4l-utils Filesystem Packages > misc > xauth > [*] xauth Petalinux Package Groups > packagegroup-petalinux-opencv > [*] packagegroup-petalinux-opencv Petalinux Package Groups > packagegroup-petalinux-x11 > [*] packagegroup-petalinux-x11
python3とopencvは、USBカメラ映像表示プログラムで使用するため。不要ならチェックなし。
デバイスツリー(system-user.dtsi)の修正内容
初期状態では空の状態なので、次のように追記する。
/include/ "system-conf.dtsi" /{ usb_phy0: usb_phy@0 { compatible = "ulpi-phy"; #phy-cells = <0>; reg = <0xe0002000 0x1000>; view-port = <0x0170>; drv-vbus; }; }; &usb0 { compatible = "xlnx,zynq-usb-2.20a", "chipidea,usb2"; status = "okay"; clocks = <0x1 0x1c>; dr_mode = "host"; interrupt-parent = <0x4>; interrupts = <0x0 0x15 0x4>; reg = <0xe0002000 0x1000>; usb-phy = <&usb_phy0>; };
起動、USBカメラ映像表示
起動時、Zyboのコンソールには次のようにX11のエラーが表示される。Zyboの出力画面を用意していないためだと思われる。開発用PC/LinuxのX serverを使用して(sshでログイン、X forward)USBカメラの映像を表示する場合は問題なし。
(EE) Fatal server error: (EE) no screens found(EE) 中略 (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information. (EE) (EE) Server terminated with error (1). Closing log file. 中略 xinit: unable to connect to X server: Connection refused xinit: server error
LinuxなどのX serverありのPCから、X forwardありのsshでログイン後、次のようなプログラムを実行することで、USBカメラ(Webカメラ)の画面を表示できる。
import cv2 capture = cv2.VideoCapture(0) while(True): ret, frame = capture.read() cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break capture.release() cv2.destroyAllWindows()
USBカメラの映像が表示されるが、1秒以上の遅延があり、Frame Per Secondも少ない。
参考Web
ZYBO (Zynq) 初心者ガイド (1) 開発環境の準備
https://qiita.com/take-iwiw/items/966f252f6ca954aff08b
ZYBO (Zynq) 初心者ガイド (13) LAN(Ethernet 0)を使う (PetaLinux)
https://qiita.com/take-iwiw/items/ac489acaca1ab54d7ce8
Ubuntu+ZynqでUSB-HOSTが機能しないときの解決方法
https://qiita.com/lp6m/items/45d90e9d2443c2198e96
AR# 71110
2018.x Zynq UltraScale+ MPSoC: Yocto or PetaLinux throws warnings when the build do_rootfs task completes
https://www.xilinx.com/support/answers/71110.html
Zybo+PetalinuxでUVCカメラを使う
http://d.hatena.ne.jp/seinzumtode/20171120/1511167136
Zynq Linux USB Device Driver
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842272/Zynq+Linux+USB+Device+Driver
OpenCV 接続したカメラから動画を取得しよう (Python)
https://weblabo.oscasierra.net/python/opencv-videocapture-camera.html