I have a docker container containing ubuntu 20.04 and ROS Noetic and I'm trying to control a Ueye camera from IDS with it. For this, I downloaded the ueye_cam package for ROS: http://wiki.ros.org/ueye_cam and the image_pipeline package: http://wiki.ros.org/image_pipeline I also downloaded the package corresponding to my camera on the IDS website and followed the tutorial for the installation: https://www.thorlabs.com/software/THO/ThorCam/Linux/Readme_uEye_Linux_4.90.06.html
When I try to run $ roslaunch ueye_cam rgb8.launch
I get the following error message:
[ERROR] [1626351965.262425900]: No UEye cameras are connected
[ERROR] [1626351965.262560700]: Hint: make sure that the IDS camera daemon (/etc/init.d/ueyeusbdrc) is running
[ERROR] [1626351965.262743000]: Failed to initialize [camera]
I ran:
$ /usr/bin/ueyeusbd start
and got :
IDS ueyeusbd 4.94.1557 64bit build Apr 30 2021 08:04:32 ( cmdl cap scq )
and ran :
$ /etc/init.d/ueyeusbdrc start
and got the error:
Starting ueyeusbd... IDS ueyeusbd 4.94.1557 64bit build Apr 30 2021 08:04:32 ( cmdl cap scq )
ueyeusbd is not running.
I tried following this solution: How can I run a service inside a docker container to get feed from a IDS uEye camera using gstreamer? but it doesn't work because I don't have /var on my windows host.
I also tried:
systemctl start ueyeusbdrc
but I got this error:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Does anyone know if it is possible to control an ueye camera from IDS, connected to a windows host, through a docker containing ROS1?
If not, do you know if it is possible to control an ueye camera with a ROS2 package because I already have the corresponding ROS2 drivers?
The Solution that did work for me is the following
Add a few options to the docker command. Adding these arguments to the docker command solved the issue:
... --privileged -v /dev/bus/usb:/dev/bus/usb
--ipc=host
--pid=host
-v /var/run:/var/run
-v /usr:/usr
...
The other key part is to install the IDS software on the host machine. and make sure the system service for the IDS uEye camera is running in the host (sudo systemctl start ueyeusbdrc) and enable the docker feature via the IDS-manager software on the host
Part of the solution was inspired from this post How can I run a service inside a docker container to get feed from a IDS uEye camera using gstreamer?
Hope this will help Btw tested this solution only with ROS(1)