Li Yingping's Studio.

那些年,我们调过的嵌入式开发平台

字数统计: 6.8k阅读时长: 29 min
2019/08/18

Nvidia Jetson Xavier


关于Nvidia Jetson Xavier Development Kit


Xavier 平台简介

  • PASS

Xavier 相关资源

  • PASS

搭建工作环境


刷机

  • PASS

刷机完成的起手式

1
2
3
4
5
6
7
8
9
10
11
12
13
# Start

sudo apt update
sudo apt upgrade

# Install Some Python Tools

sudo apt install ipython ipython3 python-ipython python3-ipython python-pip python3-pip python-dev python3-dev

# PiP Mirror

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  • 上述过程中pip可能会抛出一个异常ImportError: cannot import name 'main',需要编辑/usr/bin/pip,将from pip import main下的三行修改如下即可解决问题。
    1
    2
    3
    from pip import __main__
    if __name__ == '__main__':
    sys.exit(__main__._main())

创建swap分区

  1. 创建一个8G的交换分区文件

    1
    sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
  2. 更改swapfile的权限

    1
    sudo chmod 600 /swapfile
  3. 创建swap区

    1
    sudo mkswap /swapfile
  4. 手动挂载swap区

    1
    sudo swapon /swapfile
  5. 确认swap区是否正在使用

    1
    swapon -s

Swap分区和磁盘的自动挂载

  • Linux系统开机时自动挂载的分区由/etc/fstab文件负责指定,Xavier的30G空间在装好系统后已经所剩无几,但可以额外安装M2接口的固态硬盘来拓展其空间,将挂载的配置信息添加进/etc/fstab即可,对于Swap分区和硬盘设备,其可采用下面的模板:
    1
    2
    3
    4
    5
    6
    # Swap
    /swapfile swap swap defaults 0 0

    # NVME SSD
    /dev/nvme0n1 /mnt/ssd ext4 defaults 1 1

TensorFlow

  1. 安装必要依赖(这个过程可能会很漫长)

    1
    2
    3
    sudo apt-get install libhdf5-serial-dev hdf5-tools
    sudo apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev
    sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker grpcio six mock requests gast h5py astor termcolor
  2. 安装TensorFlow

    1
    pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu --user
  3. 修改~/.bashrc,将/home/li/.local/bin添加到PATH

  4. 开启高功率模式和AMP为TensorFlow加速

    1
    2
    3
    4
    5
    6
    7
    ## Best Practice
    sudo nvpmodel -m 0 # Open Max-N Model

    ## Append in .bashrc
    export TF_ENABLE_AUTO_MIXED_PRECISION=1

    ## TODO : Automatic Mixed Precision

安装开发工具

Visual Studio Code

  • Xavier采用ARM64架构,而Microsoft官方只提供了i386和amd64架构下的VSCode的安装包。不过,在Xavier上可以使用VSCode的一个由Headmelted维护的开源复刻版本Code-OSS,该版本提供了arm64和armhf架构上的版本,故而可以运行在Xavier以及树莓派这样的ARM架构的平台上。下面是该项目的软件包发布地址:

    软件包发布地址:https://packagecloud.io/headmelted/codebuilds

  • headmelted给出了多种安装方式,在上述连接中均可以看到,搬运来一种简单暴力的方式,以1.32.0版本为例:

    1
    2
    3
    4
    5
    wget --content-disposition https://packagecloud.io/headmelted/codebuilds/packages/debian/stretch/code-oss_1.32.0-1550644676_arm64.deb/download.deb

    sudo dpkg -i '/home/nvidia/code-oss_1.32.0-1550644676_arm64.deb'

    sudo apt install -f

IPython

  • IPython是笔者非常喜欢的一款Python交互式Shell,其安装方式如下:
    1
    2
    3
    4
    5
    # Python 2
    sudo apt-get install python-ipython ipython

    # Python 3
    sudo apt install python3-ipython ipython3

PyCharm

  • PASS

工程开发笔记


LaneNet-ROS

LaneNet(MaybeShewill-CV实现)

  • Pass

创建适合Python3使用的ROS工作空间

  • ROS(Robot Operating System)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

  • ROS在Xavier上的安装@Jetsonhacks给出了一个相当好用的轮子,这是其GitHub上的Repo地址Jetsonhacks/installROSXavier,不过ROS默认的Python版本是Python2,因此使用Python3编程的程序不能使用部分ROS组件,譬如tfcv_bridge等,诸如下面的错误就是因为这样的原因,所以笔者对@Jetsonhacks的脚本加以维护构建了一个适合Python3的ROS工作空间。

    1
    2
    3
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/cv_bridge/core.py", line 91, in encoding_to_cvtype2
    from cv_bridge.boost.cv_bridge_boost import getCvType
    ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
  • 笔者维护的版本,调整了ROS的Ubuntu镜像源的GPG Key服务器,并在创建工作环境的脚本中添加了一段命令用于创建Python3的虚拟环境,并将geometry库编译出Python3的接口。笔者的安装脚本发布在Bye-lemon/installROSXavier上,可以使用如下命令安装ROS并创建工作环境。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 获取安装脚本
    git clone https://github.com/Bye-lemon/installROSXavier

    # 安装ROS
    cd installROSXavier
    ./installROS.sh -p [ros-melodic-ros-base | ros-melodic-desktop | ros-melodic-desktop-full]

    # 创建工作空间
    ./setupCatkinWorkspace.sh [optionalWorkspaceName]

  • 在创建了工作空间之后,还需要在工作空间中继续编译Python3版本的cv_bridge,其具体操作如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 安装必要依赖
    sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge

    # 打开ROS工作空间
    cd ~/catkin_ws
    rm -rf /build /devel

    # 获取源码并签出与ROS对应的版本
    git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
    cd src/vision_opencv/
    git checkout $(apt-cache show ros-melodic-cv-bridge | grep Version | cut -d ':' -f 2 | cut -d '-' -f 1 | sed 's/^[ \t]*//g')

    # 编译
    cd ../../
    catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so

    # 使用该工作空间
    source venv/bin/activate
    source devel/setup.sh

  • 如果在编译的过程中出现类似下面的错误,是因为CMake尝试寻找库libboost_python3.so,但在Ubuntu系统中正确的库应该是libboost_python-py36.so(/usr/lib/aarch64-linux-gnu/libboost_python-py36.so),故而需要将文件src/vision_opencv/cv_bridge/CMakeLists.txt 中的find_package(Boost REQUIRED python3)替换为find_package(Boost REQUIRED python-py36)并重新编译。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message):
    Unable to find the requested Boost libraries.

    Boost version: 1.58.0

    Boost include path: /usr/include

    Could not find the following Boost libraries:

    boost_python3

    No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the
    directory containing Boost libraries or BOOST_ROOT to the location of
    Boost.
    Call Stack (most recent call first):
    CMakeLists.txt:11 (find_package)

    References:

    在ROS中使用Python3: https://community.bwbot.org/topic/499/%E5%9C%A8ros%E4%B8%AD%E4%BD%BF%E7%94%A8python3
    Unable to use cv_bridge with ROS Kinetic and Python3: https://stackoverflow.com/questions/49221565/unable-to-use-cv-bridge-with-ros-kinetic-and-python3?rq=1

Airsim-ROS

调试与运行

  • 安装RQT

    1
    sudo apt install ros-melodic-rqt ros-melodic-rqt-common-plugins ros-melodic-rqt-robot-plugins
  • tmux+rqt_image_view

    1
    2
    3
    4
    5
    6
    roscore

    rosrun airsim car_image_raw.py

    roslaunch lane_detector lanenet.launch

  • 需要注意的是,scripts文件夹下的文件必须具有执行权限,如果遇到形如ERROR: cannot launch node of type [<packagename>/<filename>]: can't locate node [<filename>.py] in package [<packagename>]的错误,且可以确认scripts目录下确实有这一文件,那么很有可能就是因为该文件失去了执行权限,可以通过下面的指令为其赋予权限:

    1
    sudo chmod +x /path/to/your/file

LaneNet-ENet(stesha2016实现)

  • PASS

视觉SLAM

编译安装OpenCV4Tegra

  • OpenCV4Tagra是对OpenCV进行了CPU和GPU两个层次的优化的一个发行版,Jetpack默认安装了OpenCV4Tegra,不过,这个版本的OpenCV不包含SIFT和SUFT的包。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # Remove Old Version

    sudo apt-get purge libopencv*
    sudo apt autoremove
    sudo apt-get update

    # Required Package

    sudo apt-get install build-essential
    sudo apt-get install cmake cmake-curses-gui g++ git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libglew-dev
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
    sudo apt-get install libgstreamer1.0 libgstreamer1.0-dev libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-dev

    # Download Source Code

    wget https://github.com/opencv/opencv/archive/4.1.0.zip
    wget https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
    unzip 4.1.0.zip
    unzip 4.1.0.zip.1

    # Create Workspace

    cd opencv-4.1.0
    mkdir build
    cd build

    # Create CMake Script

    PASS

    # Build

    chmod u+x cmake_target.sh
    ./cmake_target.sh
    make -j8
    sudo make install

DJI无人机

DJI-SDK的编译安装

  • 一个完整的安装过程如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 安装必要依赖
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install build-essential git cmake pkg-config

    # 克隆源代码
    cd ~
    git clone https://github.com/dji-sdk/Onboard-SDK.git

    # 编译安装
    cd Onboard-SDK
    mkdir build
    cd build
    cmake ..
    make -j4
    make install

Nvidia Jetson Nano


关于Nvidia Jetson Nano Development Kit


Nano 平台简介

  • PASS

Nano 相关资源

搭建工作环境


刷机

  • PASS

刷机完成的起手式

PATH

1
2
export PATH=$PATH:/usr/local/cuda-10.0/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/bin/lib64:$LD_LIBRARY_PATH

JetCard

  • PASS

Jetcam

  • Jetcam是英伟达官方给出的一款应用于Jetson Nano的摄像头模块驱动库,其安装方式如下:
    1
    2
    3
    git clone https://github.com/NVIDIA-AI-IOT/jetcam
    cd jetcam
    sudo python3 setup.py install

YOLO开发笔记


YOLO

  • PASS

Deploy YOLO & Run Official Demo

  1. Clone Darknet Framework

    1
    2
    git clone https://github.com/pjreddie/darknet.git
    cd darknet
  2. Modify Makefile

    1
    2
    3
    4
    5
    6
    7
    GPU=1
    CUDNN=1
    OPENCV=1
    OPENMP=0
    DEBUG=0

    ARCH=-gencode arch=compute_53,code=[sm_53,compute_53]
  3. Compile

    1
    make -j4
  4. Download YOLOv3’s Pre-train Weight

    1
    wget https://pjreddie.com/media/files/yolov3.weights
  5. Modify Config

    1
    2
    3
    4
    5
    6
    7
    # Testing
    batch=1
    subdivisions=1

    # Training
    #batch=64
    #subdivisions=16
  6. Test

    1
    ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

Huawei HiKey 970


HiKey 970 平台简介

PASS

开发平台构建

起手式

中文字体

1
sudo apt install fonts-wqy-zenhei

exFat U盘读取

1
sudo apt install exfat-utils

dlib

1
2
3
4
5
6
7
sudo apt install build-essential cmake pkg-config
sudo apt install libboost-dev libopenblas-dev

wget http://dlib.net/files/dlib-19.17.tar.bz2
tar -jxvf dlib-19.17.tar.bz2
cd dlib-19.17
python setup.py install

Raspberry Pi


魔镜INOM


魔镜·INOM开发资源

项目参考源Repo

DDDD魔改版本

部分必要依赖的安装说明

(Option) 树莓派系统清理

  • 当树莓派仅用来运行魔镜时,树莓派系统中很多程序是没用的,如果内存卡的空间不足,可以将它们拆卸,可拆卸的软件可参考下面两条指令。
    1
    2
    sudo apt-get remove --purge idle3 java-common libreoffice* minecraft-pi scratch nuscratch penguinspuzzle python-minecraftpi python3-minecraftpi smartsim sonic-pi wolfram-engine
    sudo apt-get autoremove

淘宝定制版cnpm的安装

  • MagicMirror基于node.js开发,npm是必备的工具,淘宝为npm官方源提供了一个镜像来解决国内使用官方源速度过慢的问题。可以修改npm的registry来指定淘宝镜像源,更好的方法是使用淘宝定制的cnpm工具来代替npm。cnpm可以通过npm安装。

    1
    sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
  • cnpm也可以通过给npm设置参数并添加别名实现等效效果,具体操作为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    alias cnpm="npm --registry=https://registry.npm.taobao.org \
    --cache=$HOME/.npm/.cache/cnpm \
    --disturl=https://npm.taobao.org/dist \
    --userconfig=$HOME/.cnpmrc"

    # Or alias it in .bashrc or .zshrc
    $ echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
    --cache=$HOME/.npm/.cache/cnpm \
    --disturl=https://npm.taobao.org/dist \
    --userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc

OpenCV 3.3.0的编译安装

  • MagicMirror的插件MMM-Facial-Recognition-OCV3的一个必要依赖是包含contrib包的OpenCV 3.3.0版本,通过包管理工具apt无法获取到高版本的OpenCV,只能通过源码编译的方式安装。MMM-Facial-Recognition-OCV3 Repo的README中给出了比较详细的安装方式,不过由于我们只需要3.3.0版本的OpenCV,故而没有必要对整个Repo进行Clone,笔者给出如下编译方案。
  1. 安装必要依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    sudo apt-get update
    sudo apt-get upgrade

    sudo apt-get install build-essential git cmake pkg-config
    sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
    sudo apt-get install libgtk2.0-dev
    sudo apt-get install libatlas-base-dev gfortran
    sudo apt-get install python2.7-dev python3-dev

    wget https://bootstrap.pypa.io/get-pip.py
    sudo python get-pip.py
    sudo python3 get-pip.py

    pip install numpy
  2. 获取3.3.0版本的OpenCV及contrib包源代码

    1
    2
    3
    4
    5
    6
    7
    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
  3. 修改配置文件/etc/dphys-swapfile中交换空间的大小如下,以避免启用多核编译可能会存在存储空间问题

    1
    2
    3
    4
    # set size to absolute value, leaving empty (default) then uses computed value
    # you most likely don't want this, unless you have an special disk situation
    # CONF_SWAPSIZE=100
    CONF_SWAPSIZE=1024
  4. 重启交换服务,使刚修改的配置生效

    1
    2
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
  5. 编译安装OpenCV

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    cd ~/opencv-3.3.0
    mkdir build
    cd build

    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
    -D BUILD_EXAMPLES=ON ..

    make -j4

    sudo make install

    sudo ldconfig

常见问题自助

树莓派2的镜像在树莓派3中启动卡彩虹屏的问题

  • 这一问题发生在我将树莓派2的内存卡放在树莓派3上启动时。树莓派2和3的内核、启动文件、文件系统等都有一定的区别,使得树莓派2的镜像不能在树莓派3上启动,这时树莓派会一直显示彩虹屏。关于通过修改内核和启动文件以完成2向3的迁移的内容,CSDN等平台皆有文章讨论。笔者选择了最保险也是最暴力的方式,就是将一切在树莓派3上重建一遍~(手动摊手)

树莓派连接HDMI显示器开机黑屏的解决方案

树莓派无法安装MySQL_Python库的解决方案

  • SQLAlchemy连接MySQL需要MySQL_Python的依赖库,这个库在安装时会报出EnvironmentError: mysql_config not found的错误,可以通过使用apt安装default-libmysqlclient-dev包来解决。
    1
    sudo apt-get install default-libmysqlclient-dev

SQLAlchemy不使用UTF-8编码的解决方案

  • SQLAlchemy默认使用latin-1编码,故而在向使用UTF-8编码的数据库传输UTF-8方式编码的数据时会出现乱码或者报错的情况。这种问题需要在创建Engine时显式地指定数据的编码方式为UTF-8,具体的操作是:
    1
    engine = create_engine("mysql+pymysql://user:password@host:port/database?charset=utf8", encoding='utf-8')

树莓派#@|等键位错乱的问题

  • 由于树莓派是英国人发明的,故而树莓派的默认键位环境是英国键盘布局,而我们使用的是美国标准键盘布局,因而会有键位不同的情况。在系统设置中或输入法设置中将键盘布局调整为美式布局即可。

使用pip安装lxml失败的解决方案

  • 笔者在安装tushare库时,其必要依赖lxml在编译过程中报出一系列错误,形如Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?,但事实上libxml2库在系统中已经安装了。查找资料,这个问题可以通过安装下列库解决。
    1
    sudo apt-get install python-dev libxml2-dev libxslt1-dev zlib1g-dev

MMM-Facial-Recognition使用中的问题

  • MMM-Facial-Recognition插件在配置完成被MagicMirror调用时发生如下错误TypeError: PythonShell is not a constructor at Class.python_start (/home/pi/MagicMirror/modules/MMM-Facial-Recognition/node_helper.js:11:21)。造成这个错误的原因是npm包python_shell的后续版本相较于作者使用的包版本在接口上有差异,而作者在package.json中并没有指定特定的版本,安装一个较低版本的包即可。

    1
    npm install python-shell@0.4.0
  • 在Github Repo中,作者在使用识别功能之前通过export命令导出了算法和用户列表两个参数,这样的到处是临时的,重启树莓派之后会重置,为了避免每次启动树莓派后重复操作过于繁琐,可以将两个export语句写入.bashrc文件,这样重启后会自动加载。

PowerShell禁止执行脚本的解决方案

  • 在Win10系统中使用PowerShell执行脚本时,报出无法加载文件[filename].ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"。的错误。这是因为首次在计算机上启动Windows PowerShell时,其执行策略很默认是Restricted,Restricted 策略不允许任何脚本运行。运行未签名脚本和来自其他用户的签名脚本,需要修改执行策略为RemoteSigned,这一修改需要指令:
    1
    set-ExecutionPolicy RemoteSigned

树莓派重启之后原有声音设置失效的解决方案

  • 树莓派存在重新启动之后扬声器或麦克风声音变低甚至置零的现象,这种现象的最佳实践实在调整音量后使用指令sudo alsactl store将设置保存到系统。然而,实测并无效果。(就好比网上的教程都说NTP就能解决树莓派的时间问题……)实测有效的一种折中的方案是,将配置文件保存到某一个位置,尔后,条件一个开机启动项,用于加载声音配置。具体操作是:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 保存配置到本地
    alsactl --file ~/.config/asound.state store

    # 创建开机启动服务
    vim ~/.config/autostart/alsarestore.desktop

    # 将如下内容输入至文件
    [Desktop Entry]
    Type=Application
    Terminal=false
    Name=alsarestore
    Exec=alsactl --file ~/.config/asound.state restore

树莓派时间自同步的实现

  • 树莓派没有主板电池,断电之后无法自行维护系统时间,故而时常出现因为本地时间与服务器时间不符引发的网络故障。网上说可以通过配置NTP服务解决,实测无效,寻找到的一种折中的方案是维护一个自启动脚本,从互联网上获取时间。具体操作可参考这篇文章:https://www.colabug.com/3235071.html

在Windows系统下访问树莓派分区的方法

  • Linux操作系统的文件系统一般是EXT而Windows一般是NTFS,故而,Windows系统无法直接读取树莓派的文件系统。一种解决方案是为Windows系统安装EXT文件管理器。一款比较推荐的产品是Ext2FSD,这款产品以服务形式启动,可以将树莓派的文件系统挂在成磁盘,经过设置后对Linux分区可读可写,对于树莓派的开发来说还是很方便的。Ext2FSD是一个开源项目,下面是其地址和下载链接:

项目官网:https://www.ext2fsd.com/
下载地址:https://sourceforge.net/projects/ext2fsd/

树莓派打不开摄像头的问题

  • 这一问题发生的很莫名,有几天没打开设备使用,再开机运行程序就发现树莓派打不开摄像头了。自检过程中确认v4l2的驱动已添加到/etc/modules-load.d/modules.conf,且无连接错误,使用vcgencmd get_camera显示supported=1 detected=0。控制变量,使用另一块树莓派,发现问题依然存在,说明是TF卡中系统的问题。问题的解决也很莫名,sudo apt updatesudo apt upgrade二连就结束了,具体细节受限于时间没有继续确认。

参考阅读:https://www.raspberrypi.org/documentation/raspbian/applications/camera.md

为树莓派系统备份img镜像的方法

琐碎且毫无用处的知识

  • ics日历交换格式.ics 文件格式RFC 5545所定义的标准的日历数据交换格式,能够被大多数日历应用所接受,比如Windows的日历、Outlook,macOS的日历APP,以及iOS、Android等自带的日历应用。可以推荐的ics源有很多,网上也有专门的ics聚合平台。这里给出一个来自苹果官方的中国节假日日历表的源:https://p10-calendars.icloud.com/holiday/CN_zh.ics

Altera FPGA


Quartus Internal Error Code 82 Occured的解决


Intel给出的解决方案

Description

You may be receiving the “Attempted to access JTAG server —internal error code 82 occurred” if you have a firewall or anti-virus program running when you installed Quartus® II and the Altera® JTAG Server. To resolve this you will have to disable/uninstall your firewall or anti-virus program then start the JTAG server. Once you have started the Altera JTAG Server then you may enable/reinstall the firewall or anti-virus program.

To Start, Stop, or Restart the Altera JTAG Server.

  1. Open the “Control Panel”
  2. Select “Adminstrative Tools”
  3. Select “Services”
  4. Highlight “Altera JTAG Server” then select Start, Stop, or Restart
  • 简单地说就是:关闭防火墙和杀毒软件,将JTAG Server服务打开

实际操作中遇到的问题

  • 笔者在实际操作中发现服务中并没有JTAG Server这个选项,故而无法启动服务。在Quartus的安装目录的bin文件夹下有一个可执行文件jtagserver.exe,在这一目录下打开命令行,执行命令jtagserver.exe --install,尔后使用命令jtagserver.exe --status查看服务器状态,出现Server is running字样即可,此时回到Quartus中就可以正常使用JTAG来编程和调试了。

Xilinx FPGA


What is PYNQ?


  • 例行在开始正题之前介绍一下文章主角来凑字数~PYNQ 是什么,官方给出的介绍是这样的:

    PYNQ is an open-source project from Xilinx® that makes it easy to design embedded systems with Xilinx Zynq® Systems on Chips (SoCs).

    Using the Python language and libraries, designers can exploit the benefits of programmable logic and microprocessors in Zynq to build more capable and exciting embedded systems.

    PYNQ users can now create high performance embedded applications with

    • parallel hardware execution
    • high frame-rate video processing
    • hardware accelerated algorithms
    • real-time signal processing
    • high bandwidth IO
    • low latency control
  • 简单的翻译一下,就是说:PYNQ 是一种符合时代潮流的可以使用Python语言进行编程的FPGA开发平台

  • 工欲善其事,必先利其器。愉快的使用PYNQ-Z2开发,大概需要下面这些工具:

    • 硬件设备:一块PYNQ-Z2的板子、一张至少8G的内存卡、一个读卡器、一根网线。

    • 软件工具:Xilinx Vivado 开发环境、镜像烧写工具(Rufus or Win32diskimager)、终端模拟器(PuTTY or XShell)。

PYNQ 相关资源


连接并进入PYNQ-Z2


使用网线连接并进入PYNQ-Z2

  1. 开始之前,首先要将PYNQ的原始镜像烧写到内存卡中,将内存卡插入Z2板子上的内存卡槽。这时,拿起你的板子,使得XILINX的Logo和文字处在一个正常的方向,在右上角找到BOOT的跳线帽,选择从SD卡启动;在左下角找到电源跳线帽,选择使用USB供电,或者跳到REG使用电源线供电。

  2. 使用网线将PYNQ与计算机连接,打开网络配置,将本机的IP改成2网段下除99之外的任一IP,后续操作有一定概率需要关闭Windows防火墙。

  3. 将Z2供电并开机,此时,通过SSH访问192.168.2.99即可进入镜像系统,用户名和密码均默认为xilinx;在资源管理器地址栏输入\\192.168.2.99\xilinx即可进入默认目录下,拖拽或复制粘贴即可将文件传到Z2上;镜像默认自启动Jupyter Notebook,在浏览器中输入192.168.2.99:9090即可打开Notebook执行程序。

使用COM口连接并进入PYNQ-Z2

  • PYNQ支持通过串口进入Linux Terminal,将Z2与PC通过Micro USB线相连,在设备管理器中找到Z2对应的COM口(可能有两个,一个是Debug,一个是Console),在PuTTY或XShell中打开对应的串口,波特率设置为115200,即可进入Linux Terminal。

将PYNQ-Z2接入无线网并连接

  1. 首先,我们需要一块USB网卡,不过很多网卡Z2并不支持,实测发现360随身WiFi无线网卡是可用的。

  2. 先连接PYNQ到PC,使用串口连接可能比较方便,新建一个Python脚本,内容如下:

    1
    2
    3
    4
    5
    6
    7
    from pynq.lib.wifi import WiFi

    wifi = WiFi()
    ssid = "[Your Wi-Fi SSID]"
    password = "[Password]"

    wifi.connect(ssid, password)
  3. 这时的设备已经可以通过无线网卡访问网络了,如果希望通过IP访问Z2,可以在Terminal下使用ifconfig命令查看设备IP地址。

使用VNC连接并进入PYNQ-Z2

  1. PYNQ-Z2官方镜像中的apt软件源只是ARM架构下apt软件源的一小部分,这其中并不包含VNC服务器,所以,要对Z2的apt源进行维护。在Super权限下修改/etc/apt/(路径待维护)下的文件。使用中科大镜像站的Ubuntu Ports源:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 默认注释了源码仓库,如有需要可自行取消注释
    deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse

    # 预发布软件源,不建议启用
    # deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe multiverse
  2. 安装VNC服务器:tightvncserver

    1
    2
    sudo apt-get update
    sudo apt-get install tightvncserver
  3. 使用命令vncserver :1即可启动一个VNC窗口,首次启动会需要输入一个VNC密码并选择是否开启只读的VNC连接。服务启动后默认监听5901端口,详细的信息在日志文件中会找到,在局域网下的PC机上使用VNC Client访问5901端口即可进入图形化的操作界面中。如需关闭VNC Server,可以使用命令vncserver -kill :1

配置Jupyter


  • 当然,Jupyter Notebook不做任何配置也不是不能用,但是作为一个学艺不精的不折腾不舒服斯基主义者总归是要搞一搞的,换个暗色皮肤,装点使用的插件还是有必要的。写代码的人,何必自己为难自己,换个舒服的环境自己用着舒服就好。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Jupyter Notebook Themes
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterthemes

    # Jupyter Notebook Plugins
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter_contrib_nbextensions && sudo jupyter contrib nbextension install
    # Start NBExtension GUI
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter_nbextensions_configurator sudo jupyter nbextensions_configurator enable
    # Install Wheels
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple autopep8
  • PYNQ上的安装过程比较缓慢,建议做一杯手冲咖啡,然后静心等待即可。安装完毕后,就可以愉快的玩耍了,NBExtension被集成在了Jupyter Notebook的网页端之中,通过http://pynq:9090/nbextensions即可访问,当然,CLI也是有滴;而主题工具提供的是CLI。jupyterthemes的使用非常简单,使用jt -l命令,可以查看主题列表;使用jt -t <Theme Name>命令,可以切换主题的css样式表;使用jt -r指令可以恢复主题的css样式表。

  • 下面是笔者个人使用的插件,需要注意的是不论是插件还是主题,配置过后都需要重启Jupyter Notebook:

插件名 功能
2to3 Converter 提供一个按钮,将Python2代码转化为Python3的代码
Autopep8 代码格式化插件
Codefolding in Editor 在cell内折叠代码块
Hinterland Tab代码补全
nbTranslate 翻译插件
Snippets 代码片段管理
Table of Contents (2) TOC插件
Tree Filter 在Tree页面提供搜索功能
Variable Inspector 变量查看器

BaseOverlay的接口


LED和彩色LED

  • PASS

拨挡开关和按键

  • PASS
CATALOG
  1. 1. Nvidia Jetson Xavier
    1. 1.1. 关于Nvidia Jetson Xavier Development Kit
      1. 1.1.1. Xavier 平台简介
      2. 1.1.2. Xavier 相关资源
    2. 1.2. 搭建工作环境
      1. 1.2.1. 刷机
      2. 1.2.2. 刷机完成的起手式
      3. 1.2.3. 创建swap分区
      4. 1.2.4. Swap分区和磁盘的自动挂载
      5. 1.2.5. TensorFlow
      6. 1.2.6. 安装开发工具
        1. 1.2.6.1. Visual Studio Code
        2. 1.2.6.2. IPython
        3. 1.2.6.3. PyCharm
    3. 1.3. 工程开发笔记
      1. 1.3.1. LaneNet-ROS
        1. 1.3.1.1. LaneNet(MaybeShewill-CV实现)
        2. 1.3.1.2. 创建适合Python3使用的ROS工作空间
        3. 1.3.1.3. Airsim-ROS
        4. 1.3.1.4. 调试与运行
        5. 1.3.1.5. LaneNet-ENet(stesha2016实现)
      2. 1.3.2. 视觉SLAM
        1. 1.3.2.1. 编译安装OpenCV4Tegra
      3. 1.3.3. DJI无人机
        1. 1.3.3.1. DJI-SDK的编译安装
  2. 2. Nvidia Jetson Nano
    1. 2.1. 关于Nvidia Jetson Nano Development Kit
      1. 2.1.1. Nano 平台简介
      2. 2.1.2. Nano 相关资源
    2. 2.2. 搭建工作环境
      1. 2.2.1. 刷机
      2. 2.2.2. 刷机完成的起手式
        1. 2.2.2.1. PATH
        2. 2.2.2.2. JetCard
        3. 2.2.2.3. Jetcam
    3. 2.3. YOLO开发笔记
      1. 2.3.1. YOLO
      2. 2.3.2. Deploy YOLO & Run Official Demo
  3. 3. Huawei HiKey 970
    1. 3.1. HiKey 970 平台简介
    2. 3.2. 开发平台构建
      1. 3.2.1. 起手式
        1. 3.2.1.1. 中文字体
        2. 3.2.1.2. exFat U盘读取
        3. 3.2.1.3. dlib
  4. 4. Raspberry Pi
    1. 4.1. 魔镜INOM
      1. 4.1.1. 魔镜·INOM开发资源
        1. 4.1.1.1. 项目参考源Repo
        2. 4.1.1.2. DDDD魔改版本
      2. 4.1.2. 部分必要依赖的安装说明
        1. 4.1.2.1. (Option) 树莓派系统清理
        2. 4.1.2.2. 淘宝定制版cnpm的安装
        3. 4.1.2.3. OpenCV 3.3.0的编译安装
      3. 4.1.3. 常见问题自助
        1. 4.1.3.1. 树莓派2的镜像在树莓派3中启动卡彩虹屏的问题
        2. 4.1.3.2. 树莓派连接HDMI显示器开机黑屏的解决方案
        3. 4.1.3.3. 树莓派无法安装MySQL_Python库的解决方案
        4. 4.1.3.4. SQLAlchemy不使用UTF-8编码的解决方案
        5. 4.1.3.5. 树莓派#@|等键位错乱的问题
        6. 4.1.3.6. 使用pip安装lxml失败的解决方案
        7. 4.1.3.7. MMM-Facial-Recognition使用中的问题
        8. 4.1.3.8. PowerShell禁止执行脚本的解决方案
        9. 4.1.3.9. 树莓派重启之后原有声音设置失效的解决方案
        10. 4.1.3.10. 树莓派时间自同步的实现
        11. 4.1.3.11. 在Windows系统下访问树莓派分区的方法
        12. 4.1.3.12. 树莓派打不开摄像头的问题
      4. 4.1.4. 为树莓派系统备份img镜像的方法
      5. 4.1.5. 琐碎且毫无用处的知识
  5. 5. Altera FPGA
    1. 5.1. Quartus Internal Error Code 82 Occured的解决
      1. 5.1.1. Intel给出的解决方案
      2. 5.1.2. 实际操作中遇到的问题
  6. 6. Xilinx FPGA
    1. 6.1. What is PYNQ?
    2. 6.2. PYNQ 相关资源
    3. 6.3. 连接并进入PYNQ-Z2
      1. 6.3.1. 使用网线连接并进入PYNQ-Z2
      2. 6.3.2. 使用COM口连接并进入PYNQ-Z2
      3. 6.3.3. 将PYNQ-Z2接入无线网并连接
      4. 6.3.4. 使用VNC连接并进入PYNQ-Z2
    4. 6.4. 配置Jupyter
    5. 6.5. BaseOverlay的接口
      1. 6.5.1. LED和彩色LED
      2. 6.5.2. 拨挡开关和按键