Why Does RealSense D457 Fail to Initialize in ROS2?

Daniel Price9 min read
Other ManufacturerRoboticsTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

A frame starts at the camera sensor, crosses the USB link into the Jetson host, passes host device permissions into the development container, enters the RealSense ROS node, and finally appears as a ROS2 topic for the visual SLAM node and diagnostic subscribers. Follow that path in order. A silent frequency check is only the last symptom; it does not identify which upstream hop stopped the data.

Where does the RealSense data path stop?

The initial launch reached the ROS processes but stopped at USB device control. The RealSense node reported failed to set power state, followed by The requested device with is NOT found. Will Try again. Because the node could not place the camera in its required power state, it never reached sensor profile configuration or image publication.

Observed symptom Data-path location Engineering interpretation Required check
failed to set power state Host USB access or device control The process can encounter the device but cannot complete a control operation. Install the RealSense udev rule on the host and reconnect the camera.
The requested device with is NOT found RealSense device discovery No usable device remains after initialization fails. Look for a subsequent serial-number discovery message.
RealSense Node Is Up! but frequency command stays silent Sensor-to-ROS publication path Device discovery succeeded, but the selected topic has not delivered samples to the diagnostic subscriber. Verify the opened stream, topic name, ROS graph, and subscriber compatibility.
Visual SLAM node loads while the camera fails Separate process branch Loading libvisual_slam_node.so proves the SLAM component started; it does not prove that camera frames exist. Require camera stream evidence independently of the SLAM startup messages.

The software versions in both launch attempts were RealSense ROS v4.51.1, built and running with LibRealSense v2.55.1. The failure therefore changed without a wrapper or runtime library version change; the decisive difference was restoration of host-side device access.

Check before continuing: Do not troubleshoot ROS topic frequency until the power-state error and repeated device-not-found message have disappeared.

How do I establish USB access before starting the container?

Layer one comes first. The camera was connected through USB 3.2, but link type alone does not grant a containerized process permission to issue device-control requests. RealSense udev rules must exist on the Jetson host, outside the development container. Installing rules only inside a disposable container does not correct the host device permissions used when the USB device is attached.

Use either of these host-side procedures:

  1. Before starting the isaac_ros-dev Docker container with run_dev.sh, run setup_udev_rules.sh from Librealsense in a terminal outside Docker.
  2. Alternatively, check whether 99-realsense-libusb.rules exists in /etc/udev/rules.d/. If it is absent, disconnect the camera, copy that rule file into /etc/udev/rules.d/, and reconnect the camera.
  3. Start the development container only after the host has applied the rule to the reconnected device.
  4. Launch the stack with ros2 launch isaac_ros_visual_slam isaac_ros_visual_slam_realsense.launch.py.

Reconnection matters because udev applies matching rules when it processes a device event. A rule file that appears after the camera was enumerated does not retroactively change the already-created device node unless the rule is reloaded and the device event is retriggered. Disconnecting and reconnecting supplies that event without relying on an unspecified host command.

Check before continuing: The next launch must identify a device by serial number instead of cycling between the power-state and device-not-found errors.

Did ROS select the camera that the installation expects?

The recovered launch discovered serial number 220422302040, physical ID 2-3.2-3, and port number 2-3.2. It also reported USB type 3.2, firmware 5.16.0.1, and product ID 0x0B5C. These fields prove that the host-to-container-to-Librealsense discovery path is operational.

Identity field Expected from the setup description Reported after recovery Decision
Camera family Intel RealSense Depth Camera D457 Intel RealSense D455 Resolve this mismatch before treating the configuration as a validated D457 setup.
Serial number Installation-specific selection value not stated 220422302040 Compare with the physical unit label and any launch-time device selection.
Physical path USB 3.2 connection 2-3.2-3 on port 2-3.2 Use this path to detect later port or hub changes.
USB type USB 3.2 3.2 The enumerated link type matches the stated connection.
Firmware No target version stated 5.16.0.1 Record it for compatibility analysis; select a target only from the applicable product documentation.
Product ID No expected value stated 0x0B5C Use the device report and product documentation to resolve the D457/D455 identity question.

The model discrepancy is operationally significant. A launch described for a D457 discovered a device whose own report named it D455. The serial number and product ID are stronger selection evidence than an assumed camera label. Confirm the physical unit, cable path, and any serial-based selection so that troubleshooting does not proceed against the wrong attached camera.

The node also reported JSON file is not provided and Sync Mode: Off. These are configuration observations, not explanations for the earlier permission failure. They become relevant only if the intended SLAM configuration requires a JSON configuration or external synchronization.

Check before continuing: Match 220422302040, 0x0B5C, and the reported D455 name to the camera that should supply the SLAM images.

Did the stereo and motion sensors actually open?

Device discovery alone does not prove data acquisition. After recovery, the node stopped and restarted the Stereo Module, then opened two infrared profiles. It also stopped and restarted the Motion Module before opening accelerometer and gyroscope profiles.

Sensor path Reported stream Format Dimensions Configured rate
Stereo Module Infra(1) Y8 640 × 360 90 FPS
Stereo Module Infra(2) Y8 640 × 360 90 FPS
Motion Module Accel(0) MOTION_XYZ32F Not applicable 200 FPS
Motion Module Gyro(0) MOTION_XYZ32F Not applicable 200 FPS

The messages re-enable the stream for the change to take effect. appeared before the stop/start sequence. A setting was changed while a stream was active, and the node handled that condition by cycling the affected sensor. The later open-profile messages are the checkpoint: they identify what the driver requested from each sensor. Finally, RealSense Node Is Up! proves that node initialization completed.

An open profile reports configuration, not receipt by a particular ROS subscriber. The configured 90 FPS is therefore not yet a measured publication rate. A frequency tool can report only samples that reach its subscription.

Check before continuing: Require the Infra(1) open-profile message and RealSense Node Is Up! before investigating /camera/infra1/image_rect_raw.

Why can the ROS2 frequency command remain silent?

The command ros2 topic hz /camera/infra1/image_rect_raw --window 20 measures arrival timestamps over a 20-sample window. It does not start the camera, enable an infrared stream, repair device permissions, or create a missing publisher. No output means that the command has not accumulated samples it can measure.

Condition What the launch log shows What to inspect next
No usable camera Power-state and device-not-found errors repeat Host udev rules and USB reconnection
Camera found, stream not opened Identity fields appear, but no Infra(1) profile follows Launch stream configuration and sensor restart messages
Stream opened, wrong ROS name Infra(1) opens, but the requested topic receives nothing Actual topic namespace and image topic exposed by the running node
Publisher exists, subscriber cannot match Topic is present but samples do not reach the frequency subscriber ROS2 QoS compatibility between the image publisher and diagnostic subscriber
Processes use different ROS graphs Each terminal appears healthy in isolation Container boundary, middleware environment, and ROS domain settings in both terminals
Publisher starts late GPU warm-up and component loading continue after camera startup Keep the launch running and begin measurement after all required nodes have loaded

The visual SLAM component used cuVSLAM 11.4. Its successful library load and GPU warm-up concern the consumer side of the path. Those messages cannot substitute for proof that the RealSense publisher emitted an image. Likewise, the recovered run took 15.233617 seconds for CUVSLAM_WarmUpGPU(); run the topic check against the live system after startup activity completes rather than interpreting a quiet diagnostic during initialization as a steady-state rate.

Check before continuing: Confirm that the running ROS graph contains an active publisher under the exact /camera/infra1/image_rect_raw name and that the diagnostic terminal participates in the same graph.

How do I isolate publication from visual SLAM processing?

Treat the camera publisher and SLAM consumer as separate checkpoints. The launch started realsense2_camera_node-2 and component_container-1 as separate processes. The component container loaded libvisual_slam_node.so and instantiated nvidia::isaac_ros::visual_slam::VisualSlamNode; neither action proves that an image crossed the ROS transport.

  1. Keep the launch terminal visible and confirm that the camera no longer retries device discovery.
  2. Read the discovered serial number, model name, USB type, firmware, and product ID. Stop if the selected physical camera is not the intended unit.
  3. Confirm that Infra(1) opened as Y8 at 640 × 360 and 90 FPS.
  4. Confirm that the RealSense node reaches RealSense Node Is Up!.
  5. In the diagnostic terminal, verify the exact namespace used by the live camera node. A remap or namespace change can place the image under a different name even when the sensor is streaming.
  6. Verify that the diagnostic terminal and container share the same ROS discovery environment. A process outside the relevant container or ROS domain can see no samples despite a functioning local publisher.
  7. Check publisher/subscriber QoS compatibility for the image stream. Image pipelines commonly favor timely sensor samples; a diagnostic subscription must request a compatible policy.
  8. Run ros2 topic hz /camera/infra1/image_rect_raw --window 20 only after those checkpoints pass.

Check before continuing: The frequency command must begin printing measured results; the open-profile value of 90 FPS is a configuration target, not the measurement itself.

How do I perform the end-to-end commissioning check?

Run one ordered test without changing cabling, camera selection, or launch configuration between checkpoints. This prevents a valid observation from one hardware state being combined with a later observation from another.

  1. On the Jetson host, verify that 99-realsense-libusb.rules is present in /etc/udev/rules.d/, or run setup_udev_rules.sh outside Docker.
  2. Reconnect the camera so the host applies the rule, then start the development container with run_dev.sh.
  3. Launch isaac_ros_visual_slam_realsense.launch.py through the recorded ROS2 launch command.
  4. Reject the run if failed to set power state or the device-not-found retry returns.
  5. Confirm discovery of serial 220422302040 on USB type 3.2, then resolve why the device reports D455 when the planned camera is D457.
  6. Confirm the two infrared profiles at 640 × 360, Y8, and 90 FPS, followed by RealSense Node Is Up!.
  7. Confirm that the image publisher uses /camera/infra1/image_rect_raw in the same ROS graph as the diagnostic terminal.
  8. Run ros2 topic hz /camera/infra1/image_rect_raw --window 20 and require repeated frequency reports before accepting the camera-to-ROS path.

Check before continuing: Accept the commissioning result only when the frequency output is live and the serial number, reported model, open profile, and topic name all belong to the same uninterrupted launch.

FAQ

How do I fix “failed to set power state” for RealSense in Docker?

Run setup_udev_rules.sh on the Jetson host before starting the isaac_ros-dev container, or place 99-realsense-libusb.rules in /etc/udev/rules.d/. Disconnect and reconnect the camera before relaunching.

How do I know the RealSense camera initialized correctly?

Require a serial-number discovery message, open-profile messages for the required sensors, and RealSense Node Is Up!. Device discovery without an open Infra(1) profile does not prove image acquisition.

How do I resolve a D457 setup that reports a D455?

Compare the physical unit with serial 220422302040, product ID 0x0B5C, and the reported D455 name. Verify camera selection and USB path 2-3.2-3 before changing stream or SLAM settings.

How do I verify the infrared image rate in ROS2?

After Infra(1) opens at 640 × 360, Y8, and 90 FPS, verify the exact topic and ROS graph, then run ros2 topic hz /camera/infra1/image_rect_raw --window 20 and require repeated measured output.

Back to blog