感觉深度估计数据有问题,进的远,远的近
从你提供的截图来看,深度图出现了明显的“近的远、远的近”问题,这通常不是模型本身的问题,而是相机标定参数或极线对齐出了问题。
问题诊断
根据社区类似案例(参考 stereonet看墙面点云深度问题 和 X5使用mipi相机模组进行深度估计),你的情况可能是:
可能原因:
- 相机内参/外参标定不准确 - 特别是
T_cn_cnm1外参矩阵 - 极线未对齐 - 双目图像未正确 rectify
- 使用了错误的相机模型文件 - stereo.yaml 中的参数与实际相机不匹配
- 图像畸变校正问题 - distortion_coeffs 参数不准确
排查步骤
检查相机标定文件
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
确认:
intrinsics(内参)是否与你的相机匹配T_cn_cnm1(外参)是否正确distortion_coeffs(畸变系数)是否准确
验证极线对齐
运行以下命令查看 rectify 后的图像:
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int8_usb_cam.launch.py
然后用 rqt_image_view 查看 /stereo0/rectified_left 和 /stereo0/rectified_right,检查:
- 左右图像的水平线是否对齐
- 同一物体在左右图像中是否在同一水平线上
尝试不同模型版本
社区反馈 V2.4 版本效果较好:
# 尝试切换到 v2.4 int16 模型
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
重新标定相机(如果参数不匹配)
如果你使用的是非官方推荐的双目相机,需要重新标定:
# 使用棋盘格标定工具
ros2 run hobot_camera_tools calibrate
需要你补充的信息
为了更准确定位问题,请提供:
- 相机型号 - 是官方 MIPI 相机还是第三方 USB 相机?
- 系统版本 -
cat /etc/horizon_version - 使用的 launch 文件 - 具体是哪个模型版本?
- stereo.yaml 配置 - 完整内容(特别是内参和外参)
临时解决方案
如果急需使用,可以先:
- 切换到官方推荐的 MIPI 相机测试,确认是否是相机参数问题
- 使用 V2.4 int16 模型试试效果
- 检查相机固件是否为最新版本
建议:把你的 stereo.yaml 配置和相机型号补充到原帖中,这样社区成员能更准确地帮你分析问题。这类问题通常需要结合具体参数才能定位。
RDK官方230AI MIPI双目相机
好的,既然你用的是官方 RDK X5 230AI MIPI 双目相机,那问题就更有针对性了。
根据社区案例 [34255],官方相机理论上应该开箱即用,标定参数已经预置在系统中。出现"近的远、远的近"这种深度反转问题,通常是以下几个原因:
针对官方相机的排查步骤
确认标定文件是否正确加载
官方相机的标定参数应该位于:
ls /opt/tros/humble/lib/mipi_cam/config/
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
检查重点:
- 文件是否存在
- 内参 (
intrinsics) 和外参 (T_cn_cnm1) 是否有合理数值 - 是否对应 SC230AI 模组
验证启动方式是否正确
使用官方推荐的双目启动命令:
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py
然后在另一个终端启动 StereoNet 模型:
# 尝试 V2.4 int8 版本
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int8_usb_cam.launch.py
# 或者尝试 int16 版本(社区反馈对某些场景效果更好)
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
检查极线对齐状态
运行以下命令查看 rectified 图像:
# 安装 rqt 工具(如果没有)
sudo apt install ros-humble-rqt-image-view
# 查看左右目校正后的图像
rqt_image_view
选择 /stereo0/rectified_left 和 /stereo0/rectified_right,检查:
- 同一水平线上的物体在左右图中是否严格对齐
- 如果不对齐,说明 GDC 校正未正确应用
确认 stereo.yaml 是否使用了正确的参数
StereoNet 使用的标定文件路径:
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
关键检查:
intrinsics是否与 MIPI 相机匹配(官方 SC230AI 应该是特定值)T_cn_cnm1外参矩阵是否正确- 如果这里是默认值而非官方相机参数,需要修改
系统版本确认
请提供你的系统版本:
cat /etc/horizon_version
社区反馈 3.1.1 版本 对官方 MIPI 相机支持较好。如果你的版本较旧,建议升级:
sudo apt update
sudo apt upgrade
最可能的原因
基于你是官方相机但仍出现深度反转,最大可能是:
- stereo.yaml 中的参数未正确配置 - StereoNet 可能使用了默认的 USB 相机参数而非 MIPI 相机参数
- GDC 校正未生效 - 极线未正确对齐导致立体匹配错误
- 模型版本问题 - 尝试切换到 V2.4 int16 版本
请补充以下信息
为了更精准定位,请在原帖中补充:
# 1. 系统版本
cat /etc/horizon_version
# 2. 标定文件内容
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 3. StereoNet 配置
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 4. 使用的 launch 文件
# (你运行的是哪个命令?)
快速尝试方案
如果急需验证,可以先:
- 切换到 V2.4 int16 模型试试效果
- 重启板卡后重新测试(排除临时状态问题)
- 检查排线是否插紧(官方套件有时运输中会松动)
建议:把上述命令的输出结果补充到你的原帖中,这样社区成员(包括官方技术支持)能更准确地帮你分析问题。官方相机理论上不应该出现这种问题,很可能是配置未正确加载。
模型版本当前使用的是V2.5_int16
收到,你用的是 V2.5_int16 模型。这个版本比较新,但出现深度反转问题,很可能是模型与相机参数配置不匹配导致的。
核心结论
V2.5 模型 + 官方 SC230AI 相机 出现深度反转,最大可能是:
stereo.yaml中的标定参数未正确加载(仍使用默认 USB 相机参数)- GDC 极线校正未生效
- V2.5 模型对 MIPI 相机的适配可能有 bug(建议对比测试 V2.4)
立即执行的排查步骤
检查 stereo.yaml 配置
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
重点核对:
intrinsics是否为 MIPI 相机参数(官方 SC230AI 的 fx/fy 约 550 左右)T_cn_cnm1外参矩阵是否有合理值(基线约 0.07m)- 如果看到默认值或明显不匹配的数值,说明配置未正确加载
对比测试 V2.4 模型
社区反馈 V2.4 对官方 MIPI 相机支持更稳定:
# 先停止当前 V2.5
# Ctrl+C 停止
# 启动 V2.4 int16 版本
source /opt/tros/humble/setup.bash
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
观察:深度图是否恢复正常?如果 V2.4 正常而 V2.5 异常,说明是模型版本问题。
验证标定文件加载
# 检查 MIPI 相机标定文件
ls -la /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 查看启动日志中是否加载了标定文件
# 启动时注意是否有 "get camera calibration parameters failed" 警告
检查极线对齐
# 启动后在另一个终端查看 rectified 图像
rqt_image_view
选择 /stereo0/rectified_left 和 /stereo0/rectified_right,用鼠标在左右图上移动,检查:
- 同一特征点是否在同一水平线上
- 如果垂直方向有偏移,说明 GDC 校正未生效
提供系统版本信息
cat /etc/horizon_version
请补充到你的原帖中,官方技术支持需要这个信息判断是否是已知问题。
需要你补充到原帖的信息
请在 原帖 中补充以下输出:
# 1. 系统版本
cat /etc/horizon_version
# 2. stereo.yaml 完整内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 3. MIPI 标定文件内容
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 4. V2.4 测试结果
# (切换后深度图是否改善?)
临时解决方案
如果急需使用:
- 回退到 V2.4 int16 - 社区反馈更稳定
- 重启板卡 - 排除临时状态问题
- 检查排线 - 重新插拔 MIPI 相机排线,确保卡扣锁紧
关于 V2.5 模型
V2.5 是较新版本,可能存在:
- 对某些相机参数格式的兼容性问题
- 尚未完全适配官方 MIPI 相机
建议:先用 V2.4 验证硬件和标定是否正常,如果 V2.4 正常而 V2.5 异常,可以在原帖中明确说明,这样官方技术支持能更快定位是模型版本问题。
下一步:请执行上述命令,把输出结果补充到原帖,并测试 V2.4 模型的效果对比。有这些信息后,社区能更准确帮你定位问题根源。
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722143.339853659] [mipi_cap]: X5 start gdc rotation and cal.
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722144.123814186] [mipi_cam]: [init]->cap sc230ai-30fps init success.
[mipi_cam-2]
[stereonet_model_node-1] [WARN] [1775722144.408549143] [StereoNetNode]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] : [261.171243, 255.367438, 317.875783, 224.729875, 0.069345, 0.000000]
[stereonet_model_node-1] [WARN] [1775722144.411901828] [StereoNetNode]: => receive left camera info
[stereonet_model_node-1] [WARN] [1775722144.422610794] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722144.337109760, latency: 85.48 ms
[stereonet_model_node-1] [WARN] [1775722144.424036867] [StereoNetNode]: => HFOV: 101.56°, VFOV: 69.1495°
[stereonet_model_node-1] [WARN] [1775722144.510990256] [StereoNetNode]: => publish result, stamp: 1775722144.337109760, fps: 0.00, latency: 173.83 ms, cpu_usage: 0%, bpu_usage: 0%
[hobot_codec_republish-3] [WARN] [1775722144.566231368] [HobotVenc]: init_pic_w_: 640, init_pic_h_: 704, alined_pic_w_: 640, alined_pic_h_: 704, aline_w_: 16, aline_h_: 16
[stereonet_model_node-1] [ERROR] [1775722144.876775935] [StereoNetNode]: => top is not left image, please swap the mipi cables, or set the mipi_channel and mipi_channel2 parameters.
[hobot_codec_republish-3] [WARN] [1775722145.724050692] [hobot_codec_encoder]: Sub imgRaw fps [3.17]
[hobot_codec_republish-3] [WARN] [1775722145.727242503] [hobot_codec_encoder]: Pub img fps [3.17]
[stereonet_model_node-1] [WARN] [1775722149.430561869] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722149.370438912, latency: 60.11 ms
[stereonet_model_node-1] [WARN] [1775722149.558696221] [StereoNetNode]: => publish result, stamp: 1775722149.337110528, fps: 14.87, latency: 221.54 ms, cpu_usage: 113%, bpu_usage: 96%
[stereonet_model_node-1] [ERROR] [1775722149.901683278] [StereoNetNode]: => top is not left image, please swap the mipi cables, or set the mipi_channel and mipi_channel2 parameters.
[hobot_codec_republish-3] [WARN] [1775722150.727421334] [hobot_codec_encoder]: Sub imgRaw fps [14.79]
[hobot_codec_republish-3] [WARN] [1775722150.730618270] [hobot_codec_encoder]: Pub img fps [14.79]
[stereonet_model_node-1] [WARN] [1775722154.435766517] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722154.370391040, latency: 65.36 ms
[stereonet_model_node-1] [WARN] [1775722154.575546000] [StereoNetNode]: => publish result, stamp: 1775722154.337071360, fps: 14.94, latency: 238.42 ms, cpu_usage: 126%, bpu_usage: 100%
[stereonet_model_node-1] [ERROR] [1775722154.903219798] [StereoNetNode]: => top is not left image, please swap the mipi cables, or set the mipi_channel and mipi_channel2 parameters.
[hobot_codec_republish-3] [WARN] [1775722155.745038640] [hobot_codec_encoder]: Sub imgRaw fps [14.75]
[hobot_codec_republish-3] [WARN] [1775722155.748722656] [hobot_codec_encoder]: Pub img fps [14.75]
找到问题了!
从你的日志中看到了关键错误信息:
[stereonet_model_node-1] [ERROR]: => top is not left image, please swap the mipi cables,
or set the mipi_channel and mipi_channel2 parameters.
问题根源:左右目图像顺序反了! 这就是深度图"近的远、远的近"的根本原因。
解决方案(二选一)
方案 1:交换 channel 参数(推荐,无需动硬件)
修改启动命令,交换 channel 和 channel2 参数:
source /opt/tros/humble/setup.bash
# 原命令可能是 channel:=0 channel2:=2
# 改为:
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py channel:=2 channel2:=0
然后重新启动 StereoNet:
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py
方案 2:物理交换 MIPI 排线
如果方案 1 无效,可以:
- 断电
- 交换两个 MIPI 排线的位置
- 重新上电测试
验证步骤
- 启动修改后的双目相机:
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py channel:=2 channel2:=0
- 启动 StereoNet 模型:
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py
- 观察日志:
- 不再出现
top is not left image错误 - 深度图应该恢复正常(近的数值小,远的数值大)
- 查看点云效果:
- 通过 web 可视化或 rviz2 查看点云
- 墙面应该是平面,不应该有深度反转
为什么会出现这个问题
从你的日志看:
[mipi_cam-1] channel:=0 (默认左目)
[mipi_cam-2] channel2:=2 (默认右目)
但实际物理连接可能是:
- channel 0 对应的是右目
- channel 2 对应的是左目
StereoNet 检测到输入图像顺序与预期不符,所以报出这个错误。深度计算时把左右图搞反了,导致视差计算错误,最终深度值反转。
预期结果
交换 channel 后:
不再出现 top is not left image错误
深度图数值正常(近处 0.5m,远处 2-3m)
点云墙面平整,无悬空噪点
请先尝试方案 1,把 channel 和 channel2 参数对调,然后测试效果。如果问题解决,建议在你的原帖中更新解决方案,帮助其他遇到同样问题的开发者!![]()
发现新问题:内参严重不匹配!
从你提供的截图和之前的日志来看,问题比想象中更复杂。注意日志中的关键信息:
[fx, fy, cx, cy, baseline(m), doffs] : [261.17, 255.37, 317.88, 224.73, 0.069, 0.00]
问题分析:
cx=317, cy=224说明内参对应的是 640x480 分辨率- 但你的 MIPI 相机实际输出是 1280x720 分辨率
- 这导致深度计算时使用了错误的焦距和主点,深度值完全错误(中间显示 21.89m,实际只有 2 米)
根本解决方案
方案 1:使用正确的 StereoNet launch 文件(推荐)
StereoNet 有专门针对 MIPI 相机的启动文件,不要使用 usb_cam 版本:
# 1. 先停止所有节点
# Ctrl+C
# 2. 查看可用的 launch 文件
ls /opt/tros/humble/share/hobot_stereonet/launch/
# 3. 使用 MIPI 专用启动文件(如果有)
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_mipi_cam.launch.py
# 或者查找包含 mipi 的 launch 文件
ls /opt/tros/humble/share/hobot_stereonet/launch/ | grep mipi
方案 2:手动修正 stereo.yaml 参数
如果 MIPI 专用 launch 文件不存在,需要手动修改配置:
# 1. 备份原文件
sudo cp /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml \
/opt/tros/humble/share/hobot_stereonet/config/stereo.yaml.bak
# 2. 编辑配置文件
sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
修改为 SC230AI 的正确参数(1280x720 分辨率):
stereo0:
cam0:
intrinsics: [522.34, 510.73, 639.5, 359.5] # fx, fy, cx, cy (1280x720)
resolution: [1280, 720]
distortion_coeffs: [-0.271, 0.051, 0.001, -0.002] # 从 calib_params.yaml 复制
cam1:
T_cn_cnm1: # 从 calib_params.yaml 复制外参
- [0.9999, 0.0005, 0.0099, -0.0693]
- [-0.0005, 0.9999, 0.0072, 0.0011]
- [-0.0099, -0.0072, 0.9999, -0.0006]
- [0.0, 0.0, 0.0, 1.0]
获取正确参数的方法:
# 查看官方 MIPI 相机的标定文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
方案 3:对比测试 V2.4 模型
V2.4 对 MIPI 相机的适配可能更完善:
# 启动 V2.4 int16
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
# 观察日志中的内参是否正确
# 如果 V2.4 能自动获取正确内参,说明是 V2.5 的 bug
立即执行的诊断命令
请在终端执行以下命令,把输出补充到原帖:
# 1. 查看当前 stereo.yaml 内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 2. 查看 MIPI 相机标定文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 3. 查看可用的 StereoNet launch 文件
ls /opt/tros/humble/share/hobot_stereonet/launch/
# 4. 查看系统版本
cat /etc/horizon_version
快速验证方法
启动 StereoNet 后,立即观察日志第一行:
# 正确的内参应该接近(1280x720 分辨率):
[fx, fy, cx, cy] : [520, 510, 640, 360, ...]
# 错误的内参(你当前的):
[fx, fy, cx, cy] : [261, 255, 317, 224, ...] # 这是 640x480 的参数!
如果内参不对,深度值一定会错误。
临时 workaround
如果急需测试,可以尝试强制指定分辨率:
# 在启动时添加参数
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py \
image_width:=1280 \
image_height:=720
核心问题已定位:内参与分辨率不匹配。 请先执行上述诊断命令,把输出补充到 原帖,这样官方技术支持能快速给你正确的配置参数。
同时尝试 方案 3(V2.4 模型),看是否能自动获取正确的内参。如果 V2.4 正常,说明是 V2.5 的适配问题。
root@ubuntu:~/dev/StereoDepthTest/script# bash run_stereo.sh --mipi_rotation 0.0 --mipi_channel 0 --mipi_channel2 2
/opt/tros/humble
/opt/tros/humble
[INFO] [launch]: All log files can be found below /root/.ros/log/2026-04-09-16-11-39-525279-ubuntu-18565
[INFO] [launch]: Default logging verbosity is set to INFO
config_file_path is /opt/tros/humble/lib/mipi_cam/config/
Hobot shm pkg enables zero-copy with fastrtps profiles file: /opt/tros/humble/lib/hobot_shm/config/shm_fastdds.xml
Hobot shm pkg sets RMW_FASTRTPS_USE_QOS_FROM_XML: 1
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
webserver has launch
config_file_path is /opt/tros/humble/lib/mipi_cam/config/
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
webserver has launch
config_file_path is /opt/tros/humble/lib/mipi_cam/config/
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting
webserver has launch
[INFO] [stereonet_model_node-1]: process started with pid [18577]
[INFO] [mipi_cam-2]: process started with pid [18579]
[INFO] [hobot_codec_republish-3]: process started with pid [18581]
[INFO] [websocket-4]: process started with pid [18583]
[hobot_codec_republish-3] [WARN] [1775722300.307564306] [hobot_codec_encoder]: Parameters:
[hobot_codec_republish-3] sub_topic: /StereoNetNode/stereonet_visual
[hobot_codec_republish-3] pub_topic: /image_jpeg
[hobot_codec_republish-3] channel: 1
[hobot_codec_republish-3] in_mode: ros
[hobot_codec_republish-3] out_mode: ros
[hobot_codec_republish-3] in_format: bgr8
[hobot_codec_republish-3] out_format: jpeg
[hobot_codec_republish-3] jpg_quality: 60.00
[hobot_codec_republish-3] input_framerate: 30
[hobot_codec_republish-3] output_framerate: -1
[hobot_codec_republish-3] dump_output: false
[hobot_codec_republish-3] dump_file_prefix: ./dump_codec_output
[hobot_codec_republish-3] dump_frame_count: -1 (unlimited)
[hobot_codec_republish-3] [WARN] [1775722300.316759290] [HobotCodecImpl]: platform x5
[mipi_cam-2] [WARN] [1775722300.607474755] [mipi_node]:
[mipi_cam-2] node params:
[mipi_cam-2] config_path: /opt/tros/humble/lib/mipi_cam/config/
[mipi_cam-2] video_device_name: default
[mipi_cam-2] channel: 0
[mipi_cam-2] channel2: 2
[mipi_cam-2] camera_info_url:
[mipi_cam-2] camera_calibration_file_path: /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
[mipi_cam-2] out_format_name: nv12
[mipi_cam-2] gdc_bin_file:
[mipi_cam-2] image_width: 640
[mipi_cam-2] image_height: 352
[mipi_cam-2] sub_image_width: 1920
[mipi_cam-2] sub_image_height: 1080
[mipi_cam-2] framerate: 30
[mipi_cam-2] rotation: 0.000000
[mipi_cam-2] device_mode: dual
[mipi_cam-2] dual_combine: 1
[mipi_cam-2] lpwm_enable: true
[mipi_cam-2] gdc_enable: true
[mipi_cam-2] frame_ts_type: realtime
[mipi_cam-2] frame_id: default_cam
[mipi_cam-2] link_type: 0
[mipi_cam-2] link_port: 0
[mipi_cam-2] io_method_name: ros
[mipi_cam-2] cal_alpha: 0.000
[websocket-4] [WARN] [1775722300.696825402] [websocket]:
[websocket-4] Parameter:
[websocket-4] image_topic: /image_jpeg
[websocket-4] image_type: mjpeg
[websocket-4] only_show_image: 1
[websocket-4] output_fps: 0
[stereonet_model_node-1] [WARN] [1775722301.026913453] [StereoNetNode]: => ===================== init StereoNetNode =====================
[stereonet_model_node-1]
[stereonet_model_node-1] [WARN] [1775722301.032640793] [StereoNetNode]:
[stereonet_model_node-1] stereonet_model_file_path: /opt/tros/humble/share/hobot_stereonet/config/DStereoV2.4_int16.bin
[stereonet_model_node-1] stereo_image_topic: /image_combine_raw
[stereonet_model_node-1] camera_info_topic: /image_combine_raw/right/camera_info
[stereonet_model_node-1] depth_image_topic: ~/stereonet_depth
[stereonet_model_node-1] depth_camera_info_topic: ~/stereonet_depth/camera_info
[stereonet_model_node-1] rectify_left_image_topic: ~/rectify_left_image
[stereonet_model_node-1] rectify_right_image_topic: ~/rectify_right_image
[stereonet_model_node-1] publish_rectify_bgr: 0
[stereonet_model_node-1] [origin_left_image_topic, origin_right_image_topic, publish_origin_enable]: [~/origin_left_image, ~/origin_right_image, 1]
[stereonet_model_node-1] [pointcloud2_topic, publish_pcd_enabled]: [~/stereonet_pointcloud2, 1]
[stereonet_model_node-1] [visual_image_topic, publish_visual_enabled]: [~/stereonet_visual, 1]
[stereonet_model_node-1] [stereonet_frame_id, stereonet_frame_id_right]: [camera_link, camera_link_right]
[stereonet_model_node-1] uncertainty_th: -0.1
[stereonet_model_node-1] [camera_fx, camera_fy, camera_cx, camera_cy, baseline, doffs]: [0, 0, 0, 0, 0(m)0]
[stereonet_model_node-1] [pointcloud_downsample_step, pointcloud_height_min, pointcloud_height_max, pointcloud_depth_max]: [2, -5(m), 5(m), 5(m)]
[stereonet_model_node-1] [use_local_image_flag, local_image_dir, image_sleep]: [0, ./offline, 0]
[stereonet_model_node-1] [save_result_flag, save_dir, save_freq, save_total, save_stereo_flag, save_origin_flag, save_disp_flag, save_uncert_flag, save_depth_flag, save_visual_flag, save_pcd_flag]: [0, ./result, 1, -1, 1, 0, 1, 0, 1, 1, 0]
[stereonet_model_node-1] [calib_method, stereo_calib_file_path]: [none, calib.yaml]
[stereonet_model_node-1] [speckle_filter_enable, max_speckle_size, max_disp_diff]: [0, 100, 1]
[stereonet_model_node-1] [pcl_filter_enable, grid_size, grid_min_point_count]: [0, 0.1, 5]
[stereonet_model_node-1] [render_type, render_perf, depth_decimal_num, render_max_disp, render_z_near, render_z_range]: [distance, 1, 2, 80, -1(m), 3(m)]
[stereonet_model_node-1] left_img_mask_enable: 0
[stereonet_model_node-1] [measure_mode, roi_size, gt_depth]: [0, 10, 0(mm)]
[stereonet_model_node-1] [epipolar_mode, feature_epipolar_mode, epipolar_img, chessboard_per_rows, chessboard_per_cols, chessboard_square_size]: [0, 0, rect, 20, 11, 0.06(m)]
[stereonet_model_node-1] feature_epipolar_mode: 0
[stereonet_model_node-1] post_version: auto
[stereonet_model_node-1] [infer_thread_num, save_thread_num, max_save_task]: [2, 4, 50]
[stereonet_model_node-1]
[stereonet_model_node-1] => ==================================================================
[stereonet_model_node-1]
[stereonet_model_node-1] [BPU_PLAT]BPU Platform Version(1.3.6)! soc info(x5)
[stereonet_model_node-1] [HBRT] set log level as 0. version = 3.15.55.0
[stereonet_model_node-1] [DNN] Runtime version = 1.24.5_(3.15.55 HBRT)
[mipi_cam-2] [WARN] [1775722301.180991903] [mipi_cap]: i2c bus: 4, EEPROM FLAG: SC230AI
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722301.182190437] [mipi_cap]: i2c bus: 4, EEPROM FLAG: SC230AI
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722301.183334138] [mipi_cap]: i2c bus: 4, EEPROM FLAG: SC230AI
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722301.184915587] [mipi_cap]: i2c bus: 6, EEPROM FLAG: ��������
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722301.186080079] [mipi_cap]: i2c bus: 6, EEPROM FLAG: ��������
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722301.187235364] [mipi_cap]: i2c bus: 6, EEPROM FLAG: ��������
[mipi_cam-2]
[stereonet_model_node-1] [A][DNN][packed_model.cpp:247]Model [HorizonRT] The model builder version = 1.24.3
[stereonet_model_node-1] [WARN] [1775722301.430172505] [StereoNetNode]: => ============ init model start ============
[stereonet_model_node-1] [WARN] [1775722301.430387879] [StereoNetNode]: => model name: DStereoV2.4.0
[stereonet_model_node-1] [WARN] [1775722301.430489461] [StereoNetNode]: => input_count: 2
[stereonet_model_node-1] [WARN] [1775722301.430582128] [StereoNetNode]: => output_count: 4
[stereonet_model_node-1] [WARN] [1775722301.430703252] [StereoNetNode]: => model_input_h: 352, model_input_w: 640
[stereonet_model_node-1] [WARN] [1775722301.430859001] [StereoNetNode]: => ----- prepare_input_tensor -----
[stereonet_model_node-1] [WARN] [1775722301.430979958] [StereoNetNode]: => input tensor type is HB_DNN_IMG_TYPE_NV12
[stereonet_model_node-1] [WARN] [1775722301.431379706] [StereoNetNode]: => input[0].memsize: 337920
[stereonet_model_node-1] [WARN] [1775722301.432805530] [StereoNetNode]: => ----- prepare_output_tensor -----
[stereonet_model_node-1] [WARN] [1775722301.433044612] [StereoNetNode]: => output tensor type is HB_DNN_TENSOR_TYPE_S32
[stereonet_model_node-1] [WARN] [1775722301.433284944] [StereoNetNode]: => output[0].memsize: 506880
[stereonet_model_node-1] [WARN] [1775722301.436277675] [StereoNetNode]: => ============ init model end ============
[mipi_cam-2] [WARN] [1775722301.703491373] [mipi_cap]: Target FOV 0.00° out of valid range [101.56°, 157.37°]
[mipi_cam-2] [WARN] [1775722301.703758371] [mipi_cap]: Use default alpha=0.0 (target FOV invalid)
[mipi_cam-2] [WARN] [1775722302.083983859] [mipi_cap]: X5 start gdc rotation and cal.
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722303.047074359] [mipi_cap]: X5 start gdc rotation and cal.
[mipi_cam-2]
[mipi_cam-2] [WARN] [1775722303.827927588] [mipi_cam]: [init]->cap sc230ai-30fps init success.
[mipi_cam-2]
[stereonet_model_node-1] [WARN] [1775722304.112960009] [StereoNetNode]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] : [261.171243, 255.367438, 317.875783, 224.729875, 0.069345, 0.000000]
[stereonet_model_node-1] [WARN] [1775722304.116349321] [StereoNetNode]: => receive left camera info
[stereonet_model_node-1] [WARN] [1775722304.133942919] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722304.39402240, latency: 94.50 ms
[stereonet_model_node-1] [WARN] [1775722304.138760056] [StereoNetNode]: => HFOV: 101.56°, VFOV: 69.1495°
[stereonet_model_node-1] [WARN] [1775722304.242179950] [StereoNetNode]: => publish result, stamp: 1775722304.39402240, fps: 0.00, latency: 202.66 ms, cpu_usage: 0%, bpu_usage: 0%
[hobot_codec_republish-3] [WARN] [1775722304.299403549] [HobotVenc]: init_pic_w_: 640, init_pic_h_: 704, alined_pic_w_: 640, alined_pic_h_: 704, aline_w_: 16, aline_h_: 16
[hobot_codec_republish-3] [WARN] [1775722305.367643691] [hobot_codec_encoder]: Sub imgRaw fps [2.98]
[hobot_codec_republish-3] [WARN] [1775722305.370871171] [hobot_codec_encoder]: Pub img fps [2.97]
[stereonet_model_node-1] [WARN] [1775722309.144471776] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722309.72687104, latency: 71.77 ms
[stereonet_model_node-1] [WARN] [1775722309.268404877] [StereoNetNode]: => publish result, stamp: 1775722309.39443712, fps: 14.99, latency: 228.92 ms, cpu_usage: 106%, bpu_usage: 64%
[hobot_codec_republish-3] [WARN] [1775722310.383817537] [hobot_codec_encoder]: Sub imgRaw fps [14.76]
[hobot_codec_republish-3] [WARN] [1775722310.387078600] [hobot_codec_encoder]: Pub img fps [14.76]
[stereonet_model_node-1] [WARN] [1775722314.172037336] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722314.106021376, latency: 66.00 ms
[stereonet_model_node-1] [WARN] [1775722314.284781342] [StereoNetNode]: => publish result, stamp: 1775722314.72738048, fps: 14.79, latency: 212.00 ms, cpu_usage: 86%, bpu_usage: 99%
[hobot_codec_republish-3] [WARN] [1775722315.404672038] [hobot_codec_encoder]: Sub imgRaw fps [14.74]
[hobot_codec_republish-3] [WARN] [1775722315.408044059] [hobot_codec_encoder]: Pub img fps [14.74]
[stereonet_model_node-1] [WARN] [1775722319.197933090] [StereoNetNode]: => receive stereo image, format: nv12, stamp: 1775722319.139402496, latency: 58.52 ms
[stereonet_model_node-1] [WARN] [1775722319.302383025] [StereoNetNode]: => publish result, stamp: 1775722319.106025984, fps: 14.66, latency: 196.31 ms, cpu_usage: 87%, bpu_usage: 94%
[hobot_codec_republish-3] [WARN] [1775722320.410185360] [hobot_codec_encoder]: Sub imgRaw fps [14.79]
[hobot_codec_republish-3] [WARN] [1775722320.414311543] [hobot_codec_encoder]: Pub img fps [14.79]
问题定位完成!
从你的日志中发现了三个关键问题:
问题 1:分辨率配置错误
image_width: 640
image_height: 352
model_input_h: 352, model_input_w: 640
你的 MIPI 相机被配置为输出 640x352,但内参对应的是 640x480,导致深度计算错误。
问题 2:GDC 校正参数异常
[mipi_cap]: Target FOV 0.00° out of valid range [101.56°, 157.37°]
[mipi_cap]: Use default alpha=0.0 (target FOV invalid)
GDC 校正未正确应用,极线可能未对齐。
问题 3:内参与分辨率不匹配
[fx, fy, cx, cy] : [261.17, 255.37, 317.88, 224.73]
这个内参的 cy=224 对应 480 高度,但实际输出高度是 352。
解决方案
方案 1:修改 run_stereo.sh 脚本的分辨率参数(推荐)
你的脚本 run_stereo.sh 中有分辨率配置,需要修改:
# 编辑你的脚本
vim ~/dev/StereoDepthTest/script/run_stereo.sh
# 找到分辨率相关参数,修改为:
--mipi_image_width 640 \
--mipi_image_height 480 \
或者使用官方标准的 640x480 输出(StereoNet 模型原生支持):
# 使用官方推荐的启动方式
source /opt/tros/humble/setup.bash
# 启动 MIPI 相机(640x480 输出)
ros2 launch mipi_cam mipi_cam_640x480_nv12_hbmem.launch.py device_mode:=dual
# 启动 StereoNet V2.4
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
方案 2:检查 calib_params.yaml 文件
# 查看标定文件内容
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 确认是否有 640x480 分辨率的标定参数
如果标定文件中没有对应 640x352 的参数,必须使用 640x480。
方案 3:使用官方示例脚本
# 查找官方 StereoNet 示例
find /opt -name "*.sh" 2>/dev/null | grep -i stereo
# 或查看 hobot_stereonet 包的示例
ls /opt/tros/humble/share/hobot_stereonet/
立即执行的验证命令
# 1. 查看你的脚本内容
cat ~/dev/StereoDepthTest/script/run_stereo.sh | grep -E "width|height|resolution"
# 2. 查看标定文件中的分辨率配置
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml | grep -A5 "resolution"
# 3. 查看可用的 MIPI launch 文件
ls /opt/tros/humble/share/mipi_cam/launch/ | grep 640x480
快速测试(使用官方配置)
# 停止当前运行
# Ctrl+C
# 使用官方 640x480 配置启动
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_640x480_nv12_hbmem.launch.py device_mode:=dual dual_combine:=1
# 在另一个终端启动 StereoNet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
观察日志:
# 正确的内参应该接近:
[fx, fy, cx, cy] : [261, 255, 320, 240] # 640x480 的标准参数
预期结果
使用正确的 640x480 配置后:
不再出现 Target FOV out of valid range警告
内参 cy应该接近 240(480/2)
深度值应该正常(2 米内物体显示 1-2m,不是 21m)
请先执行方案 1 或快速测试,把修改后的日志输出补充到 原帖。这个问题本质是分辨率配置与标定参数不匹配,使用官方 640x480 配置应该能解决。
找到根本原因了!
从最新日志看到关键警告:
[StereoNetNode]: => input image size not match model input size, need resize, [640 x 480] -> [640 x 352]
问题核心:图像被强制 resize,但内参没有同步调整,导致深度计算错误!
问题分析
| 环节 | 当前状态 | 问题 |
|---|---|---|
| 相机输出 | 640x480 | |
| 模型输入 | 640x352 | |
| 内参 | 对应 640x480 | |
| 深度计算 | 使用错误内参 |
resize 会改变焦距和主点,但 StereoNet 仍用原始内参计算深度,所以结果错误。
解决方案(三选一)
方案 1:让相机输出 640x352(推荐,匹配模型)
修改你的启动脚本或命令:
# 如果使用 run_stereo.sh,修改分辨率参数
vim ~/dev/StereoDepthTest/script/run_stereo.sh
# 找到并修改:
--mipi_image_width 640 \
--mipi_image_height 352 \
# 或者使用命令行参数启动
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
mipi_image_width:=640 \
mipi_image_height:=352 \
device_mode:=dual
方案 2:使用支持 640x480 的模型版本
检查是否有 V2.5 支持 640x480:
# 查看可用的模型文件
ls /opt/tros/humble/share/hobot_stereonet/config/*.bin
# 查看 launch 文件
ls /opt/tros/humble/share/hobot_stereonet/launch/ | grep -E "480|640"
方案 3:修改 stereo.yaml 中的内参(需要计算)
如果必须用 640x480 输出 + 640x352 模型,需要调整内参:
sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 原始内参(640x480):
# fx=261, fy=255, cx=320, cy=240
# 缩放后内参(640x352):
# fx=261*(352/480)=191, fy=255*(352/480)=187
# cx=320, cy=240*(352/480)=176
快速验证步骤
# 1. 停止当前运行
# Ctrl+C
# 2. 使用 640x352 启动相机
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
mipi_image_width:=640 \
mipi_image_height:=352 \
device_mode:=dual \
mipi_channel:=2 \
mipi_channel2:=0
# 3. 启动 StereoNet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
# 4. 观察日志,应该不再出现 resize 警告
预期日志:
# 正确匹配时:
[StereoNetNode]: => receive stereo image, format: nv12, ...
# 不再有 "input image size not match model input size" 警告
分辨率对照表
| 分辨率 | 适用场景 | 内参 cx,cy |
|---|---|---|
| 640x352 | StereoNet V2.4/V2.5 默认 | 320, 176 |
| 640x480 | 通用 StereoNet | 320, 240 |
| 1280x720 | 高精度需求 | 640, 360 |
建议
- 优先使用 640x352 - 这是 StereoNet 模型的原生输入尺寸,无需 resize
- 如果必须用 640x480 - 需要找到支持该分辨率的模型版本或调整内参
- 把解决方案更新到原帖 - 帮助其他遇到同样问题的开发者
请先尝试方案 1,用 640x352 启动相机,然后测试深度效果。如果问题解决,请在 原帖 中更新你的解决方案!![]()
好消息!极线对齐已解决!
从你提供的立体匹配图来看,特征点连线都是水平的,说明极线约束已经正确,这是深度计算的基础 ![]()
但你说"深度不对",结合之前的分析,问题应该出在内参或基线参数上。
深度计算关键参数检查
深度计算公式:depth = (fx * baseline) / disparity
影响深度准确性的三个关键参数:
| 参数 | 影响 | 当前值(需确认) |
|---|---|---|
fx (焦距) |
深度比例 | 约 261 (640x480) |
baseline (基线) |
深度比例 | 约 0.069m |
disparity (视差) |
模型输出 | 由 StereoNet 计算 |
立即执行的验证步骤
检查当前使用的内参和基线
# 查看 stereo.yaml 配置
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 或查看启动日志中的内参信息
# 启动 StereoNet 后,找这一行:
# [fx, fy, cx, cy, baseline(m), doffs] : [...]
对比官方 MIPI 相机标定参数
# 查看官方标定文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 重点核对:
# - intrinsics (内参)
# - T_cn_cnm1 中的基线距离 (第四列第一行,约 0.069m)
实测验证深度准确性
用已知距离的物体测试:
# 1. 放置物体在已知距离(如 1m, 2m)
# 2. 查看深度图对应位置的数值
# 3. 对比实际距离和测量距离
简单测试方法:
- 站在相机前 1 米处,看深度图是否显示 ~1.0m
- 墙面距离 3 米,看是否显示 ~3.0m
可能的原因及解决
原因 1:基线参数错误
如果 baseline 不是 0.069m(SC230AI 的标准基线),深度会成比例错误。
解决: 修改 stereo.yaml 中的 baseline 值
原因 2:内参未匹配当前分辨率
如果相机输出 640x352,但内参是 640x480 的,深度会错误。
解决: 确保内参与分辨率匹配
# 640x352 的内参应该接近:
intrinsics: [191, 187, 320, 176] # fx, fy, cx, cy
# 640x480 的内参应该接近:
intrinsics: [261, 255, 320, 240]
原因 3:模型版本问题
V2.5 可能对某些配置支持不完善。
解决: 对比测试 V2.4
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
请补充到原帖的信息
为了官方技术支持能更快帮你定位,请在 原帖 中补充:
# 1. 当前 stereo.yaml 完整内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 2. 启动 StereoNet 时的内参日志
# (找 [fx, fy, cx, cy, baseline] 那一行)
# 3. 实测深度对比
# 例如:实际 1m 处物体,深度图显示多少?
当前状态总结
| 检查项 | 状态 | 说明 |
|---|---|---|
| 左右目顺序 | channel 参数已交换 | |
| 极线对齐 | 特征点连线水平 | |
| 图像分辨率 | 匹配模型输入 | |
| 深度准确性 | 需检查内参和基线 |
下一步: 请检查 stereo.yaml 中的 baseline 和 intrinsics 参数,并做一个简单实测(已知距离物体对比深度值)。如果参数明显不匹配,修改后重启测试即可。
有结果后请更新原帖,这样其他遇到同样问题的开发者也能参考你的解决方案!![]()
rectified [fx, fy, cx, cy, baseline(m), doffs] : [261.171243, 255.367438, 317.875783, 224.729875, 0.069345, 0.000000]
参数分析
从你提供的内参来看:
[fx, fy, cx, cy, baseline, doffs] : [261.17, 255.37, 317.88, 224.73, 0.069345, 0.000000]
| 参数 | 当前值 | 预期值 (640x480) | 状态 |
|---|---|---|---|
| fx | 261.17 | ~260 | |
| fy | 255.37 | ~255 | |
| cx | 317.88 | ~320 | |
| cy | 224.73 | ~240 | |
| baseline | 0.069345m | ~0.069m |
cy=224.73 偏小(应该是 240 左右),这会导致深度计算在垂直方向有偏差。
深度验证方法
简单实测(推荐)
# 1. 在相机正前方放置物体,用卷尺测量实际距离
# 2. 查看深度图对应位置的数值
# 3. 对比:实际距离 vs 深度图显示
# 测试点建议:
# - 1.0m 处物体 → 深度图应显示 0.9-1.1m
# - 2.0m 处墙面 → 深度图应显示 1.8-2.2m
查看深度图数值
通过 web 可视化或 rviz2 查看深度图,点击不同位置读取深度值:
# 如果使用 web 可视化,直接看界面上的深度数值
# 或使用 rviz2 订阅深度话题
ros2 topic echo /stereonet_model_node/stereonet_depth
深度不准确的可能原因
原因 1:cy 参数偏差
cy=224.73 比标准的 240 小约 15 像素,这会导致:
- 图像中心偏上
- 深度计算在垂直方向有误差
解决: 修改 stereo.yaml 中的 cy 值
sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 修改 cy 从 224.73 → 240.0
原因 2:标定文件未正确加载
StereoNet 可能使用的是默认参数而非 MIPI 相机的标定参数。
验证:
# 对比两个文件的参数
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 确认 stereo.yaml 中的参数是否与 calib_params.yaml 一致
原因 3:模型输出视差需要缩放
StereoNet 输出的视差图可能需要乘以一个缩放因子才是真实视差。
检查: 查看模型文档或 launch 文件中是否有 depth_scale 参数
建议的排查步骤
# 1. 查看 stereo.yaml 完整内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 2. 查看 MIPI 相机标定文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
# 3. 对比两个文件中的内参是否一致
# 4. 如果不一致,复制 calib_params.yaml 中的参数到 stereo.yaml
sudo cp /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml \
/opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
快速测试
如果急着验证,可以做一个简单测试:
- 站在相机前 1 米处,看深度图显示多少
- 如果显示 0.5m → 深度是实际的 1/2,需要调整基线或焦距
- 如果显示 2m → 深度是实际的 2 倍,需要调整基线或焦距
深度比例 = 显示值 / 实际值
如果比例固定,可以通过调整 baseline 参数来校正:
# 如果深度是实际的 2 倍,把 baseline 除以 2
baseline: 0.034672 # 0.069345 / 2
请补充到原帖
请在 原帖 中补充:
# 1. 实测深度对比(例如:实际 1m,显示多少?)
# 2. stereo.yaml 完整内容
# 3. calib_params.yaml 完整内容
这样官方技术支持能帮你确认是否是标定参数问题,还是模型输出需要额外处理。
当前进展: 极线对齐
| 左右目顺序
| 分辨率匹配
| 深度准确性 ![]()
先把实测结果补充到原帖,这是判断问题根源的关键信息!![]()
实测2M显示21m
找到根本原因了!深度误差 10 倍!
实测 2m 显示 21m,深度误差约 10 倍,这是典型的视差缩放因子缺失问题!
问题根源
从之前日志分析:
相机输出:640x480
模型输入:640x352
图像被 resize,但内参未同步调整
深度公式:depth = (fx * baseline) / disparity
当图像从 480→352 resize 时:
- 视差值也会按比例缩小(352/480 = 0.733)
- 但内参 fx 仍用 261(480 高度的焦距)
- 导致深度计算错误
但 10 倍误差说明还有视差缩放因子问题,StereoNet 输出的视差图需要乘以特定系数才是真实视差。
解决方案
方案 1:检查并修改 stereo.yaml 的 depth_scale 参数
# 查看 stereo.yaml 完整内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
查找是否有 depth_scale 或 disparity_scale 参数,如果没有,尝试添加:
stereo0:
cam0:
intrinsics: [261.17, 255.37, 317.88, 224.73]
baseline: 0.069345
depth_scale: 0.1 # 尝试添加,将深度缩小 10 倍
方案 2:使用正确的分辨率匹配(推荐)
让相机输出与模型输入完全匹配,避免 resize:
# 停止当前运行
# Ctrl+C
# 使用 640x352 启动相机(匹配模型输入)
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
mipi_image_width:=640 \
mipi_image_height:=352 \
device_mode:=dual \
mipi_channel:=2 \
mipi_channel2:=0
# 启动 StereoNet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
观察日志,应该不再出现 input image size not match model input size 警告。
方案 3:修改内参匹配当前分辨率
如果必须用 640x480 输出,需要调整内参:
sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 640x352 的正确内参(从 640x480 缩放):
# fx = 261 * (352/480) = 191
# fy = 255 * (352/480) = 187
# cx = 318 (不变)
# cy = 225 * (352/480) = 165
intrinsics: [191.0, 187.0, 318.0, 165.0]
立即验证
# 1. 查看当前 stereo.yaml
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 2. 查看是否有 depth_scale 相关参数
grep -r "scale" /opt/tros/humble/share/hobot_stereonet/
# 3. 查看模型文件信息
file /opt/tros/humble/share/hobot_stereonet/config/DStereoV2.4_int16.bin
快速测试
修改后重新测试:
- 站在相机前 1 米 处,深度图应显示 0.9-1.1m
- 墙面距离 3 米,深度图应显示 2.8-3.2m
请补充到原帖
请在 原帖 中补充:
# 1. stereo.yaml 完整内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 2. 实测对比
# 实际距离 vs 深度图显示值(多测几个点)
# 3. 使用 640x352 分辨率后的日志
# 是否还有 resize 警告?
当前状态总结
| 检查项 | 状态 | 说明 |
|---|---|---|
| 左右目顺序 | channel 参数已交换 | |
| 极线对齐 | 特征点连线水平 | |
| 分辨率匹配 | 640x480→640x352 resize 导致问题 | |
| 深度准确性 | 需修正内参或分辨率 |
优先尝试方案 2(使用 640x352 分辨率),这是最直接的解决方案。如果仍有问题,再检查 stereo.yaml 中的 depth_scale 参数。
有结果后请更新原帖,官方技术支持可以根据你的实测数据给出更精确的参数配置!![]()




