2026/4/6 2:25:37
网站建设
项目流程
1. 为什么海康相机的255个预置点不够用预置点功能是监控相机最实用的特性之一。简单来说预置点就是相机把当前的云台角度水平转动、垂直俯仰、镜头变焦倍数、对焦距离等参数保存下来并赋予一个编号。需要时只需调用对应编号相机就能自动转到预设的位置和焦距。这个功能在固定监控场景中完全够用——一个商场门口可能只需要保存5-8个关键视角。但巡检机器人完全不同。我去年参与的一个变电站项目机器人需要巡视的设备区域超过2万平方米。按每5米设置一个检测点计算至少需要400个预置点。更麻烦的是某些精密设备需要多角度检测主变压器要保存顶部、正面、侧面共3个预置点断路器需要保存闭合和断开两种状态的预置点。实测下来255个预置点在第一天调试时就爆满了。2. 突破限制的核心思路传统方案是换用更高端的相机但成本会成倍增加。经过多次测试我们发现关键矛盾在于预置点本质是空间换时间的方案——它把调试好的参数存储在相机本地换取快速调用的便利性。但相机SD卡存储空间有限海康官方设定的255上限就是基于这个限制。对于巡检机器人其实有个天然优势机器人自带大容量硬盘。我们的解决方案是把PTZ三轴参数Pan水平旋转、Tilt垂直俯仰、Zoom变焦从相机转移到机器人硬盘存储。这样每个预置点只需要保存水平角度0°-360°垂直角度-30°-90°变焦倍数1x-30x按float类型存储每个参数占4字节一个预置点仅需12字节。1GB硬盘空间就能存储约9000万个预置点完全不存在数量限制。3. 具体实现方案3.1 带云台相机的参数获取海康带云台相机通过SDK的NET_DVR_GetSTDConfig函数获取PTZ参数关键代码如下NET_DVR_PTZABSOLUTEEX_CFG ptz_cfg; memset(ptz_cfg, 0, sizeof(ptz_cfg)); ptz_cfg.dwSize sizeof(ptz_cfg); NET_DVR_STD_CONFIG std_cfg {0}; std_cfg.lpOutBuffer ptz_cfg; std_cfg.dwOutSize sizeof(ptz_cfg); BOOL ret NET_DVR_GetSTDConfig(lUserID, NET_DVR_GET_PTZABSOLUTEEX, std_cfg); if(ret){ float pan ptz_cfg.struPTZCtrl.fPan; //水平角度 float tilt ptz_cfg.struPTZCtrl.fTilt;//垂直角度 float zoom ptz_cfg.struPTZCtrl.fZoom;//变焦值 }3.2 普通相机的参数获取老款不带云台的相机需要使用NET_DVR_GetDVRConfig接口NET_DVR_PTZPOS ptz_cfg; memset(ptz_cfg, 0, sizeof(ptz_cfg)); DWORD bytes_returned; BOOL ret NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_PTZPOS, 1, ptz_cfg, sizeof(ptz_cfg), bytes_returned); if(ret){ WORD pan ptz_cfg.wPanPos; //水平角度 WORD tilt ptz_cfg.wTiltPos;//垂直角度 WORD zoom ptz_cfg.wZoomPos;//变焦值 }3.3 参数存储优化技巧在实际项目中我们采用CSV格式存储预置点参数例如点位ID,设备编号,Pan值,Tilt值,Zoom值,备注 1001,A12-3,45.23,-12.56,5.0,主变压器顶部 1002,A12-3,90.0,0.0,8.0,主变压器正面这种结构有三个优势可直接用Excel编辑支持添加自定义字段便于版本管理4. 实际应用中的注意事项4.1 相机自动功能配置由于我们只存储PTZ参数需要确保相机开启以下自动功能自动对焦避免每次调用预置点后手动调焦自动白平衡不同光照环境下色彩一致自动曝光适应白天/夜晚的光线变化在SDK中通过NET_DVR_SetCameraCfg配置NET_DVR_CAMERAPARAMCFG config; memset(config, 0, sizeof(config)); config.byAutoFocus 1; //开启自动对焦 config.byAutoIris 1; //开启自动光圈 config.byAutoWhiteBlance 1; //自动白平衡 NET_DVR_SetCameraCfg(lUserID, 1, config);4.2 移动过程中的防抖处理巡检机器人移动时会产生震动我们总结出两个经验到达目标点后延迟2秒再调取预置点设置云台移动速度不超过30°/秒通过NET_DVR_SetPTZSpeed控制4.3 异常处理机制在代码中需要处理以下异常情况相机断连时自动重试3次云台被手动干预时重置位置光照突变时触发曝光重新调整我们开发的ROS节点中就包含状态监测模块当检测到异常时会自动暂停任务并上报中控系统。5. 方案效果对比指标传统方案本方案预置点数量上限255个理论无限制调用速度200-300ms300-500ms存储位置相机SD卡机器人硬盘维护难度需连接相机修改直接编辑文本文件适用场景固定监控移动巡检虽然调用速度稍慢多出约200ms但对于巡检机器人完全可接受——机器人移动到位本身就需要5-10秒。我们在某数据中心项目实测用这套方案将检测点从原来的180个扩展到2000个完整巡检周期从4小时缩短到1.5小时。