エアガン測定

エアガンに関する色々を測定したりしなかったりしています http://www.eonet.ne.jp/~daisaku-tech/index.html

Zybo/Petalinux 2018.3でUSBカメラを使う

無印ZyboにPetalinux 2018.3をインストールしてUSBカメラ(Webカメラ)を使用する。

  • 無印Zybo(Zybo Z7-10/20ではなく古いほうのZybo)
  • 開発用PC:Windows 10(Vivado/XSDKをインストール)
  • 開発用LinuxUbuntu 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