Balluff - BVS CA-MLC / BVS CA-IGC / mvBlueFOX Technical Documentation
|
When developing machine vision applications using Docker containers, it might be required to access the cameras inside the container. With the Impact Acquire driver stack this can be achieved fairly easily and this chapter will demonstrate how to build a basic Docker container where the cameras can be used.
USB devices physically connected to the host system are not automatically accessible in the WSL2 Linux distro. They need to be first attached from the Windows host to the default Linux distro via USB/IP. Please follow Connect USB devices WSL2 for implementation guidance.
udev is needed to identify attached USB devices and to access USB3 Vision™ devices as non-root users with the help of the udev-rules shipped by the Impact Acquire driver package. However, systemd, which starts udev automatically, is by default not supported in WSL2 distros. Besides, udev doesn't support containers. Since WSL2 distros themselves are technically containers, they are not supported by udev. In order for udev to work in WSL2 distros, the following lines need to be commented out in /etc/init.d/udev
before manually starting udev, as shown below:
#if [ ! -w /sys ]; then # log_warning_msg "udev does not support containers, not started" # exit 0 #fi
Then start udev in the WSL2 default Linux distro:
$ sudo /etc/init.d/udev start
The following demo Dockerfile builds a basic Docker image based on a slim version of Debian, where the Impact Acquire driver package for the cameras and its sample programs are installed. This Dockerfile can be used in many ways:
Before building the Dockerfile, please download the required Impact Acquire driver installation files from Balluff website (https://www.balluff.com/en-de/downloads/software) (user login is required):
Create a directory called Impact Acquire (as used in this demo Dockerfile) and move both installation files into this directory. In this example, both files are downloaded into the Downloads directory and the Impact Acquire directory is created inside the Downloads:
$ cd ~/Downloads
$ mkdir Impact_Acquire
$ mv install_mvBlueFOX.sh mvBlueFOX-x86_64_ABI2-*.tgz Impact_Acquire/
Make the installation script install_mvBlueFOX.sh executable:
$ cd Impact_Acquire
$ chmod a+x install_mvBlueFOX.sh
Navigate back into the directory where product_name resides (e.g. Downloads) and create your Dockerfile:
$ cd ~/Downloads
$ touch Dockerfile
Create the content of your Dockerfile. Our demo Dockerfile looks as follows:
# start with slim version of actual Debian FROM debian:9-slim ENV LC_ALL C ENV DEBIAN_FRONTEND noninteractive # entrypoint of Docker CMD ["/bin/bash"] # set environment variables ENV TERM linux ENV MVIMPACT_ACQUIRE_DIR /opt/Impact_Acquire ENV MVIMPACT_ACQUIRE_DATA_DIR /opt/Impact_Acquire/data ENV container docker # update packets and install minimal requirements # after installation it will clean apt packet cache RUN apt-get update && apt-get -y install build-essential && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # move the directory Impact_Acquire with *.tgz and *.sh files to the container COPY Impact_Acquire /var/lib/Impact_Acquire # execute the setup script in an unattended mode RUN cd /var/lib/Impact_Acquire && \ ./install_mvBlueFOX.sh -u && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
At last, build a Docker image using this Dockerfile:
$ sudo docker build -t [image_name] .
If built successfully, the newly built [image_name] will be listed when calling:
$ sudo docker images
Since the Docker container is isolated from the host system, it needs to be started with volume mount of /dev and certain cgroup permissions for it to access the cameras. In order to avoid running the container in privileged mode, which is not secure, it can be started like this:
$ sudo docker run -ti -v /dev:/dev --device-cgroup-rule 'a 189:* rwm' [image_name] /bin/bash
Where:
After starting the container, the correct operation of cameras can be validated by running one of the sample programs provided by the Impact Acquire (e.g. SingleCapture):
$ cd /opt/Impact_Acquire/apps/SingleCapture/x86_64
$ ./SingleCapture
If the attached camera appears in the device list of the program's output, access to it in the container by using the Impact Acquire has been established. Now the camera can be used inside the Docker container for your machine vision applications.