Aurora930深度相机使用问题

各位大佬,目前在参加二十一届地瓜创意赛,比赛任务有巡线避障、扫码、图生文等,之前是用单目相机完成的这些例程,现在加了一个Aurora930深度相机,是应该两者一起用吗?调用关系应该是什么样呢?还有就是,有佬知道哪里有这个深度相机的功能包资源吗

1 个赞

你好!欢迎参加地瓜创意赛。关于 Aurora930 深度相机与单目相机的配合使用,我给你一个清晰的方案:

:package: 功能包获取

Aurora930 的官方驱动功能包是 deptrum-ros-driver-aurora930,获取方式:

# 1. 确认已添加 d-robotics 源
sudo apt update

# 2. 安装驱动包
sudo apt install ros-humble-deptrum-ros-driver-aurora930

如果源里没有,可以从社区帖子中获取源码编译:

:bullseye: 多相机使用方案

结论:两者可以一起用,但需要独立节点管理

推荐架构

单目相机 (USB/CSI)  →  /camera/color/image_raw
                        ↓
                    你的算法节点
                        ↑
Aurora930 深度相机  →  /camera/depth/image_raw
                       /camera/depth/camera_info

调用关系

# 示例:同时订阅两个相机话题
from rclpy.node import Node
from sensor_msgs.msg import Image

class MultiCameraNode(Node):
    def __init__(self):
        super().__init__('multi_camera_node')
        
        # 订阅单目相机
        self.color_sub = self.create_subscription(
            Image, '/camera/color/image_raw', self.color_callback, 10)
        
        # 订阅深度相机
        self.depth_sub = self.create_subscription(
            Image, '/camera/depth/image_raw', self.depth_callback, 10)
    
    def color_callback(self, msg):
        # 处理巡线、扫码等任务
        pass
    
    def depth_callback(self, msg):
        # 处理避障、距离测量等任务
        pass

:wrench: 任务分配建议

任务 推荐相机 原因
巡线 单目相机 颜色识别更准确,处理速度快
扫码 单目相机 二维码识别不需要深度信息
避障 Aurora930 需要精确距离信息
图生文 单目相机 VLM 模型通常基于 RGB 图像

:warning: 常见问题排查

  1. 深度图像全为 0

  2. heartbeat failed 报错

  3. 多相机带宽不足

    • 降低单目相机分辨率或帧率
    • 深度相机可适当降低发布频率

:books: 推荐学习资源


建议:先把 Aurora930 单独调通,确保深度图能正常发布,再逐步融合到你的现有代码中。遇到问题可以把报错信息发到社区,大家会帮你一起排查!

需要我帮你查找更具体的某个功能的实现示例吗?

深度相机会发布这样几个话题,请问要怎么和单目相机配合使用呢

1 个赞

看到你提供的 Aurora930 话题列表了!我帮你整理一个精确的订阅和融合方案

:satellite_antenna: 话题订阅方案

1. 基础订阅代码

from rclpy.node import Node
from sensor_msgs.msg import Image, CameraInfo
from sensor_msgs_py.point_cloud2 import read_point_cloud
import cv2
from cv_bridge import CvBridge

class MultiCameraFusion(Node):
    def __init__(self):
        super().__init__('multi_camera_fusion')
        self.bridge = CvBridge()
        
        # 存储最新数据
        self.color_img = None
        self.depth_img = None
        self.rgb_time = None
        self.depth_time = None
        
        # 订阅 Aurora930 RGB
        self.aurora_rgb_sub = self.create_subscription(
            Image, '/aurora/rgb/image_raw', self.aurora_rgb_callback, 10)
        
        # 订阅 Aurora930 深度
        self.aurora_depth_sub = self.create_subscription(
            Image, '/aurora/depth/image_raw', self.aurora_depth_callback, 10)
        
        # 订阅单目相机(假设话题名)
        self.mono_sub = self.create_subscription(
            Image, '/camera/color/image_raw', self.mono_callback, 10)
        
        # 定时器处理融合数据
        self.timer = self.create_timer(0.033, self.fusion_callback)  # 30Hz

2. 回调函数实现

    def aurora_rgb_callback(self, msg):
        self.color_img = self.bridge.imgmsg_to_cv2(msg, 'bgr8')
        self.rgb_time = msg.header.stamp
        
    def aurora_depth_callback(self, msg):
        self.depth_img = self.bridge.imgmsg_to_cv2(msg, '16UC1')
        self.depth_time = msg.header.stamp
        
    def mono_callback(self, msg):
        self.mono_img = self.bridge.imgmsg_to_cv2(msg, 'bgr8')
        self.mono_time = msg.header.stamp

3. 时间同步融合(关键!)

    def fusion_callback(self):
        # 检查数据是否就绪
        if self.color_img is None or self.depth_img is None:
            return
        
        # 时间同步检查(允许 50ms 误差)
        time_diff = abs(self.rgb_time.nanoseconds - self.depth_time.nanoseconds)
        if time_diff > 50000000:  # 50ms
            self.get_logger().warn(f'RGB-D 时间不同步:{time_diff/1e6:.1f}ms')
            return
        
        # 方案 A:使用 Aurora930 的 RGB+Depth 做避障
        obstacle_dist = self.get_obstacle_distance(self.depth_img)
        
        # 方案 B:使用单目相机做巡线/扫码
        if self.mono_img is not None:
            line_info = self.detect_line(self.mono_img)
            qr_code = self.decode_qr(self.mono_img)
        
        # 决策融合
        self.make_decision(obstacle_dist, line_info, qr_code)

:bullseye: 任务 - 话题映射表

比赛任务 推荐话题 原因
巡线 /camera/color/image_raw (单目) 单目帧率更高,颜色识别快
扫码 /camera/color/image_raw (单目) 二维码识别不需要深度
避障 /aurora/depth/image_raw 精确距离测量
避障 /aurora/point_cloud 3D 障碍物检测
图生文 /aurora/rgb/image_raw Aurora930 的 RGB 质量更好
SLAM /aurora/depth/image_raw + /aurora/rgb/image_raw RGB-D SLAM

:wrench: 完整示例:避障 + 巡线融合

    def make_decision(self, obstacle_dist, line_info, qr_code):
        # 优先级:避障 > 巡线 > 扫码
        if obstacle_dist < 0.5:  # 50cm 内有障碍
            self.stop_and_turn()
        elif line_info is not None:
            self.follow_line(line_info)
        elif qr_code is not None:
            self.process_qr(qr_code)
        else:
            self.keep_moving()
    
    def get_obstacle_distance(self, depth_img):
        # 取图像中心区域的深度值
        h, w = depth_img.shape
        center_region = depth_img[h//2-50:h//2+50, w//2-50:w//2+50]
        min_dist = cv2.minMaxLoc(center_region)[0]
        return min_dist / 1000.0  # 转换为米(假设深度单位是 mm)

:warning: 重要注意事项

1. 话题命名空间冲突

如果你的单目相机也发布 /camera/... 话题,需要修改其中一个的命名空间:

# 方法:在启动文件中添加 namespace
<node pkg="camera_driver" exec="camera_node" namespace="mono_camera">

2. 带宽优化

Aurora930 同时发布 RGB+Depth+IR+PointCloud 会占用大量 USB 带宽:

# 如果不需要点云,可以关闭
# 修改 launch 文件或参数
ros2 param set /aurora930_node publish_point_cloud false

3. 时间同步问题

如果两个相机时间戳差异大,使用 message_filters

from message_filters import Subscriber, TimeSynchronizer

    def __init__(self):
        # ...
        rgb_sub = Subscriber(self, Image, '/aurora/rgb/image_raw')
        depth_sub = Subscriber(self, Image, '/aurora/depth/image_raw')
        
        self.ts = TimeSynchronizer([rgb_sub, depth_sub], queue_size=10)
        self.ts.registerCallback(self.sync_callback)

:books: 参考资源


下一步建议

  1. 先单独测试 Aurora930 的每个话题是否正常发布
  2. rviz2 可视化深度图和点云
  3. 再逐步融合到你的巡线代码中

需要我帮你写一个完整的融合节点示例吗?或者有其他具体问题?

古月居社区/ OriginCar手册 / 或者直接百度应该都能找到这个功能包资源 , Aurora930深度相机用于避障或者建图是一个比较合理的使用方式,具体可以让大模型给一些方案