Skip to content

Software dependencies and configurations

Sibo Wang-Chen edited this page Mar 24, 2025 · 15 revisions

eGrabber (for Euresys frame grabber)

Download both eGrabber and Memento (a debugging tool) from https://www.euresys.com/en/download-area/. This should include something like:

# eGrabber
egrabber-linux-offline-documentation-en-24.12.2.2194.tar.gz
egrabber-linux-sample-programs-24.12.2.16.tar.gz
egrabber-linux-x86_64-24.12.3.24.tar.gz
egrabber-release-notes-24.12.3.2195.pdf

# Memento
memento-linux-offline-documentation-en-24.12.0.6056.tar.gz
memento-linux-x86_64-24.12.0.3.tar.gz
memento-release-notes-24.12.0.6056.pdf

Version used for development: 24.12 (for both).

Important

You must use Memento first before eGrabber!

Use the provided installer:

cd memento-linux-x86_64-24.12.0.3/
sudo ./install.sh

It's possible that you are missing some dependencies. Just read the output carefully and follow any instruction.

Then, to install eGrabber, follow instruction in egrabber-linux-x86_64-24.12.3.24/INSTALL, namely:

cd egrabber-linux-x86_64-24.12.3.24/
sudo ./install.sh

Important

Upon installation, don't be so fast closing the terminal! Read the output carefully and follow on-screen instruction to complete the process. In brief:

. /opt/euresys/egrabber/shell/setup_gentl_paths.sh
. /opt/euresys/egrabber/shell/select-coaxlink-producer.sh

Add the following to ~/.bashrc:

export EURESYS_COAXLINK_GENTL64_CTI=/opt/euresys/egrabber/lib/x86_64/coaxlink.cti

Then, start a new shell and run:

/opt/euresys/egrabber/shell/select-default-producer.sh coaxlink

Finally, restart the computer.

Then, move on to eGrabber and JAI camera configuration to finish configuring the frame grabber and the camera.

Troubleshooting

In case of problems, the following log files are worth looking into:

  • /opt/euresys/egrabber/install.log.
  • sudo /opt/euresys/egrabber/shell/check-install.sh output.
  • sudo dmesg output.
  • sudo lspci -vvv output.
  • A highest verbosity Memento dump captured while you start eGrabber Studio (start Memento, then launch eGrabber).

Tip

Given the issue might be hardware-related, it might help to really power cycle the computer instead of restarting (ie. sudo reboot now). Specifically, turn the computer off, cut power supply, press On button to discharge capacitors, wait a bit to be extra sure, then turn power supply back on and start the computer).

Note

I encountered a problem where upon booting the OS, the four LEDs on the frame grabber bracket stay solid orange. Based on the frame grabber manual, this indicates that the frame grabber never exited the "system booting" mode. With the assistance from Euresys support, we narrowed the problem down to the following error messages from Memento:

[    2.902599] memento: no symbol version for module_layout
[    2.902645] memento: disagrees about version of symbol devmap_managed_key
[    2.902646] memento: Unknown symbol devmap_managed_key (err -22)

... and the solutions was to uninstall eGrabber, uninstall Memento, reboot the machine (following the procedure above), install Memento (latest version, ie. 24.12), and install eGrabber (latest version, ie. 24.12) in this order.

If nothing works, contact Euresys support. They (specifically Mr. Julien Weber) were very helpful.

OpenCV

Follow official instruction. For the C++ library on Linux without building from source:

sudo apt install libopencv-dev

Version used: 4.6.0. To check actual version:

pkg-config --modversion opencv4
4.6.0

Boilerplate code and CMakeLists.txt to get started:

cd opt/examples/opencv_cpp_boilerplate
mkdir build
cd build
cmake ..
make
./main <path-to-some-image>  # the image should display

Zaber (motion control)

Zaber Launcher (GUI application)

Download the .AppImage file from https://www.zaber.com/software; then run it directly:

chmod ago+x ZaberLauncher.AppImage
./ZaberLauncher.AppImage

If the following error is encountered:

AppImages require FUSE to run. 
You might still be able to extract the contents of this AppImage 
if you run it with the --appimage-extract option. 
See https://github.com/AppImage/AppImageKit/wiki/FUSE 
for more information

... then, go to the FUSE github repo as directed and install FUSE following the instructions there. In brief, these are:

sudo add-apt-repository universe
sudo apt install libfuse2  # for Ubuntu 22.04
sudo apt install libfuse2t64  # for Ubuntu 24.04

Then run ZaberLauncher.AppImage again.

If the following error is encountered:

[13052:0208/184049.386863:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /tmp/.mount_ZaberLlZtImo/chrome-sandbox is owned by root and has mode 4755.

... then, rerun with the --no-sandbox flag:

./ZaberLauncher.AppImage --no-sandbox

Then, follow on-screen instruction to create a connection (if not already done).

If the following error is encountered:

Cannot Open Connection
Cannot open serial port: Permission denied. You may need to add user to the "dialout" group to access serial ports.
You can still create the connection and resolve the issue later.

... then simply run:

sudo chmod ago+rw /dev/ttyACM0  # or replace with appropriate USB device

ALTERNATIVELY, add the current user to the dialout group as instructed:

sudo usermod -a -G dialout $USER

Then, restart before relaunching Zaber Launcher and retrying.

Zaber Motion library

Go to https://www.zaber.com/software and follow instructions under "Getting Started." For C++:

sudo dpkg -i ZaberMotionCppInstaller-7.4.0-Linux_x64.deb

Boilerplate code and CMakeLists.txt to get started:

cd examples/zaber_cpp_boilerplate/
mkdir build
cd build
cmake ..
make
./zaber

Arduino IDE

Download the .zip file (for Linux X86-64) from https://www.arduino.cc/en/software. Then, copy it to opt/ and decompress it:

mkdir arduino-ide_2.3.4_Linux_64bit  # change version accordingly
cd arduino-ide_2.3.4_Linux_64bit/
unzip ../arduino-ide_2.3.4_Linux_64bit.zip

Then, run arduino-ide:

./arduino-ide

If the following error is encountered:

[8729:0211/131431.499624:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /home/spotlight/project/spotlight-control/opt/arduino-ide_2.3.4_Linux_64bit/chrome-sandbox is owned by root and has mode 4755.
Trace/breakpoint trap (core dumped)

... then, follow the instruction to change the mode and owner of the chrome-sandbox file:

sudo chown root:root /home/spotlight/project/spotlight-control/opt/arduino-ide_2.3.4_Linux_64bit/chrome-sandbox
sudo chmod 4755 /home/spotlight/project/spotlight-control/opt/arduino-ide_2.3.4_Linux_64bit/chrome-sandbox

# To verify:
ls -lh /home/spotlight/project/spotlight-control/opt/arduino-ide_2.3.4_Linux_64bit/chrome-sandbox
# The output should be something like:
# -rwsr-xr-x 1 root root 53K Dez  3 10:51 /home/spotlight/project/spotlight-control/opt/arduino-ide_2.3.4_Linux_64bit/chrome-sandbox

Note

You can alternatively download the Arduino IDE as an .AppImage file. However, I had problem changing the mode and owner of the chrome-sandbox file because when the .AppImage file is executed, it decompresses the chrome-sandbox file into /tmp on the fly, and it's not possible to change its permission/owner. If you do want to use the .AppImage file, you can run it with the --no-sandbox flag.

Troubleshooting

If the following error is encountered while uploading the program to the board:

dfu-util: Cannot open DFU device 2341:0070 found on devnum 21 (LIBUSB_ERROR_ACCESS)
dfu-util: No DFU capable USB device available
Failed uploading: uploading error: exit status 74

... then, check if df-util is installed. If not,

sudo apt install dfu-util
# If prompted by the output, you might need to run the following first:
# sudo apt --fix-broken install

... then, create a file /etc/udev/rules.d/50-arduino.rules with the following line:

SUBSYSTEM=="usb", ATTR{idVendor}=="2341", MODE="0666"

(This allows all users to access Arduino devices with Vendor ID 2341.)

Then, reload these rules:

sudo udevadm control --reload-rules
sudo udevadm trigger

You should see the board detected when you run:

dfu-util -l

Then, unplug and replug the board and try again.

Qt (GUI framework)

Important

The Qt framework is available under both open source and commercial licenses. To use the open source license, our project must be licensed under GPL or LGPL. We will use GPL v3.

Note

You will need a Qt account, which you can sign up for free.

Download Qt online installer (with open source license) from https://www.qt.io/download-open-source. Give every user execute permission to the downloaded .run file, and run it:

chmod ago+x qt-online-installer-linux-x64-4.8.1.run
./qt-online-installer-linux-x64-4.8.1.run

Then, follow on-screen instructions. You might need to install some dependencies. For example:

sudo apt install libxcb-cursor0 libxcb-cursor-dev

You might need to save the Qt installation path as an environment variable so that cmake can find it. I added the following to ~/.bashrc:

# Qt6
export Qt6_DIR="${HOME}/Qt/6.8.2/gcc_64/lib/cmake/Qt6"

Alternatively, adding set(Qt6_DIR "${HOME}/Qt/6.8.2/gcc_64/lib/cmake/Qt6") before find_package in the CMakeLists.txt file probably also works.

I also installed Qt Studio, a UI development tool.

Boost/Asio (serial communication) [Not used after all]

Download Boost from https://www.boost.org/ and extract it:

tar xf boost_1_87_0.tar.gz  # change version accordingly
cd boost_1_87_0/

The installation instruction is a bit hard to find. You have to locate the "Getting Started Guide" on the documentation (online and also included as index.html in boost_1_87_0), and click the link under "Next" at the bottom right corner. For 1.87.0, this leads me to this page. Follow the instruction under "5.1 Easy Build and Install", namely:

./bootstrap.sh
sudo ./b2 install

GoogleTest (C++ unit testing)

Download from https://github.com/google/googletest and extract downloaded file:

tar xf googletest-1.16.0.tar.gz  # change version accordingly
cd googletest-1.16.0/
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

Use a basic "hello world" test as an example and template:

cd recorder/tests/
mkdir build
cd build
cmake ..
make
./helloWorldTest

spdlog (C++ logging library)

Install using Debian package manager:

sudo apt install libspdlog-dev

See hello-world example at opt/examples/spdlog_boilerplate/:

cd opt/examples/spdlog_boilerplate/
mkdir build
cd build
cmake ..
make
./example

Note

The version from the Debian package manager is an older version that does not implement Mapped Diagnostic Context (MDC). Since I don't really need it, I used the apt-managed version for simplicity and removed the MDC-related stuff from example.cpp provided in spdlog's Github repo.

yaml-cpp

Download yaml-cpp from https://github.com/jbeder/yaml-cpp (v0.8.0 for me). Then do the usual

unzip yaml-cpp-0.8.0
cd yaml-cpp-0.8.0
mkdir build
cd build
cmake ..
make -j8
sudo make install

PCO camera software

Go to the "Software" tab on the product page for the pco.panda 4.2 sCMOS camera on the Excelitas website. This gives you two sub-tabs: "pco.panda 4.2 USB Firmware" and "PCO Camera Software". The former is used in case you want to update the firmware of the camera. It only works on Windows. To just use the camera, go to the latter.

Once on the "PCO Camera Software" page, go to "PCO Software Development Kits" ("PCO Camera Control Software might also be useful; it looks like a GUI program but it only runs on Windows so I didn't try.) Under the "General SDK" tab, download pco.sdk, pco.recorder, and pco.runtime. Under the "C++" tab, download pco.cpp. Take care to download the file for the right computer architecture—in this case AMD (x86_64).

Then, unzip each of the 4 downloaded files. This should give you 4 .deb files. Install each of them with dpkg:

sudo dpkg -i pco.sdk_1.33.0_amd64.deb
sudo dpkg -i pco.runtime_3.5.0_amd64.deb 
sudo dpkg -i pco.recorder_3.5.0_amd64.deb 
sudo dpkg -i pco.cpp_1.4.0_amd64.deb

Note

I don't know if all four are actually required or if the order of installation matters, but this is what made sense to me and what I did.

This should install a bunch of files under /opt/pco/{pco.cpp,pco.recorder,pco.runtime,pco.sdk}. Among these, there are some useful sample programs under /opt/pco/pco.cpp/samples. In particular, ImageViewer is a nice GUI program.

Python

sudo apt install python3.12-venv  # change version if needed
python -m venv spotlight-control/python_env

Then,

source spotlight-control/python_env/bin/activate

Avoid Conda because in my experience it made spdlog and googletest incompatible somehow.

Clone this wiki locally