222 lines
5.1 KiB
Markdown
222 lines
5.1 KiB
Markdown
|
|
# USB 相机故障排查指南
|
|||
|
|
|
|||
|
|
## 问题:MV_CC_StartGrabbing 失败,错误码 0x80000006 (MV_E_RESOURCE)
|
|||
|
|
|
|||
|
|
### 错误含义
|
|||
|
|
资源申请失败,通常是 USB 带宽不足或系统资源限制导致。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 快速解决方案
|
|||
|
|
|
|||
|
|
### 方法 1:使用启动脚本(推荐)
|
|||
|
|
|
|||
|
|
项目提供了自动配置脚本,会自动设置环境变量和 USB 内存:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用启动脚本运行(自动配置环境)
|
|||
|
|
sudo ./run_server.sh
|
|||
|
|
|
|||
|
|
# 或者先配置环境,再运行
|
|||
|
|
source ./setup_mvs_env.sh
|
|||
|
|
sudo ./DroneScrewServer
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法 2:手动配置
|
|||
|
|
|
|||
|
|
如果启动脚本不可用,手动执行以下步骤:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 设置环境变量
|
|||
|
|
export MVCAM_SDK_PATH=/path/to/SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113
|
|||
|
|
export LD_LIBRARY_PATH=$MVCAM_SDK_PATH/lib/aarch64:$MVCAM_SDK_PATH/lib/aarch64/ThirdParty:$LD_LIBRARY_PATH
|
|||
|
|
|
|||
|
|
# 2. 配置 USB 内存(需要 root)
|
|||
|
|
sudo sh -c 'echo 2000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
|
|||
|
|
|
|||
|
|
# 3. 运行程序
|
|||
|
|
sudo ./DroneScrewServer
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 详细解决方案
|
|||
|
|
|
|||
|
|
### 1. 环境变量配置(必须)
|
|||
|
|
|
|||
|
|
MVS SDK 需要以下环境变量:
|
|||
|
|
|
|||
|
|
- `MVCAM_SDK_PATH`:SDK 根目录
|
|||
|
|
- `LD_LIBRARY_PATH`:包含 SDK 的 .so 库路径
|
|||
|
|
|
|||
|
|
**检查环境变量**:
|
|||
|
|
```bash
|
|||
|
|
echo $MVCAM_SDK_PATH
|
|||
|
|
echo $LD_LIBRARY_PATH
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**缺失的库文件**:
|
|||
|
|
如果运行时提示找不到 `.so` 文件,检查以下路径:
|
|||
|
|
- `SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113/lib/aarch64/`
|
|||
|
|
- `libMvCameraControl.so` (主库)
|
|||
|
|
- `libGCBase_gcc494_v3_0.so`
|
|||
|
|
- `libGenCP_gcc494_v3_0.so`
|
|||
|
|
- 等其他依赖库
|
|||
|
|
|
|||
|
|
- `SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113/lib/aarch64/ThirdParty/`
|
|||
|
|
- `libavutil.so.60.8.100`
|
|||
|
|
- `libswscale.so.9.1.100`
|
|||
|
|
|
|||
|
|
### 2. USB 内存配置(必须)
|
|||
|
|
|
|||
|
|
USB 相机需要足够的 USB 内存缓冲区:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看当前配置
|
|||
|
|
cat /sys/module/usbcore/parameters/usbfs_memory_mb
|
|||
|
|
|
|||
|
|
# 设置为 2000 MB(推荐值)
|
|||
|
|
sudo sh -c 'echo 2000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**永久配置**(重启后生效):
|
|||
|
|
```bash
|
|||
|
|
# 编辑 /etc/default/grub
|
|||
|
|
sudo nano /etc/default/grub
|
|||
|
|
|
|||
|
|
# 添加或修改 GRUB_CMDLINE_LINUX_DEFAULT
|
|||
|
|
GRUB_CMDLINE_LINUX_DEFAULT="quiet usbcore.usbfs_memory_mb=2000"
|
|||
|
|
|
|||
|
|
# 更新 grub
|
|||
|
|
sudo update-grub
|
|||
|
|
sudo reboot
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 权限问题(必须)
|
|||
|
|
USB 相机在 Linux/ARM 平台需要 root 权限或配置 udev 规则。
|
|||
|
|
|
|||
|
|
**临时方案**:
|
|||
|
|
```bash
|
|||
|
|
sudo ./DroneScrewServer
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**永久方案**:配置 udev 规则
|
|||
|
|
```bash
|
|||
|
|
# 创建 udev 规则文件
|
|||
|
|
sudo nano /etc/udev/rules.d/99-mvs-camera.rules
|
|||
|
|
|
|||
|
|
# 添加以下内容(根据实际相机 VID/PID 调整)
|
|||
|
|
SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", MODE="0666"
|
|||
|
|
|
|||
|
|
# 重新加载 udev 规则
|
|||
|
|
sudo udevadm control --reload-rules
|
|||
|
|
sudo udevadm trigger
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. USB 带宽优化
|
|||
|
|
|
|||
|
|
#### 方案 A:降低分辨率
|
|||
|
|
在配置文件 `config/config.xml` 中调整:
|
|||
|
|
```xml
|
|||
|
|
<Camera serialNumber="..." exposureTime="10000" gain="5.0"
|
|||
|
|
width="1280" height="720"/> <!-- 从 1920x1080 降低到 1280x720 -->
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 方案 B:降低帧率
|
|||
|
|
代码已自动限制为 30fps,如仍有问题可进一步降低:
|
|||
|
|
```cpp
|
|||
|
|
// 在 MvsDevice.cpp OpenDevice() 中修改
|
|||
|
|
MV_CC_SetFloatValue(m_handle, "AcquisitionFrameRate", 15.0f); // 降至 15fps
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 方案 C:调整像素格式
|
|||
|
|
使用更低带宽的像素格式(如 Mono8 代替 RGB8):
|
|||
|
|
```cpp
|
|||
|
|
// 在打开设备后添加
|
|||
|
|
MV_CC_SetEnumValueByString(m_handle, "PixelFormat", "Mono8");
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. USB 控制器检查
|
|||
|
|
|
|||
|
|
#### 检查 USB 版本
|
|||
|
|
```bash
|
|||
|
|
lsusb -t
|
|||
|
|
```
|
|||
|
|
确保相机连接到 USB 3.0 端口(SuperSpeed)。
|
|||
|
|
|
|||
|
|
#### 检查 USB 设备列表
|
|||
|
|
```bash
|
|||
|
|
lsusb | grep -i camera
|
|||
|
|
# 或
|
|||
|
|
lsusb | grep -i hikvision
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 检查 USB 带宽占用
|
|||
|
|
```bash
|
|||
|
|
cat /sys/kernel/debug/usb/devices
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 系统资源检查
|
|||
|
|
|
|||
|
|
#### 内存检查
|
|||
|
|
```bash
|
|||
|
|
free -h
|
|||
|
|
```
|
|||
|
|
确保有足够的可用内存(建议至少 500MB 空闲)。
|
|||
|
|
|
|||
|
|
#### USB 缓冲区调整
|
|||
|
|
```bash
|
|||
|
|
# 增加 USB 缓冲区大小
|
|||
|
|
echo 128 > /sys/module/usbcore/parameters/usbfs_memory_mb
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 其他 USB 设备
|
|||
|
|
断开其他占用带宽的 USB 设备(如 USB 存储、USB 网卡等)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 调试步骤
|
|||
|
|
|
|||
|
|
1. **确认权限**:先用 `sudo` 运行,确认是否为权限问题
|
|||
|
|
2. **查看日志**:检查详细的错误信息(宽度、高度、帧率)
|
|||
|
|
3. **降低参数**:逐步降低分辨率/帧率,找到可工作的配置
|
|||
|
|
4. **检查硬件**:更换 USB 线缆、USB 端口
|
|||
|
|
5. **系统优化**:调整 USB 缓冲区、关闭不必要的服务
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 推荐配置(ARM 平台)
|
|||
|
|
|
|||
|
|
### 低带宽配置(稳定优先)
|
|||
|
|
```xml
|
|||
|
|
<Camera serialNumber="..."
|
|||
|
|
exposureTime="10000"
|
|||
|
|
gain="5.0"
|
|||
|
|
width="1280"
|
|||
|
|
height="720"/>
|
|||
|
|
```
|
|||
|
|
- 分辨率:1280x720
|
|||
|
|
- 帧率:15-30 fps
|
|||
|
|
- 像素格式:Mono8 或 YUV422
|
|||
|
|
|
|||
|
|
### 高质量配置(性能优先)
|
|||
|
|
```xml
|
|||
|
|
<Camera serialNumber="..."
|
|||
|
|
exposureTime="10000"
|
|||
|
|
gain="5.0"
|
|||
|
|
width="1920"
|
|||
|
|
height="1080"/>
|
|||
|
|
```
|
|||
|
|
- 分辨率:1920x1080
|
|||
|
|
- 帧率:30 fps
|
|||
|
|
- 像素格式:RGB8
|
|||
|
|
- **要求**:USB 3.0 + 充足带宽
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- 设备驱动:`Device/MvsDevice/Src/MvsDevice.cpp`
|
|||
|
|
- 配置文件:`App/DroneScrewbolt/DroneScrewServer/config/config.xml`
|
|||
|
|
- SDK 文档:`SDK/Device/MVS/MVS_STD_V3.0.1_251113/`
|