Appearance
相机云台设计
需求规划
目标
- 承重:单反+300mm+镜头
- 精度:最高焦段一次调整角度低于 25%
- 分辨率:满足需求(?)
- 算法:自动调整最优曝光参数,带有 HDR 等功能
限制
- 空间尺寸应当小于 30x30x30
- 预算 3K 以内
- 协议通用,linux+arm 也可以用
- 移动和拍摄噪音越低越好
- 由于拍摄条件限制(未清理的双层玻璃),可能不需要太高性能的相机
云台功能
- 需要支持 RESFful 的 API
- 需要可调节方向和步长、死区
- 完成转换操作调整与欧拉角之间的关系
- 越过死区或操作分辨率时,自动调整
- 定时巡航,手动输角度或移动步数
软件功能
参数
- [x] xy 轴选择
- [x] xy 轴前进方向
- [x] 舵机 pwm 波形范围
- [x] pwm 步长
- [x] 舵机活动角度
- [x] 舵机分辨率
- [x] 死区
- [x] 调整时间
需求
感觉应使用摄像头、云台、器件等模块配置webAPI控制接口+主控模块负责web统合显示转发的方式来展示
摄像头模块
- [ ] 当前状态
- [x] 拍摄照片
- [ ] 自动化调控模块
- [ ] 参数配置
- [ ] 开启视频流
云台模块
当前方位角,死区以及移动速度
- [ ] 读取当前方位角 or 点位?
- [x] 指定移动角度、速度
- [x] 步进自适应参数控制
- [ ] 程序重启后读取当前位置?
主控模块
- [ ] web 显示方位,调整角度
- [ ] web 流式显示图片
- [ ] web 调整配置
- [ ] web 拍照按钮
- [ ] 配置定时任务协议
实际分析
采用飞特的 PWM 360 度磁编码舵机,理论精度 4096(12 位),可操作分辨率为 2500-500=2000,实际分辨率客服说只有 0.5-1°,实测差不多
需要注意的是,由于是 35KG 的高力矩舵,实际误操作的时候很容易出现挤压伤害。云台有死区
需要注意转轴中心与镜头延伸最大范围的距离,太长和旋转会存在撞击问题
定义
角度选择
- 偏航轴(X): 假定自上而下观看,0 度为正对前方,角度顺时针递增
- 俯仰轴(Y): 假定自右向左观看,0 度为正对前方,角度逆时针递增
选型
目前工业相机用的比较多的类型是 c/cs 口的,高端的一般是 M58、M72 卡口以及尼康 f 口。使用通用 uvc 协议能买到的最好的摄像头是 imx477 的,只有 1/2.3",12MP,海康有个 cs200,imx183 1",20MP。再高端的工业相机一般就是 M43 或者是 ASP-C 画幅的了,很贵。不如直接购买单反二次开发
树莓派的hq camera的cmos是imx477,虽然靶面和像元尺寸,但可以曝光超过600s,同时是背照式+堆栈式。适合用来接C口长焦镜头补盲
IMX183(12.8x9.6 20MP 黑卡 II)像素相比同样 1 寸的 IMX989(50MP 小米 12SU)低很多,但是和最新的 IMX411(60x47 150MP 中画幅)比,像素密度都要小很多
镜头可以考虑现有 EF 镜头转接、或直接使用工业相机镜头。由于像素密度极高,asp-c 和全幅镜头无法直接与相机配对,且大光圈价格也高昂。海康 35mm 10MP f1.4 镜头只要 150,50mm 25MP f2.4 镜头只要 680。腾龙尼康口 28-300 3.5-6.3 的全幅镜头要 850。国产 50mm 夜神约要 600+,也许也可以考虑适马 art 的 f1.4 系列
由于放置位置限制,云台系统+镜头的最大大小需要控制在 30x30x30(cm)
实测单反镜头由于尺寸问题,调整范围相比小型工业镜头有限。85mm 焦距视角范围可以接受,但是光圈越大越好。f1.4 处于可接受范围
结合现有条件进行分析(imx183+35mm f1.4 10MP),目前曝光时间达到上限 2.5s,合适照度的增益需要提升至 8-12db。1 寸靶面下 10MP 分辨率的镜头足够精确到像素。就此可以得出以下结论
- 最大光圈应大于 F2.0,越高越好
- 焦距在 35-135mm(全画幅的 50mm,ASP-C 的 85mm) 均可接受,在 75mm 上下波动(极限视角应当大于 5°)
- 35mm 焦段: 1": 35mm、ASP-C: 24mm
- 50mm 焦段: 1": 50mm、ASP-C: 35mm、全幅: 18mm
- 75mm 焦段: 1": 75mm、ASP-C: 50mm、全幅: 27mm
- 100+mm 焦段: ASP-C: 75-150mm、全幅: 35-75mm
- 镜头单位分辨率应当大于 8mp
成像模块
预计可接受价格范围在 1-3K 左右,这个价格无法买到合适且高素质的单反(开发也麻烦)
由于单反的体积、开发难度和限制。希望有一个40MP以上像素、背照式堆栈全画幅、16bit RAW和电子快门的单反。价格需要小于5000(搁着做梦呢...)
由于价格限制,摄像机模块为 海康机器人 的 MV-CS200-10GC
- 芯片为
IMX183
靶面大小一寸
,分辨率5472 × 3648
,像元尺寸2.4um x 2.4um
(说得过去的水平,好歹是黑卡的传感器) - 动态范围
65.5 dB
,信噪比41.5 dB
,原生 ISO 为160
,模拟增益最大24 dB
,支持Bayer GB 12
(宣称信噪比马马虎虎,实际上底噪和读出噪声巨大) - 曝光时间
46us-2.5s
,支持 bining4 x 4
(曝光时间太短了,拍摄16张照片也就10s的曝光时间,16合一的分辨率又太低,只能大光圈了) - 带
千兆POE
,最大帧率6 FPS
(POE好评,但是由于传输的是raw,千兆能传输的帧率太低,很麻烦)
备选单反
- 佳能600D:残幅 1800W像素,优点是单反且现有
- 尼康D610:全幅 2400W像素,虽然是前照式,尼康调教很好。 2k
- 索尼A7R2:全幅 4200W像素,背照式。5k
尼康D810:全幅 3600W像素,背照式,一流宽容度。4.5k,前照式的丢人玩意,还没有双ISO- 尼康D850:全幅 4500W像素,顶级单反,高宽容度,除了没那么智能外堪称无敌。10K
- 索尼A7R4:全幅 6100W像素,数毛画质,自带四倍像素的摇摇乐(没有16bit和机内合成)。防抖的热噪较高,机内降噪无法关闭。10K
镜头选型
- 海康 35mm F1.4 1" 10MP 镜头:已有。算是综合最好的镜头,甚至只要 150
- 拆机 70mm F1.8 1" 8MP 镜头:只要 86 包邮,还要什么自行车,测试效果75mm焦段、F2.0完全可接受
大华 50mm F1.4(1.0 的确认没有了) 1.1" 9MP 镜头:海康镜头长焦版本,268。非常中庸的选择,要啥啥不行了属于是国产夜神 50mm(等效 84mm) F0.95 ASP-C 镜头:最大光圈,焦段合适。但是分辨率就难说了(锐度和色散有问题)。650g 左右适马 50mm(等效 135mm) F1.4 全画幅 镜头: OK 的光圈,长焦。重达 650g,ART 更好,但是价格翻倍。650。测试了一下,焦距不行- 大华 25mm F1.0 12MP镜头。900g的超级怪物,可以当做超快镜使用。400
- 海康 70mm F1.8 12MP镜头。廉价镜头的加强版,意义不明。300
- 普通 12-120mm F1.8-F3.0 3MP镜头。超长变焦,但是画质拉稀,好在超长焦质量本来就不太好,感觉不如70F1.8... 350
- 适马 135mm F1.8 ART 镜头。专为天文摄影设计的,画质很好,但是2KG重,而且要5000+
算法实现
- 最重要的debayer,没了就没法拍照了
- 曝光包围和反卷积超分辨率(CF-Net:多曝光图像融合及超分辨的联合实现?),尽可能提升信噪比。尽量实现HDR+的效果,防止鬼影
- 图片拼接算法
- 白平衡和gamma矫正后期再说吧
- 去雾算法,远距离摄影大气雾霾很重要
开发笔记
统一接口很重要
目前使用了很多种展示方式,有写入到目录下,使用web服务器展示和使用海康现有摄像头软件的方式。前两种方法很不方便看,海康软件虽然方便展示,但是自己需要研究如何实现
Picamera2的坑感觉很多,感觉很难直接开发出一个合适的调用接口
感觉框架应该分为三个部分,或者其实一个就行(只保留拍照一个接口,其他的自行处理)
- 拍照部分
- 格式
- 曝光
- 尺寸
- 开关部分
- 开启,关闭和重连。使用with表达式
- 设置部分
- 也可以不需要暴露
软件设计
考虑到带宽成本很高,因此需要考虑降低传输数据量
可以考虑调整传输内容
传输内容
- metadata长度:8个字节
- 元数据,json格式
- payload
- 结束符号
接口模组
摄像头参数设定
- format: raw, jpg
- size: full, auto
- expose: auto, (time, ISO)
摄像头读取
直接通过socket传输?异步全双工的效率感觉还是可以的。但是可能需要实现同步机制
云台读取
- 当前角度
- 活动范围
- 分辨率
云台控制
- 移动位置
- 速度限制
- 时间限制