@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, Gstg1_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