@ShaneCCC @kayccc @Honey_Patouceul Could you help some more?
This command from the terminal works, displays 2 cameras on the screen, although it overlays the image one on the other.
gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=RGBA’ ! comp.sink_0 nvarguscamerasrc sensor-id=1 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=RGBA’ ! comp.sink_1 nvcompositor name=comp sink_0::alpha=0.5 sink_1::alpha=0.5 ! nvoverlaysink sync=false -e
But when I insert this command into the code, it does not work. Here is a code snippet.
#!/usr/bin/env python
import numpy as np
import rospy
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import gi
import sys
import argparse
import subprocess
sys.path.insert(1, ‘/usr/local/lib/python2.7/site-packages’)
import cv2
print(cv2.version)
gi.require_version(‘Gst’, ‘1.0’)
from gi.repository import GObject, Gst
g1_str = “nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=RGBA’ ! comp.sink_0”
g2_str = “nvarguscamerasrc sensor-id=1 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=RGBA’ ! comp.sink_1”
nv_str = “nvcompositor name=comp sink_0::alpha=0.5 sink_1::alpha=0.5 ! nvoverlaysink sync=false -e”
def open_cam_onboard(width, height):
gst_elements = str(subprocess.check_output(‘gst-inspect-1.0’))
gst_str = g1_str + " " + g2_str + " " + nv_str #+ " ! videoconvert ! appsink"
print("______")
print(gst_str)
print("______")
#gst_str = ('nvarguscamerasrc sensor-id=1 ! '
# 'video/x-raw(memory:NVMM), '
# 'width=(int)1920, height=(int)1080, '
# 'format=(string)NV12, framerate=(fraction)30/1 ! '
# 'nvvidconv flip-method=0 ! '
# 'video/x-raw, width=(int){}, height=(int){}, '
# 'format=(string)BGRx ! '
# 'videoconvert ! appsink').format(width, height)
return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)
def gCamera():
bridge = CvBridge()
cap = open_cam_onboard(1920, 1080)
if not cap.isOpened():
sys.exit('Failed to open camera!')
pub = rospy.Publisher('li_camera_raw', Image, queue_size=30)
rospy.init_node('camera_driver',anonymous=True)
while not rospy.is_shutdown():
t, img = cap.read() # grab the next image frame from camera
try:
pub.publish(bridge.cv2_to_imgmsg(img, "bgr8"))
except CvBridgeError as e:
print(e)
cap.release()
cv2.destroyAllWindows()
if name == ‘main’:
try:
gCamera()
except rospy.ROSInterruptException:
pass
Log:
jetson@jetson:~$ roslaunch camera_driver debug_camera.launch
… logging to /home/jetson/.ros/log/94b24eda-0411-11ec-948f-8f35fecbba5a/roslaunch-jetson-19450.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://jetson:42429/
SUMMARY
PARAMETERS
- /rosdistro: melodic
- /rosversion: 1.14.11
NODES
/
camera_driver (camera_driver/camera_driver.py)
ROS_MASTER_URI=http://10.211.1.101:11311/
process[camera_driver-1]: started with pid [19459]
4.1.1
nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=RGBA’ ! comp.sink_0 nvarguscamerasrc sensor-id=1 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=RGBA’ ! comp.sink_1 nvcompositor name=comp sink_0::alpha=0.5 sink_1::alpha=0.5 ! nvoverlaysink sync=false -e
nvbuf_utils: Could not get EGL display connection
(python:19459): GStreamer-CRITICAL **: 18:18:06.710: gst_element_make_from_uri: assertion ‘gst_uri_is_valid (uri)’ failed
(python:19459): GStreamer-CRITICAL **: 18:18:06.713: gst_element_make_from_uri: assertion ‘gst_uri_is_valid (uri)’ failed
(python:19459): GStreamer-CRITICAL **: 18:18:06.713: gst_element_make_from_uri: assertion ‘gst_uri_is_valid (uri)’ failed
(python:19459): GStreamer-CRITICAL *: 18:18:06.713: gst_element_make_from_uri: assertion ‘gst_uri_is_valid (uri)’ failed
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (711) open OpenCV | GStreamer warning: Error opening bin: syntax error
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
Failed to open camera!
[camera_driver-1] process has died [pid 19459, exit code 1, cmd /home/jetson/catkin_ws/src/camera_driver/scripts/camera_driver.py __name:=camera_driver __log:=/home/jetson/.ros/log/94b24eda-0411-11ec-948f-8f35fecbba5a/camera_driver-1.log].
log file: /home/jetson/.ros/log/94b24eda-0411-11ec-948f-8f35fecbba5a/camera_driver-1.log
all processes on machine have died, roslaunch will exit
shutting down processing monitor…
… shutting down processing monitor complete
done
I tried to enable appsync - it doesn’t help