从你提供的截图来看,问题非常明确:脚本文件存在 Windows 换行符(CRLF)问题,导致 bash 无法正确解析。
问题诊断
错误信息分析:
'$\r': 未找到命令 → 典型的 Windows 换行符\r\n问题ros2: 未找到命令 → 环境变量未加载- 语法错误 → 换行符导致脚本解析失败
解决方案
步骤 1:转换脚本格式(关键)
# 安装 dos2unix 工具
sudo apt install dos2unix
# 转换脚本格式(去除 Windows 换行符)
dos2unix /home/sunrise/文档/run_cam.sh
# 如果没有 dos2unix,也可以用 sed
sed -i 's/\r$//' /home/sunrise/文档/run_cam.sh
步骤 2:检查并修改脚本内容
# 查看脚本内容
cat /home/sunrise/文档/run_cam.sh
# 确保第一行是正确的 shebang
head -1 /home/sunrise/文档/run_cam.sh
# 应该是:#!/bin/bash 或 #!/usr/bin/env bash
步骤 3:正确执行脚本
根据错误信息,脚本中引用了 /opt/tros/humble/setup.bash,需要确保环境变量已加载:
# 方式 A:先加载环境,再运行脚本
source /opt/tros/humble/setup.bash
bash /home/sunrise/文档/run_cam.sh --image_width 1920 --image_height 1080 --rotation 0.0 --cal_rotation 0.0 --log_level INFO
# 方式 B:修改脚本,在开头自动加载环境
# 编辑 run_cam.sh,在第一行后添加:
# source /opt/tros/humble/setup.bash
步骤 4:检查脚本权限
# 确保脚本有执行权限
chmod +x /home/sunrise/文档/run_cam.sh
# 然后可以直接运行
/home/sunrise/文档/run_cam.sh --image_width 1920 --image_height 1080
针对 230AI MIPI 相机的额外建议
根据社区案例 [34656],使用官方 230AI MIPI 双目相机时:
- 推荐使用官方启动方式:
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py
- 检查标定参数:
ls /opt/tros/humble/lib/mipi_cam/config/
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
- 系统版本确认:
cat /etc/horizon_version
# 建议 3.1.1 或更高版本
快速验证
执行完上述步骤 1-4 后,重新运行你的脚本。如果还有问题,请补充:
# 1. 系统版本
cat /etc/horizon_version
# 2. 脚本内容(前 20 行)
head -20 /home/sunrise/文档/run_cam.sh
# 3. 相机是否被识别
ros2 topic list | grep camera
建议:如果这是从 Windows 复制过来的脚本,建议以后使用 git clone 或 scp 传输文件,避免换行符问题。脚本格式问题在 Linux 开发中很常见,dos2unix 是必备工具。
恭喜脚本格式问题已解决!
但现在图像显示灰色,说明相机节点没有正常输出图像数据。
问题诊断
灰色图像 = 无数据流,可能原因:
- 相机节点未正确启动
- 图像话题没有发布数据
- 启动参数不匹配
- 硬件连接问题
系统排查步骤
步骤 1:确认相机话题是否有数据
# 加载环境
source /opt/tros/humble/setup.bash
# 查看所有相机相关话题
ros2 topic list | grep camera
# 检查图像话题是否有数据(关键!)
ros2 topic hz /image_raw
# 或者双目相机话题
ros2 topic hz /stereo0/left/image_raw
ros2 topic hz /stereo0/right/image_raw
预期结果:应该显示发布频率(如 30.0 Hz),如果显示 0.0 Hz 说明无数据。
步骤 2:使用官方推荐方式启动 MIPI 相机
根据你的 230AI MIPI 双目相机,不要使用自定义脚本,改用官方启动命令:
# 方式 A:双目相机标准启动
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py
# 方式 B:如果方式 A 不行,尝试添加 lpwm 参数(社区案例反馈有效)
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py mipi_lpwm_enable:=True
步骤 3:验证图像数据
启动相机节点后,在新终端检查:
# 查看图像话题
ros2 topic list | grep image
# 查看话题信息
ros2 topic info /stereo0/left/image_raw -v
# 查看图像数据(按 Ctrl+C 退出)
ros2 topic echo /stereo0/left/image_raw | head -20
步骤 4:在 rviz2 中正确订阅话题
# 启动 rviz2
rviz2
# 在 rviz2 中:
# 1. 点击 "Add" → 选择 "Image"
# 2. Topic 选择:/stereo0/left/image_raw 或 /stereo0/right/image_raw
# 3. 如果还是灰色,检查 Fixed Frame 是否设置为 camera_link 或 base_link
步骤 5:检查硬件连接和系统状态
# 检查系统版本
cat /etc/horizon_version
# 建议 3.1.1 或更高
# 检查相机设备是否被识别
ls -l /dev/video*
# 查看 dmesg 日志中是否有相机相关错误
dmesg | grep -i camera
dmesg | grep -i mipi
快速尝试方案
按顺序执行以下命令:
# 1. 终止所有 ros2 节点
killall -9 ros2
# 2. 重新加载环境
source /opt/tros/humble/setup.bash
# 3. 启动 MIPI 双目相机(带 lpwm 参数)
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py mipi_lpwm_enable:=True
# 4. 在新终端检查话题频率
ros2 topic hz /stereo0/left/image_raw
请补充以下信息
如果上述步骤后仍是灰色图像,请提供:
# 1. 系统版本
cat /etc/horizon_version
# 2. 相机话题列表
ros2 topic list | grep -E "camera|image"
# 3. 话题频率(启动相机节点后)
ros2 topic hz /stereo0/left/image_raw
# 4. dmesg 中的相机相关日志
dmesg | tail -50
关键提示:根据社区案例 [28778],MIPI 相机启动时添加 mipi_lpwm_enable:=True 参数可以解决部分图像抓取失败问题。建议优先尝试这个参数。
把你的排查结果补充到帖子中,这样能更快定位问题!
同样的问题再次出现!
你的 run_stereo.sh 脚本也存在 Windows 换行符问题,和之前的 run_cam.sh 是同一个原因。
批量解决方案
步骤 1:一次性修复所有脚本
# 安装 dos2unix(如果还没安装)
sudo apt install dos2unix
# 批量转换文档目录下所有脚本
dos2unix /home/sunrise/文档/*.sh
# 或者手动指定文件
dos2unix /home/sunrise/文档/run_cam.sh
dos2unix /home/sunrise/文档/run_stereo.sh
步骤 2:验证转换结果
# 检查文件是否还有 Windows 换行符
file /home/sunrise/文档/run_stereo.sh
# 正确输出应该包含:ASCII text executable(不应该有 CRLF)
# 或者用 cat -A 查看(行尾应该是 $ 而不是 ^M$)
cat -A /home/sunrise/文档/run_stereo.sh | head -10
步骤 3:强烈建议 - 使用官方启动命令
不要依赖这些自定义脚本,直接使用官方推荐的启动方式更可靠:
# 加载环境
source /opt/tros/humble/setup.bash
# 启动 MIPI 双目相机(官方标准方式)
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py mipi_lpwm_enable:=True
# 启动 StereoNet 深度算法
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int8.launch.py
为什么建议用官方启动命令?
| 自定义脚本 | 官方启动命令 |
|---|---|
快速验证流程
# 1. 修复所有脚本
dos2unix /home/sunrise/文档/*.sh
# 2. 终止所有 ros2 节点
killall -9 ros2
# 3. 使用官方命令启动相机
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py mipi_lpwm_enable:=True
# 4. 在新终端检查图像数据
ros2 topic hz /stereo0/left/image_raw
# 应该显示 30.0 Hz 左右的频率
# 5. 启动 StereoNet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int8.launch.py
长期建议
- 避免从 Windows 直接复制脚本到板卡
- 使用
git clone或scp传输文件 - 在板卡上直接用
vim或nano编辑脚本 - 优先使用官方提供的 launch 文件,而非自定义脚本
请先执行步骤 1 修复所有脚本,然后尝试官方启动命令。如果还有问题,请补充:
# 系统版本
cat /etc/horizon_version
# 相机话题频率
ros2 topic hz /stereo0/left/image_raw
# StereoNet 启动日志(前 30 行)
# 启动后复制输出
把排查结果补充到帖子中,这样社区能更快帮你解决问题!
问题定位:StereoNet 收不到相机图像数据
从错误日志看,核心问题是:StereoNet 节点没有收到相机图像,导致 hobot_codec_republish 报错。
排查步骤
步骤 1:检查相机节点是否正常启动
# 加载环境
source /opt/tros/humble/setup.bash
# 查看正在运行的节点
ros2 node list
# 应该能看到 mipi_cam 或类似名称的节点
步骤 2:验证相机话题是否有数据
# 查看所有图像相关话题
ros2 topic list | grep -E "image|camera"
# 检查左目图像话题频率(关键!)
ros2 topic hz /stereo0/left/image_raw
# 检查右目图像话题频率
ros2 topic hz /stereo0/right/image_raw
预期结果:应该显示 30.0 Hz 左右。如果显示 0.0 Hz 或 No messages received,说明相机没有正常发布数据。
步骤 3:检查 StereoNet 订阅的话题
根据错误日志,StereoNet 期望的话题是 /StereoNetNode/stereonet_visual,但相机发布的是 /stereo0/left/image_raw,话题不匹配!
# 查看 StereoNet 节点信息
ros2 node info /StereoNetNode
# 查看它订阅了哪些话题
ros2 topic list | grep stereonet
步骤 4:使用正确的启动顺序
必须先启动相机,再启动 StereoNet:
# 终端 1:启动 MIPI 双目相机
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py mipi_lpwm_enable:=True
# 等待 3 秒,确认相机启动成功
# 终端 2:验证相机有数据
ros2 topic hz /stereo0/left/image_raw
# 确认显示 30.0 Hz 后再继续
# 终端 3:启动 StereoNet
source /opt/tros/humble/setup.bash
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int8.launch.py
步骤 5:检查系统版本(关键)
根据社区案例 [33972],这个问题在旧版本系统中常见:
# 检查系统版本
cat /etc/horizon_version
建议:如果是 3.1.1 之前的版本,建议升级系统镜像。
快速验证方案
按顺序执行以下命令:
# 1. 终止所有 ros2 节点
killall -9 ros2
sleep 2
# 2. 重新加载环境
source /opt/tros/humble/setup.bash
# 3. 启动相机(单独启动,先不启动 StereoNet)
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py mipi_lpwm_enable:=True &
# 4. 等待 5 秒,检查话题
sleep 5
ros2 topic hz /stereo0/left/image_raw
# 5. 如果有数据(显示 30.0 Hz),再启动 StereoNet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int8.launch.py
请补充以下信息
如果上述步骤后仍有问题,请提供:
# 1. 系统版本
cat /etc/horizon_version
# 2. 正在运行的节点列表
ros2 node list
# 3. 所有图像话题
ros2 topic list | grep image
# 4. 左目图像话题频率
ros2 topic hz /stereo0/left/image_raw
# 5. StereoNet 节点信息
ros2 node info /StereoNetNode
关键提示:
- 确保先启动相机,确认有数据后再启动 StereoNet
- 检查系统版本,旧版本可能存在兼容性问题
- 如果话题不匹配,可能需要修改 StereoNet 的配置文件
把排查结果补充到帖子中,这样能更快定位问题!
你好,请先确认系统版本与Tros版本是否满足需求 双目深度算法 | RDK DOC




