Open-source project
realsenseai/realsense-ros avatar
realsenseai/realsense-ros

realsense-ros: The Official ROS2 Wrapper for Intel RealSense Cameras

ROS Wrapper for RealSense™ Cameras

3,459 stars2,019 forksPythonApache-2.0

At a glance

What is it?
realsense-ros packages the librealsense2 SDK as a ROS2 node, publishing depth, color, infrared, and IMU streams as standard topics. ROS1 support has ended; the current line covers ROS2 distributions from Foxy through Kilted, and all recent releases carry a beta label.
Who is it for?
realsense-ros is the documented path for integrating RealSense cameras into ROS2 robotics systems. Teams on ROS1 must stay on the ros1-legacy branch, which is no longer developed.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 3, 2026, and from our analysis. They are not legal advice.

Editorial analysis

RealSense Cameras in ROS2 Robotics Pipelines

Intel RealSense cameras produce depth, color, infrared, and IMU data. Consuming that data in a ROS2 robot requires a node that translates the camera SDK's output into standard ROS2 topic types. realsense-ros provides that node, wrapping the librealsense2 SDK and publishing sensor streams that other nodes (navigation stacks, visual odometry systems, point cloud processors) can subscribe to without writing camera-specific code.

The wrapper targets roboticists and embedded systems engineers building on Ubuntu with ROS2. It supports Ubuntu 20.04, 22.04, and 24.04 across five ROS2 distributions: Foxy, Humble, Iron, Jazzy, and Kilted. Each combination is tracked in CI.

Repository Migration from IntelRealSense to realsenseai

The repository was previously hosted under the IntelRealSense GitHub organization. The README announces that it has moved to the realsenseai organization:

https://github.com/IntelRealSense/realsense-ros is now https://github.com/realsenseai/realsense-ros

A redirect from the old URL is in place, but the README explicitly warns that the redirect's duration is not guaranteed. Any team with hardcoded clone URLs, CI scripts, or documentation pointing to the IntelRealSense organization should update those references to the realsenseai location.

Installing realsense-ros on Ubuntu: Three Steps

The README structures installation as three sequential steps.

Step 1 is installing a ROS2 distribution for your Ubuntu version. On Ubuntu 24.04 the options are ROS2 Kilted or Jazzy; on Ubuntu 22.04 they are Iron or Humble; on Ubuntu 20.04 the option is Foxy.

Step 2 is installing the librealsense2 SDK. Three options are documented. Option 1 installs the Debian package from RealSense servers (with librealsense2-dev and librealsense2-dkms). Jetson users follow a separate Jetson Installation Guide. Option 2 installs from ROS servers:

bash
sudo apt install ros-<ROS_DISTRO>-librealsense2*

For example, on Humble:

bash
sudo apt install ros-humble-librealsense2*

Option 3 is a build from source. Only one option should be chosen to avoid workspace conflicts.

Step 3 installs the ROS wrapper package itself from the appropriate ROS2 package repository or from source in a colcon workspace. After installation, the wrapper is available as the realsense2_camera package.

ROS1 End of Support and the ros2-master Parameter Changes

ROS1 support ended when the development team shifted focus to ROS2. The ros1-legacy branch exists for reference but receives no updates. Teams on ROS1 will not receive camera model support, bug fixes, or security patches through this repository.

The ros2-master branch also introduced breaking parameter changes compared to ros2-legacy. The stereo_module and l500_depth_sensor parameters were replaced by depth_module. Stream dimension and frame rate parameters changed format:

Old ros2-legacy format:

bash
ros2 launch realsense2_camera rs_launch.py depth_width:=640 depth_height:=480 depth_fps:=30.0

New ros2-master format:

bash
ros2 launch realsense2_camera rs_launch.py depth_module.profile:=640x480x30

The filters parameter was removed. All post-processing blocks are now enabled or disabled using the pattern `<filter_name>.enable`. The align_depth parameter became align_depth.enable. Teams migrating from ros2-legacy need to audit all launch file arguments.

Starting the Camera Node and the Published Topic Structure

The camera node is launched through a ROS2 launch file included in the package. The node publishes a standard set of topics covering color, depth, infrared, and (where supported by the hardware) IMU streams. RGBD is available as a combined topic. Diagnostics are published through the ROS2 diagnostics topic.

A metadata topic provides per-frame sensor metadata. An RViz2 plugin is included in the realsense2_rgbd_plugin package for visualization. TF frames are published for coordinate system conversions between sensor frames and the robot frame.

Camera name and namespace are configurable at launch, which allows running multiple cameras in the same ROS2 system without topic conflicts. The node supports the ROS2 LifeCycleNode interface, giving lifecycle management tools (configure, activate, deactivate, shutdown) control over the camera node.

Post-Processing Filters and Runtime Parameter Control

realsense-ros exposes the librealsense2 post-processing pipeline as ROS2 parameters. Each filter (spatial, temporal, hole filling, decimation, point cloud, align depth) is enabled or disabled through the pattern `<filter_name>.enable`. This replaces the old filters list parameter.

Filter parameters that previously belonged to the top-level namespace were moved into their filter's namespace. The pointcloud filter parameters are now pointcloud.allow_no_texture_points and pointcloud.ordered_pc. The texture stream filter is pointcloud.stream_filter and pointcloud.stream_index_filter.

A key capability added in ros2-master is runtime parameter control. Filters can be enabled and disabled without restarting the node. The unite_imu_method and enable_sync parameters are also changeable at runtime. This is useful for dynamic reconfiguration during robot operation without restarting the camera pipeline.

Limitations: Beta Status, Platform Scope, and Jetson

All three recent releases (4.58.1 from 2026-05-24, 4.58.2 from 2026-06-15, and 4.58.3 from 2026-07-20) carry a beta label. There is no stable release in the recent history. Teams that require a non-beta designation before deploying to production will need to decide whether to treat a tested beta release as sufficient or wait for a stable release.

Windows installation is listed in the README's table of contents as a separate section. The README does not document the Windows steps inline; teams targeting Windows should consult the full README directly in the repository.

Jetson users follow a separate Jetson Installation Guide for the librealsense2 SDK step. The standard Debian package path does not apply to Jetson hardware.

The alternative for teams that do not use ROS is the librealsense2 SDK directly. librealsense2 provides C++ and Python APIs for reading camera data without the ROS topic and node overhead. It is a lower-level path that gives direct access to sensor data but requires integrating the data into whatever processing framework the team uses rather than relying on ROS2's standardized message types and tooling.

Maintenance, Releases, and License

The last push to the repository was on 2026-09-17. The repository is not archived. The project follows semantic versioning in its release names. Three releases landed in 2026: 4.58.1 on 2026-05-24, 4.58.2 on 2026-06-15, and 4.58.3 on 2026-07-20. Each is labeled beta.

The project is licensed under the Apache-2.0 license. A NOTICE.md file is included in the repository. The repository also includes a CONTRIBUTING.md guide and a security policy at security.md.

Editorial conclusion

realsense-ros is the documented path for integrating RealSense cameras into ROS2 robotics systems. Teams on ROS1 must stay on the ros1-legacy branch, which is no longer developed. Because all releases from 4.58.1 onward carry a beta label, teams targeting production deployments should pin to a tested release and verify the librealsense2 version against the release notes for their specific camera model before deploying.

Frequently asked questions

Does realsense-ros still support ROS1?

No. The README states that ROS1 support ended because the development team is focusing on ROS2. The ros1-legacy branch exists for reference but is not actively developed.

What ROS2 distributions does realsense-ros support?

realsense-ros supports ROS2 Foxy (Ubuntu 20.04), Humble and Iron (Ubuntu 22.04), and Jazzy and Kilted (Ubuntu 24.04). Each combination is tracked in CI, as shown by the status badges in the README.

What changed between the ros2-legacy and ros2-master branches?

Several parameters were renamed: stereo_module and l500_depth_sensor became depth_module, and stream dimensions moved from individual width/height/fps parameters to a single profile parameter. The filters list parameter was removed; each filter is now enabled with a dedicated enable parameter.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. realsenseai/realsense-ros on GitHub
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/realsenseai-realsense-ros.svg)](https://hysenlabs.com/projects/realsenseai-realsense-ros)