This is a fork of the ROS GSCam package that is used for broadcasting any GStreamer-based video stream via the standard ROS Camera API. This fork has been modified to allow for building a Docker image that can serve as a camera driver for the CARMA Platform.
This driver supports the following versions of GStreamer:
Assuming the CARMA Platform is installed at ~/carma_ws/src
,
cd ~/carma_ws/src
git clone https://github.com/VT-ASIM-LAB/gstreamer_camera_driver.git
cd gstreamer_camera_driver/docker
sudo ./build-image.sh -d
After the Docker image is successfully built, add the following lines to the appropriate docker-compose.yml
file in the carma-config
directory.
gstreamer-camera-driver:
image: usdotfhwastoldev/carma-gstreamer-camera-driver:develop
container_name: gstreamer-camera-driver
network_mode: host
volumes_from:
- container:carma-config:ro
environment:
- ROS_IP=127.0.0.1
volumes:
- /opt/carma/logs:/opt/carma/logs
- /opt/carma/.ros:/home/carma/.ros
- /opt/carma/vehicle/calibration:/opt/carma/vehicle/calibration
command: bash -c '. ./devel/setup.bash && export ROS_NAMESPACE=$${CARMA_INTR_NS} && wait-for-it.sh localhost:11311 -- roslaunch /opt/carma/vehicle/config/drivers.launch drivers:=gstreamer_camera'
Finally, add the following lines to the drivers.launch
file in the same directory as docker-compose.yml
.
<include if="$(arg gstreamer_camera)" file="$(find gscam_driver)/launch/left_imx390.launch">
</include>
left_imx390.launch
is used as an example here and can be replaced with any other launch file in the gstreamer_camera_driver/launch
directory.
This can be run as both a node and a nodelet.
gscam
Publication frequencies are given for a Leopard Imaging LI-IMX390-GMSL2 camera operating at a resolution of 1920x1080 at 30 frames per second (fps).
camera/image_raw [sensor_msgs/Image]
: publishes the video stream obtained from the camera (30 Hz).camera/camera_info [sensor_msgs/CameraInfo]
: publishes the camera calibration file (30 Hz).camera/driver_discovery [cav_msgs/DriverStatus]
: publishes the CARMA DriverStatus message (1.25 Hz).
N/A
set_camera_info [sensor_msgs/SetCameraInfo]
: stores the given CameraInfo as the camera's calibration information.
camera_name
: the name of the camera (corrsponding to the camera info).camera_info_url
: a url (file://path/to/file
,package://pkg_name/path/to/file
) to the camera calibration file.gscam_config
: the GStreamer pipeline description.frame_id
: the TF2 frame ID.reopen_on_eof
: re-open the stream if it ends (EoF).sync_sink
: synchronizesappsink
(sometimes setting this tofalse
can resolve problems with sub-par frame rates).preroll
: preroll the stream if needed.use_gst_timestamp
: use GstClock instead of ROS Time.publish_timestamp
: publish the timestamp of image frames.
See the example launch files in the gstreamer_camera_driver/launch
directory. Each launch file launches a Leopard Imaging LI-IMX390-GMSL2 camera connected via a TCP/IP connection.
This is a ROS package originally developed by the Brown Robotics Lab for broadcasting any GStreamer-based video stream via the standard ROS Camera API. This fork has several fixes incorporated into it to make it broadcast correct sensor_msgs/Image
messages with proper frames and timestamps. It also allows for more ROS-like configuration and more control over the GStreamer interface.
Note that this pacakge can be built both in a rosbuild and catkin workspaces.
gscam supports the following versions of GStreamer
Install dependencies via rosdep
.
- gstreamer1.0-tools
- libgstreamer1.0-dev
- libgstreamer-plugins-base1.0-dev
- libgstreamer-plugins-good1.0-dev
sudo add-apt-repository ppa:gstreamer-developers/ppa
sudo apt-get install gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev
sudo apt-get install gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev
- Use the CMake flag
-DGSTREAMER_VERSION_1_x=On
when building - See the Video4Linux2 launchfile example for an example of the differences in the GStreamer config lines
- This has been tested with
v4l2src
This can be run as both a node and a nodelet.
gscam
camera/image_raw
camera/camera_info
camera/set_camera_info
~camera_name
: The name of the camera (corrsponding to the camera info)~camera_info_url
: A url (file://path/to/file
,package://pkg_name/path/to/file
) to the camera calibration file.~gscam_config
: The GStreamer configuration string.~frame_id
: The TF frame ID.~reopen_on_eof
: Re-open the stream if it ends (EOF).~sync_sink
: Synchronize the app sink (sometimes setting this tofalse
can resolve problems with sub-par framerates).
The gscam c++ library can be used, but it is not guaranteed to be stable.
See example launchfiles and configs in the examples directory. Currently there are examples for:
- Video4Linux2: Standard
video4linux-based cameras like
USB webcams.
- GST-1.0: Use the roslaunch argument
GST10:=True
for GStreamer 1.0 variant
- GST-1.0: Use the roslaunch argument
- Nodelet: Run a V4L-based camera in a nodelet
- Video File: Any videofile readable by GStreamer
- DeckLink:
BlackMagic
DeckLink SDI capture cards (note: this requires the
gst-plugins-bad
plugins)