All Projects → ms-iot → ros_msft_camera

ms-iot / ros_msft_camera

Licence: MIT license
This ROS node uses Windows Media Foundation's frame server to efficiently process camera frames.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Labels

Projects that are alternatives of or similar to ros msft camera

mros2
agent-less and lightweight communication library compatible with rclcpp for embedded devices
Stars: ✭ 72 (+323.53%)
Mutual labels:  ros2
rmw ecal
ROS2 middleware based on eCAL
Stars: ✭ 30 (+76.47%)
Mutual labels:  ros2
DDS-Router
The DDS Router is an application developed by eProsima that allows, using Fast DDS, to communicate by DDS protocol different networks.
Stars: ✭ 34 (+100%)
Mutual labels:  ros2
trac ik
ROS 2 port of `trac_ik`, an alternative Inverse Kinematics solver to the popular inverse Jacobian methods in KDL.
Stars: ✭ 14 (-17.65%)
Mutual labels:  ros2
isaac ros visual odometry
Visual odometry package based on hardware-accelerated NVIDIA Elbrus library with world class quality and performance.
Stars: ✭ 101 (+494.12%)
Mutual labels:  ros2
awesome-webots
Awesome Webots
Stars: ✭ 46 (+170.59%)
Mutual labels:  ros2
linorobot2
Autonomous mobile robots (2WD, 4WD, Mecanum Drive)
Stars: ✭ 97 (+470.59%)
Mutual labels:  ros2
dockerfiles
Dockerfiles I use for development
Stars: ✭ 64 (+276.47%)
Mutual labels:  ros2
astuff sensor msgs
A set of messages specific to each sensor supported by AutonomouStuff.
Stars: ✭ 37 (+117.65%)
Mutual labels:  ros2
dynamixel control
ros2_control packages for ROBOTIS Dynamixel
Stars: ✭ 69 (+305.88%)
Mutual labels:  ros2
rclshark
Tool for ROS 2 IP Discovery + System Monitoring
Stars: ✭ 32 (+88.24%)
Mutual labels:  ros2
ros2-ORB SLAM2
ROS2 node wrapping the ORB_SLAM2 library
Stars: ✭ 41 (+141.18%)
Mutual labels:  ros2
Awesome Robotic Tooling
Tooling for professional robotic development in C++ and Python with a touch of ROS, autonomous driving and aerospace.
Stars: ✭ 1,876 (+10935.29%)
Mutual labels:  ros2
raspimouse2
ROS 2 node for Raspberry Pi Mouse
Stars: ✭ 23 (+35.29%)
Mutual labels:  ros2
iknet
Inverse kinematics estimation of ROBOTIS Open Manipulator X with neural networks
Stars: ✭ 27 (+58.82%)
Mutual labels:  ros2
zhe
Lighter-than-air, peer-to-peer, bounded, non-blocking, non-threaded, etc., publish-subscribe networking
Stars: ✭ 44 (+158.82%)
Mutual labels:  ros2
raspimouse ros2 examples
ROS 2 examples for Raspberry Pi Mouse
Stars: ✭ 29 (+70.59%)
Mutual labels:  ros2
isaac ros dnn inference
Hardware-accelerated DNN model inference ROS2 packages using NVIDIA Triton/TensorRT for both Jetson and x86_64 with CUDA-capable GPU
Stars: ✭ 67 (+294.12%)
Mutual labels:  ros2
vscode ros2 workspace
A template for using VSCode as an IDE for ROS2 development.
Stars: ✭ 527 (+3000%)
Mutual labels:  ros2
li slam ros2
ROS2 package of tightly-coupled lidar inertial ndt/gicp slam
Stars: ✭ 160 (+841.18%)
Mutual labels:  ros2

ros_msft_camera - Windows MF Camera node for ROS

Introduction

This ROS node uses Windows Media Foundation API to efficiently capture and process video frames from a camera device or an rtsp url. This node uses MF SourceReader API to read frames from camera device or an RTSP url. The node chooses first available video stream from the camera. Most USB cameras have only one video stream. The node publishes image frames using image_transport camera publisher on a image_raw topic

This source also contains a feature to stream out the captured video over RTSP/RTP using H.264 video compression for remote teleoperation and telepresence applications. The streaming feature supports the following:

  • H.264 over RTP (session negotiation via RTSP)
  • RTSP digest and basic authentication
  • RTSP over secure(TLS) connection (RTSPS)
    The RTSP/RTP streaming related libraries are a part of a sub-module from the Windows-Camera repository For more details on streaming visit this page

System Requirement

Getting Started

To run this node, a camera will be required to be installed and ready to use on your system.

Simple camera node

You can begin with the below launch file. It will bring up RViz tool where you can see the image stream from your camera.

roslaunch ros_msft_camera ros_msft_camera.launch

Camera node with RTSP/RTP streaming

To enable RTSP streaming you will need to create a recursive clone of this repository using the following command:

git clone https://github.com/ms-iot/ros_msft_camera --recursive

Then at the top level folder (i.e. parallel to the src folder) use the command

catkin_make -DENABLE_RTSP=1

This will build the node with RTP/RTSP streaming capability. To launch the node with streaming enabled, use the following command:

roslaunch ros_msft_camera ros_msft_camera_rtsp.launch

After the node has been successfully launched with RTSP enabled, you can view the video on any streaming video player that supports RTSP using the url:

rtsp://<ip-address-of-machine-running-the-node>:<rtsp_port>

If using secure RTSP over TLS, use a video player that supports RTSPS with following url:

rtsps://<ip-address-of-machine-running-the-node>:<rtsp_port>

Published Topics

  • /image_raw (/msft_camera_node/image_raw)

    The image stream from the camera

Parameters

Generic parameters

  • ~image_width (integer, default: 640)

    Desired capture image width.

  • ~image_height (integer, default: 480)

    Desired capture image height.

  • ~frame_rate (float, default: 30.0)

    Desired capture frame rate.

  • ~videoDeviceId (string, default: ``)

    Symbolic link to the camera to open. if not set default is the first enumerated camera on the system. Set the Symbolic link to value "Interactive" to configure the node to list the available cameras on system and prompt for user selection at startup

  • ~videoUrl (string, default: ``)

    Video URL to be used (instead of an actual camera device) as a source of video frames to be published by the node. At present, file paths and rtsp urls are supported as video source. if both parameters, videoDeviceId and videoUrl, are set then videoDeviceId is used by the node.

  • ~camera_info_url (string, default: ``)

    Url to the yaml file with camera distrortion parameters.

For generic parameter usage example see camnode.launch

RTSP Streaming Parameters

Only available if the source is built as per the instructions for streaming

  • ~rtsp_port (integer, default: 8554)

    The network port on which the RTSP server should listen for incoming connections.
    If this parameter is not present in the parameter server, then RTSP server is not started.
    If this parameter is present and empty, the RTSP server is started with the default port number 8554

  • ~rtp_bitrate (integer, default: 1000*image_width)

    The bitrate in bps to configure the video encoder used for RTP streaming.

  • ~rtsp_AddCredentials (Dictionary(string: string), default: ``)

    A dictionary containing username and password credentials to be added to the password vault to be used for RTSP digest authentication.

  • ~rtsp_RemoveCredentials (List(string), default: ``)

    A list containing old usernames to be removed from password vault to be used for RTSP digest authentication.

  • ~rtsps_cert_subject (string, default: ``)

    The certificate subject name to search in the "Local Machine\My" certificate store for RTSPS secure streaming over TLS.
    Note: To use RTSPS (secure RTSP over TLS), a valid server certificate must be imported to the "Local machine\My" certificate store.
    If this parameter is not present, the stream is not secure and RTSP and RTP communication will happen in the clear.
    If this parameter is present and valid, RTSP communication will only happen securely over TLS. The remote client/player then has the ability to negotiate RTP via the secure TCP channel over RTSP protocol.

For RTSP parameter usage example see camnodeRTSP.launch

Remarks

This source also contains a publisher and camera nodelet to enable sharing IMFSample pointers directly into another nodelet with the same process to enable zero copy and also share GPU surfaces This is enabled by using the MFSample Publisher which published IMFSample pointer via a custom msg. This path is still experimental and untested.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].