You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gazebo仿真RealSense深度图与彩色图尺寸不一致问题排查

问题描述

在Gazebo仿真中使用RealSense D435相机,通过ROS采集图像并显示到OpenCV窗口。已解决深度图彩色异常问题,但彩色图与深度图尺寸不一致(未做过缩放处理),需要让仿真输出与真实场景的RealSense相机完全一致。

原因分析与解决方案

核心问题点

真实D435相机的彩色流与深度流默认分辨率存在差异(如彩色1920x1080@30fps、深度1280x720@30fps),且可通过硬件对齐功能将深度图尺寸匹配到彩色图。仿真中若未配置对应参数或未启用对齐,就会出现尺寸不一致的情况。

具体解决步骤

  1. 统一仿真相机分辨率参数
    在Gazebo的相机配置(URDF/SDF)或launch文件中,设置与真实D435一致的分辨率,同时开启深度-彩色对齐功能。

  2. 订阅对齐后的深度话题
    RealSense ROS驱动会发布对齐后的深度图话题,该话题的尺寸将自动匹配彩色图,无需手动缩放。

  3. OpenCV端保留原始尺寸显示
    订阅图像话题时直接获取原始尺寸数据,不做自动缩放处理。

相关代码与配置示例

1. Launch文件关键配置

<launch>
  <!-- 加载RealSense D435仿真节点 -->
  <include file="$(find realsense2_gazebo)/launch/ros_intrinsic.launch">
    <arg name="camera" value="camera"/>
    <!-- 匹配真实D435默认分辨率 -->
    <arg name="color_width" value="1920"/>
    <arg name="color_height" value="1080"/>
    <arg name="depth_width" value="1280"/>
    <arg name="depth_height" value="720"/>
    <!-- 开启深度与彩色对齐 -->
    <arg name="align_depth" value="true"/>
  </include>

  <!-- 自定义图像显示节点 -->
  <node name="image_display_node" pkg="your_package" type="image_display" output="screen"/>
</launch>

2. OpenCV图像订阅与显示代码

#include <ros/ros.h>
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/highgui/highgui.hpp>

void colorImageCallback(const sensor_msgs::ImageConstPtr& msg) {
    try {
        cv::Mat color_img = cv_bridge::toCvShare(msg, "bgr8")->image;
        // 直接显示原始尺寸,不做缩放
        cv::imshow("Color Image", color_img);
        cv::waitKey(1);
        ROS_INFO("Color image size: %dx%d", color_img.cols, color_img.rows);
    } catch (cv_bridge::Exception& e) {
        ROS_ERROR("cv_bridge exception: %s", e.what());
    }
}

void depthImageCallback(const sensor_msgs::ImageConstPtr& msg) {
    try {
        cv::Mat depth_img = cv_bridge::toCvShare(msg, "16UC1")->image;
        // 深度图转伪彩色(仅用于观察,不改变尺寸)
        cv::Mat depth_color;
        cv::normalize(depth_img, depth_color, 0, 255, cv::NORM_MINMAX, CV_8UC1);
        cv::applyColorMap(depth_color, depth_color, cv::COLORMAP_JET);
        cv::imshow("Depth Image", depth_color);
        cv::waitKey(1);
        ROS_INFO("Depth image size: %dx%d", depth_img.cols, depth_img.rows);
    } catch (cv_bridge::Exception& e) {
        ROS_ERROR("cv_bridge exception: %s", e.what());
    }
}

int main(int argc, char** argv) {
    ros::init(argc, argv, "image_display_node");
    ros::NodeHandle nh;

    ros::Subscriber color_sub = nh.subscribe("/camera/color/image_raw", 1, colorImageCallback);
    // 订阅对齐后的深度图话题,尺寸与彩色图一致
    ros::Subscriber depth_sub = nh.subscribe("/camera/aligned_depth_to_color/image_raw", 1, depthImageCallback);

    ros::spin();
    cv::destroyAllWindows();
    return 0;
}

3. 编译依赖说明

确保CMakeLists.txt中包含以下依赖:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  sensor_msgs
  cv_bridge
  image_transport
  realsense2_camera
)
find_package(OpenCV REQUIRED)

内容的提问来源于stack exchange,提问作者brian2lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:37:08