【RDK X5】【GS132双目相机】【rviz2】rviz2中无法看到点云

:bullseye: 问题根因已定位

从日志中看到关键错误

[stereonet_model_node-1] [WARN]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] : 
[0.000000, 0.000000, 312.265194, 442.958544, nan, 0.000000]

[stereonet_model_node-1] [ERROR]: => Haven't received any camera info from topic /image_combine_raw/right/camera_info

问题

  • fx=0, fy=0 → 焦距为 0(无效)
  • baseline=nan → 基线距离无效
  • 右目 camera_info 缺失
  • StereoNetNode 因参数无效而崩溃

结论相机标定参数缺失,导致无法计算深度和点云。


:hammer_and_wrench: 解决方案

方案 1:使用官方 GS132 标定文件(推荐)

GS132 双目相机应该有出厂标定参数。检查标定文件是否存在:

# 查找标定文件
find /opt/tros -name "*.yaml" | grep -i calib
find /opt/tros -name "*gs132*"
find /opt/tros -name "*stereo*" -type f | head -20

查看 stereonet launch 文件,确认标定文件路径:

cat /opt/tros/humble/share/hobot_stereonet/launch/stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py | grep -i calib

方案 2:手动指定标定参数启动

如果找不到标定文件,可以手动指定 GS132 的典型参数:

source /opt/tros/humble/setup.bash

# 启动相机(带标定参数)
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
    channel:=0 \
    channel2:=2 \
    camera_info_url_left:="" \
    camera_info_url_right:=""

# 启动 StereoNet(指定标定参数)
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py \
    camera_fx:=500.0 \
    camera_fy:=500.0 \
    camera_cx:=320.0 \
    camera_cy:=220.0 \
    baseline:=0.06

GS132 典型参数参考:fx≈500, baseline≈60mm(需根据实际相机调整)

方案 3:重新运行标定流程

按照官方文档进行标定:

# 参考文档:https://developer.d-robotics.cc/rdk_doc/Robot_development/boxs/spatial/hobot_stereonet

# 1. 采集标定图像
ros2 launch hobot_stereonet stereo_calib_collect.launch.py

# 2. 执行标定
ros2 launch hobot_stereonet stereo_calib.launch.py

# 3. 生成标定文件
# 标定完成后会生成 calib.yaml

:clipboard: 验证步骤

# 1. 启动后检查节点是否存在
ros2 node list | grep StereoNet

# 2. 检查相机 info 话题
ros2 topic echo /image_combine_raw/left/camera_info --once
ros2 topic echo /image_combine_raw/right/camera_info --once

# 3. 确认 fx, fy, baseline 不为 0
ros2 topic echo /StereoNetNode/stereonet_depth/camera_info --once

# 4. 测试点云数据
ros2 topic echo /StereoNetNode/stereonet_pointcloud2 --once

:books: 相关社区资源

搜索更多 GS132 标定相关话题:

:bullseye: 问题根因已定位

从日志中看到关键错误

[StereoNetNode]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] : 
[0.000000, 0.000000, 312.265194, 442.958544, nan, 0.000000]

[StereoNetNode]: => Haven't received any camera info from topic /image_combine_raw/right/camera_info

核心问题

  1. 标定参数缺失fx=0, fy=0, baseline=nan(无效值)
  2. 右目 camera_info 丢失:StereoNet 收不到右目标定信息
  3. AWB OTP 数据异常:全部是 65535(相机 EEPROM 读取失败)

这导致 StereoNet 节点无法计算深度,最终崩溃退出。


:hammer_and_wrench: 解决方案

方案 1:加载官方标定文件(推荐)

GS132 官方相机应该有预置标定文件。检查并加载:

# 1. 查找标定文件
find /opt/tros -name "*calib*.yaml" -o -name "*132gs*.yaml"

# 2. 查看 mipi_cam 配置目录
ls -la /opt/tros/humble/lib/mipi_cam/config/

# 3. 如果有 calib.yaml,修改启动脚本加载它
# 编辑 run_stereo.sh 或启动命令,添加标定文件路径

方案 2:使用 custom 模式加载标定

参考社区案例 #34406

# 创建标定文件(需要官方提供或使用标定工具生成)
# 格式参考:/opt/tros/humble/share/hobot_stereonet/config/calib_example.yaml

# 启动时指定标定模式
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py \
  calib_method:=custom \
  stereo_calib_file_path:=/path/to/your/calib.yaml

方案 3:检查相机连接和 EEPROM

AWB OTP 数据全为 65535 说明相机 EEPROM 读取失败:

# 1. 重新插拔 MIPI 排线,确保连接牢固
# 2. 检查 I2C 通信
i2cdetect -y 4  # GS132 通常在 I2C bus 4
i2cdetect -y 6

# 3. 查看相机是否被正确识别
dmesg | grep -i "sc132gs\|mipi\|camera"

# 4. 重启相机服务
sudo systemctl restart hobot-camera

方案 4:使用官方 run_stereo.sh 脚本

不要手动启动,使用官方脚本(会自动处理标定):

# 进入示例目录
cd /opt/tros/humble/share/hobot_multimedia_samples/stereo_depth/

# 查看脚本内容,确认标定配置
cat run_stereo.sh

# 运行脚本(根据相机类型选择参数)
bash run_stereo.sh --mipi_channel 0 --mipi_channel2 2

:clipboard: 立即执行以下命令诊断

# 1. 查找标定文件
find /opt/tros -name "*.yaml" | grep -i "calib\|stereo\|132"

# 2. 检查相机配置目录
ls -la /opt/tros/humble/lib/mipi_cam/config/

# 3. 查看当前启动的 launch 文件内容
cat /opt/tros/humble/share/hobot_stereonet/launch/stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py | grep -A5 -B5 "calib"

# 4. 检查 I2C 设备
i2cdetect -y 4

:books: 参考社区资源

话题 内容
双目 MIPI 深度 Demo 离线标定文件使用问题 标定文件格式和加载方法
基于官方 132GS MIPI 双目相机运行双目 Demo 报错 GS132 类似问题讨论
自定义标定 SC230ai 段错误 标定文件加载注意事项

:warning: 关键提示

没有有效的标定参数(fx, fy, baseline),StereoNet 无法计算点云。这是设计行为,不是 bug。

请优先:

  1. 确认是否有官方标定文件
  2. 联系相机供应商获取 GS132 标定参数
  3. 或使用官方标定工具重新标定

把上述诊断命令的输出发出来,可以进一步帮你定位标定文件位置。