weixin_73289782 2026-04-01 20:21 采纳率: 0%
浏览 6

NX上不显示usb摄像头设备了

在jetson orin NX上运行USB免驱摄像头,过去一年和上周都能成功开发使用,在做了一次用ros2自带的功能标定后卡黑屏,然后再也没办法识别到这个usb设备了。换了数据线、插口、NX设备和同款新的摄像头都不行。但是在Windows上能成功使用。真的不知道怎么办了

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-04-01 20:22
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你描述的问题是在 NVIDIA Jetson Orin NX 上无法识别 USB 摄像头设备,虽然在 Windows 系统上可以正常工作。这可能涉及到 USB 驱动、ROS2 配置、系统设置或硬件问题。以下是一个详细的排查与解决方案指南。


    🔍 一、问题分析

    1. 硬件层面

      • USB 接口是否损坏?(尝试更换不同 USB 接口)
      • 摄像头是否损坏?(尝试其他摄像头)
      • 数据线是否损坏?(尝试多根数据线)
    2. 系统层面

      • 是否因为 ROS2 标定操作导致驱动异常?
      • 是否因为内核模块加载失败?
      • 是否因为 udev 规则配置错误?
    3. 软件层面

      • 是否因为 libuvcv4l2 驱动未正确加载?
      • 是否因为 /dev/video0 设备节点没有被创建?

    ✅ 二、解决方案

    1. 检查 USB 设备是否被系统识别

    执行以下命令查看设备是否被识别:

    ls /dev/video*
    
    • 如果没有输出,则表示设备未被识别。
    • 尝试运行:
    dmesg | grep -i usb
    

    查看是否有 USB 设备连接的记录。如果有类似以下信息说明设备被识别了:

    [  123.456789] usb 1-1: new high-speed USB device number 3 using xhci-hcd
    

    如果没有相关记录,可能是硬件或驱动问题。


    2. 检查摄像头驱动是否加载

    运行以下命令查看是否加载了相关的 USB 摄像头驱动:

    lsmod | grep -i uvc
    
    • 如果没有输出,说明驱动未加载。
    • 可以尝试手动加载:
    sudo modprobe uvcvideo
    

    如果提示“no such module”,说明系统中缺少该驱动。


    3. 安装缺失的驱动和库

    Jetson 平台通常使用的是 Linux for Tegra (L4T) 内核,部分驱动可能需要手动安装。

    安装 libuvc 和 v4l2 工具:

    sudo apt update
    sudo apt install libuvc-dev v4l-utils
    

    然后测试摄像头:

    v4l2-ctl --list-devices
    

    如果看到你的摄像头设备,说明驱动已经正常。


    4. 检查 udev 权限问题

    确保用户有权限访问 /dev/video0

    ls -l /dev/video*
    

    如果权限为 root:root,则需添加用户到 video 组:

    sudo usermod -aG video $USER
    

    然后重新登录或重启。


    5. 检查 ROS2 相关配置

    由于你提到之前使用了 ROS2 的标定功能,可能影响了某些配置文件。

    a. 检查 camera_calibration 相关文件

    删除或重命名 ~/.ros/camera.yaml~/.ros/calibration/ 下的文件:

    rm -rf ~/.ros/camera.yaml ~/.ros/calibration/
    

    b. 重置 ROS2 配置

    有时候 ROS2 的配置会干扰设备识别,可以尝试重装 ROS2 或恢复默认配置。


    6. 检查内核版本和兼容性

    Jetson Orin NX 使用的是 Linux for Tegra (L4T),请确认当前使用的内核是否支持你的摄像头。

    你可以通过以下命令查看内核版本:

    uname -a
    

    如果内核版本过旧,建议升级到最新 L4T 版本。


    7. 修复 UVC 驱动(如需)

    如果你的摄像头是 免驱摄像头,可能需要手动启用 UVC 驱动。例如:

    sudo modprobe -r uvcvideo
    sudo modprobe uvcvideo
    

    如果仍然不行,尝试更新固件或修改 /etc/modprobe.d/blacklist.conf 文件,移除对 uvcvideo 的黑名单。


    🛠️ 三、代码示例(可选)

    如果你使用 ROS2 调用摄像头,可以参考以下代码片段来测试设备是否可用:

    import rclpy
    from rclpy.node import Node
    from sensor_msgs.msg import Image
    from cv_bridge import CvBridge
    import cv2
    
    class CameraNode(Node):
        def __init__(self):
            super().__init__('camera_node')
            self.declare_parameter('device_id', 0)
            self.device_id = self.get_parameter('device_id').get_value_or(0)
            self.cap = cv2.VideoCapture(self.device_id)
            if not self.cap.isOpened():
                self.get_logger().error("Failed to open camera")
                return
            self.bridge = CvBridge()
            self.publisher_ = self.create_publisher(Image, 'camera/image_raw', 10)
    
        def run(self):
            while rclpy.ok():
                ret, frame = self.cap.read()
                if ret:
                    msg = self.bridge.cv2_to_imgmsg(frame, "bgr8")
                    self.publisher_.publish(msg)
                else:
                    self.get_logger().warn("Camera frame not captured")
    
    def main(args=None):
        rclpy.init(args=args)
        node = CameraNode()
        node.run()
        rclpy.shutdown()
    
    if __name__ == '__main__':
        main()
    

    运行时指定设备 ID:

    ros2 run your_package camera_node --ros-args -p device_id:=0
    

    ⚠️ 四、总结

    | 问题类型 | 解决方案 | |----------|----------| | USB 接口问题 | 更换 USB 接口、数据线、摄像头 | | 驱动未加载 | 手动加载 uvcvideo 模块 | | 权限不足 | 添加用户到 video 组 | | ROS2 配置冲突 | 清理 .ros 目录 | | 内核不兼容 | 升级 L4T 内核版本 |


    📌 五、建议

    • 在进行任何系统更改前,备份重要数据。
    • 如果你不确定如何操作,建议使用 Jetson SDK Manager 升级系统。
    • 若以上方法无效,可能是 硬件故障,建议联系 NVIDIA 支持或送修。

    如有更多细节(如具体错误日志),欢迎补充,我可以进一步帮助你定位问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月1日