I am trying to stream the images from my camera to a laptop via ROS. Here is my setup:

  • Raspberry Pi 3B+ with USB Webcam. It is running ROS Noetic with usb_camera_node
  • An Ubuntu 20.04.1 laptop with ROS Noetic. I am reviewing the live stream using rosrun rqt_image_view rqt_image_view

When I tried this, the stream is really laggy and slow. I am barely getting 10 fps. I was able to do camera calibration with it but mapping with it will be really challenging. I have also tried cv_camera and raspicam_node and I got a huge performance boost from raspicam_node but it still lags. Is there any way to speed it up. I also tried decreasing the video quality with no luck. Any help is truly appreciated.

  • 1
    Not really a Pi related question, I see someone else already tried to bump you here, which I think was a mistake. Have you looked at the ROS docs related to cv_camera_node wiki.ros.org/cv_camera there are parameters that allow setting the framerate (but default is higher then what you are getting) as well as setting the size of the image which may help improve your framerate.
    – Chad G
    Feb 12, 2021 at 16:17
  • Looks useful. How can you set parameters in ROS? Feb 12, 2021 at 16:28
  • That would also be documented on the ROS site Feb 13, 2021 at 2:32
  • Does this software officially support Raspberry Pi (and Pi 3 particularly), or are you experimenting? Are you sure it is supposed to run faster than 10 FPS? Jul 1, 2021 at 15:29

1 Answer 1


The ROS node usb_cam should be publishing a /usb_cam/image/compressed. What you can do is since the compressed video is much faster(roughly 20fps), you can convert the compressed image to a raw image on your much more powerful VM or laptop. Here is the ROS command you should run on your laptop: rosrun image_transport republish raw in:=/usb_cam/image_raw compressed out:=/converted/image_raw

PLEASE NOTE: Don't add compressed in front of /usb_cam/image_raw even though that is the actual topic. The topic /usb_cam/image_raw is the base for the image formats. The republished likes it in the base format and you can specify the format you want to convert to before in:= or out:=.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.