VOXL camera configuration
-
@Chad-Sweet
If it’s possible to configure the Seeker with Hires + TOF + Stereo, where one stereo camera is acting as a tracking camera, can I send my Seeker back to ModalAi for this setup?
Would the Seeker still have the VIO and VOA capabilities with this kind of setup? -
@Chad-Sweet
My UVC camera is recognized on the VOXL but the voxl-uvc-server will not connect to it.voxl:~$ show-video-device-info.sh /dev/video2: e-CAM83_USB 2560:c184 /dev/video3: e-CAM83_USB 2560:c184
Here is the
ls -la /dev/video*
command output from my Linux PC.crw-rw----+ 1 root video 81, 0 3月 31 09:20 /dev/video0 crw-rw----+ 1 root video 81, 1 3月 31 09:20 /dev/video1 crw-rw----+ 1 root video 81, 2 3月 31 09:20 /dev/video2 crw-rw----+ 1 root video 81, 3 3月 31 09:20 /dev/video3
-
This post is deleted! -
voxl-uvc-server only supports a few data types. You may need to modify the code to support the format of the e-CAM83
If you have a gstreamer command that works on your linux box, it should work on VOXL as well though.
-
@Chad-Sweet
Thank you so much for looking into this for me.Can I ask for some assistance with modifying the voxl-uvc-server?
Do I modify the voxl-uvc-server C file, then make it into an ipk and push it into the VOXL?
-
The instructions are in the readme here: https://gitlab.com/voxl-public/voxl-sdk/services/voxl-uvc-server
-
@Chad-Sweet But yes, you modify the code, build it, and push the IPK to VOXL
-
@Chad-Sweet
Is the Hires + TOF + Stereo (one stereo configured as the tracking camera) configuration possible?
In case the e-CAM83 will not work with the Seeker. -
@Chad-Sweet
Just to confirm,
If I modify the voxl-uvc-server/src/main.c file, to allow H264 format, would this work?
Or does the modification need to happen somewhere else in the main.c?
I’m just not exactly sure what or where I need to modify the voxl-uvc-server to make my UVC camera work. -
@Kris H264 is not supported in voxl-uvc-server. See https://gitlab.com/voxl-public/voxl-sdk/services/voxl-uvc-server/-/blob/dev/src/main.c#L64. You may be able to add support for it but there are some tricky aspects to H264 streaming that you would need to be aware of before attempting it. Seems like you should start with the video3 interface since it supports 640x480 YUYV
-
@Eric-Katzfey
Ok, thank you.
I will start with attempting /dev/video3 first. -
@Eric-Katzfey
It seems as if VOXL1 is not able to connect with my UVC camera.
Output when UVC camera is connected to the Seeker;voxl:~$ gst-device-monitor-1.0 Video/Source Probing devices... (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed No devices found! voxl:~$ gst-device-monitor-1.0 Probing devices... (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed Device found: name : msm_fd class : Video/Sink caps : video/x-raw, format=(string)GRAY8, width=(int)[ 320, 854 ], height=(int)[ 240, 480 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string){ bt601, smpte240m, bt709, 2:4:5:2, 2:4:5:3, 1:4:7:1, 2:4:7:1, 2:4:12:8, 2:6:5:7, 2:0:0:0 }; properties: device.path = /dev/video1 udev-probed = false device.api = v4l2 v4l2.device.driver = msm_fd v4l2.device.card = msm_fd v4l2.device.bus_info = "" v4l2.device.version = 201287 (0x00031247) v4l2.device.capabilities = 69206018 (0x04200002) v4l2.device.device_caps = 2097152 (0x00200000)
Output when my UVC camera is connected to my Linux PC;
seeker3@seeker3-VirtualBox:~$ gst-device-monitor-1.0 Video/Source Probing devices... Device found: name : e-CAM83_USB class : Video/Source caps : video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video0 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video0 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src ! ... Device found: name : e-CAM83_USB class : Video/Source caps : video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1; image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video2 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video2 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src device=/dev/video2 ! ... seeker3@seeker3-VirtualBox:~$ gst-device-monitor-1.0 Probing devices... Device found: name : Monitor of Built-in Audio Analog Stereo class : Audio/Source caps : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; properties: device.description = "Monitor\ of\ Built-in\ Audio\ Analog\ Stereo" device.class = monitor alsa.card = 0 alsa.card_name = "Intel\ 82801AA-ICH" alsa.long_card_name = "Intel\ 82801AA-ICH\ with\ AD1980\ at\ irq\ 21" alsa.driver_name = snd_intel8x0 device.bus_path = pci-0000:00:05.0 sysfs.path = /devices/pci0000:00/0000:00:05.0/sound/card0 device.bus = pci device.vendor.id = 8086 device.vendor.name = "Intel\ Corporation" device.product.id = 2415 device.product.name = "82801AA\ AC\'97\ Audio\ Controller" device.form_factor = internal device.string = 0 module-udev-detect.discovered = 1 device.icon_name = audio-card-pci gst-launch-1.0 pulsesrc device=alsa_output.pci-0000_00_05.0.analog-stereo.monitor ! ... Device found: name : Built-in Audio Analog Stereo class : Audio/Source caps : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; properties: alsa.resolution_bits = 16 device.api = alsa device.class = sound alsa.class = generic alsa.subclass = generic-mix alsa.name = "Intel\ 82801AA-ICH" alsa.id = "Intel\ ICH" alsa.subdevice = 0 alsa.subdevice_name = "subdevice\ \#0" alsa.device = 0 alsa.card = 0 alsa.card_name = "Intel\ 82801AA-ICH" alsa.long_card_name = "Intel\ 82801AA-ICH\ with\ AD1980\ at\ irq\ 21" alsa.driver_name = snd_intel8x0 device.bus_path = pci-0000:00:05.0 sysfs.path = /devices/pci0000:00/0000:00:05.0/sound/card0 device.bus = pci device.vendor.id = 8086 device.vendor.name = "Intel\ Corporation" device.product.id = 2415 device.product.name = "82801AA\ AC\'97\ Audio\ Controller" device.form_factor = internal device.string = front:0 device.buffering.buffer_size = 17632 device.buffering.fragment_size = 4408 device.access_mode = mmap device.profile.name = analog-stereo device.profile.description = "Analog\ Stereo" device.description = "Built-in\ Audio\ Analog\ Stereo" alsa.mixer_name = "Analog\ Devices\ AD1980" alsa.components = AC97a:41445370 module-udev-detect.discovered = 1 device.icon_name = audio-card-pci gst-launch-1.0 pulsesrc device=alsa_input.pci-0000_00_05.0.analog-stereo ! ... Device found: name : Built-in Audio Analog Stereo class : Audio/Sink caps : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; properties: alsa.resolution_bits = 16 device.api = alsa device.class = sound alsa.class = generic alsa.subclass = generic-mix alsa.name = "Intel\ 82801AA-ICH" alsa.id = "Intel\ ICH" alsa.subdevice = 0 alsa.subdevice_name = "subdevice\ \#0" alsa.device = 0 alsa.card = 0 alsa.card_name = "Intel\ 82801AA-ICH" alsa.long_card_name = "Intel\ 82801AA-ICH\ with\ AD1980\ at\ irq\ 21" alsa.driver_name = snd_intel8x0 device.bus_path = pci-0000:00:05.0 sysfs.path = /devices/pci0000:00/0000:00:05.0/sound/card0 device.bus = pci device.vendor.id = 8086 device.vendor.name = "Intel\ Corporation" device.product.id = 2415 device.product.name = "82801AA\ AC\'97\ Audio\ Controller" device.form_factor = internal device.string = front:0 device.buffering.buffer_size = 19188 device.buffering.fragment_size = 6396 device.access_mode = mmap device.profile.name = analog-stereo device.profile.description = "Analog\ Stereo" device.description = "Built-in\ Audio\ Analog\ Stereo" alsa.mixer_name = "Analog\ Devices\ AD1980" alsa.components = AC97a:41445370 module-udev-detect.discovered = 1 device.icon_name = audio-card-pci gst-launch-1.0 ... ! pulsesink device=alsa_output.pci-0000_00_05.0.analog-stereo Device found: name : e-CAM83_USB class : Video/Source caps : video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video0 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video0 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src ! ... Device found: name : e-CAM83_USB class : Video/Source caps : video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1; image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video2 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video2 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src device=/dev/video2 ! ...
A simple video test will not work either.
voxl:~$ gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock ^Chandling interrupt. Interrupt: Stopping pipeline ... Execution ended after 0:00:17.998587815 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
Are there any plugins that I could be missing?
-
Keeps failing to find a usable video sink.
voxl:~$ show-video-device-info.sh /dev/video2: e-CAM83_USB 2560:c184 /dev/video3: e-CAM83_USB 2560:c184 voxl:~$ gst-launch-1.0 v4l2src device=/dev/video3 ! videoconvert ! autovideosink Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not open device '/dev/video3' for reading and writing. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/sys/v4l2/v4l2_calls.c(625): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: system error: Device or resource busy Setting pipeline to NULL ... Freeing pipeline ... voxl:~$ gst-launch-1.0 v4l2src device=/dev/video2 ! videoconvert ! autovideosink Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not open device '/dev/video2' for reading and writing. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/sys/v4l2/v4l2_calls.c(625): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: system error: Device or resource busy Setting pipeline to NULL ... Freeing pipeline ... voxl:~$
Output when debug command is used.
voxl:~$ GST_DEBUG=3 gst-launch-1.0 v4l2src device=/dev/video3 ! videoconvert ! autovideosink Setting pipeline to PAUSED ... 0:00:00.229741613 4689 0xdf500 WARN autodetect gstautodetect.c:347:gst_auto_detect_find_best:<autovideosink0> warning: Failed to find a usable video sink 0:00:00.277135238 4689 0xdf500 WARN v4l2 v4l2_calls.c:625:gst_v4l2_open:<v4l2src0> error: Could not open device '/dev/video3' for reading and writing. 0:00:00.277213207 4689 0xdf500 WARN v4l2 v4l2_calls.c:625:gst_v4l2_open:<v4l2src0> error: system error: Device or resource busy ERROR: Pipeline doesn't want to pause. WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not open device '/dev/video3' for reading and writing. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/sys/v4l2/v4l2_calls.c(625): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: system error: Device or resource busy Setting pipeline to NULL ... Freeing pipeline ...
-
@Kris You can't use autovideosink on VOXL because it doesn't have a display
-
@Kris Maybe try fakesink instead?
-
@Eric-Katzfey
I have tried both fakesink and playbin.
Neither of them work either.
Has anyone gotten gstreamer to successfully work on VOXL1? -
@Eric-Katzfey
I also have another UVC camera, but it only outputs MJPG (compressed) and YUY2 (uncompressed 640x480 30fps) formats.It works for streaming, but I am trying to record the video to the Seeker’s SD card.
Is there a way to do this with Gstreamer or a similar program? -
@tom
Could this be the reason why no devices are found when I usegst-device-monitor-1.0 Video/Source
on the VOXL1? -
I see that the VOXL1 has the
gst-plugins-good
.
Is it possible to also add thegst-plugins-bad
andgst-plugins-ugly
? -
@Kris We use GStreamer in our voxl-streamer application. It does work on VOXL1.