Appearance
相机云台设计
更新提示
2025-11-06 最近完成了当前的云台镜头的设计,回看当前内容觉得也挺有意思的。一开始是为了方便采用 PWM 舵机,结果结构不稳+精度非常的差,后续有了 3D 打印机后自己打印了一个减速云台效果好了不少。最近回看阅兵,发现 LY-1 激光器非常适合改云台,期望能 LY-1 的结构做一个云台。我取名为龙眼一号
需求规划
从后续开发的角度上看,其实有点问题,云台和相机虽然是一个整体部分,但是应当作为两部分开发,云台的归云台,相机的归相机。尤其是需要做到接口解耦
计划制造一个先进的云台作为业余项目,初步考虑做一个双轴云台。那么先制定一个愿景
期望是精度越高越好,最好能做到 300 米外明确识别出人脸和车牌、定位天上飞行的客机和直升机、有良好的夜视能力、并且能进行拍摄月亮、星野(或捕捉国际空间站)和巡航监控等功能。并且能够通过激光测距、热成像、雷达、反差对焦(做着玩的)等方式实现自动对焦,通过 yolo 算法实现自动物体识别及 HDR 画质增强。并且能够通过 web 控制台实时查看监控效果、远程配置摄像头参数、视频后处理参数和遥控 STM32 云台运行
卡迪尔坐标系下
| 轴 | 称呼 | 英文 |
|---|---|---|
| X | 俯仰 | Pitch |
| Y | 偏航 | Yaw |
| Z | 横滚 | Roll |
目标
- 承重:考虑到空间尺寸的问题,系统总长应当小于 20cm,整体重量应该控制到 1KG 内
- 精度:最高焦段一次调整角度低于 25%,最好能做到弧分级别
- 分辨率:满足需求(?),需求极高的清晰度
- 云台运动:X/Y 轴需要大于 90 度
- 算法:自动调整最优曝光参数,带有 HDR 等功能
限制
- 空间尺寸应当小于 30x30x30
- 预算 3K 以内,这个其实有点超了
- 协议通用,linux+arm 也可以用
- 移动和拍摄噪音越低越好
- 由于拍摄条件限制(未清理的双层玻璃),可能无法布置太大的相机
云台功能
- 需要支持 RESTful 的 API
- 需要可调节方向和步长、死区
- 完成转换操作调整与欧拉角之间的关系
- 越过死区或操作分辨率时,自动调整
- 定时巡航,手动输角度或移动步数
软件功能
参数
- [ ] 自动标定行程
- [ ] 电控对焦
- [ ] 电控变焦
- [ ] 自动对焦
- [ ] 自动算法后处理
- [ ] 远程遥控
需求
感觉需要使用摄像头、云台、器件等模块配置 webAPI 控制接口+主控模块负责 web 统合显示转发的方式来展示。不过后续开发起来感觉存在大量的问题就是了,得完成多个运动模块的调参,基本上处于各做各的状态
摄像头模块
- [ ] 当前状态
- [x] 拍摄照片
- [ ] 自动化调控模块
- [ ] 参数配置
- [ ] 开启视频流
云台模块
当前方位角,死区以及移动速度
- [ ] 读取当前方位角 or 点位?
- [x] 指定移动角度、速度
- [x] 步进自适应参数控制
- [ ] 程序重启后读取当前位置?
主控模块
- [ ] web 显示方位,调整角度
- [ ] web 流式显示图片
- [ ] web 调整配置
- [ ] web 拍照按钮
- [x] 配置定时任务协议
实际分析
采用飞特的 PWM 360 度磁编码舵机,理论精度 4096(12 位),可操作分辨率为 2500-500=2000,实际分辨率客服说只有 0.5-1°,实测差不多。实际上这个看 pwm 比例和死区就知道了,2000us 的差距,死区 4us。基本上就会是 360/1024 的分辨率
需要注意的是,由于是 35KG 的高力矩舵,实际误操作的时候很容易出现挤压伤害。云台有死区。需要注意转轴中心与镜头延伸最大范围的距离,太长和旋转会存在撞击问题
从头来看的话,其实最大的问题是一开始就不应该选择简单的舵机承力结构,这样会有大幅抖动,应该用齿轮承重和正经类伺服电机驱动替代。而且图像、云台最好分离
定义
角度选择
- 偏航轴(X): 假定自上而下观看,0 度为正对前方,角度顺时针递增
- 俯仰轴(Y): 假定自右向左观看,0 度为正对前方,角度逆时针递增
选型
实际上来看,云台系统的摄像头选型实际上还是按照光学本质来做的。决定远距离分辨能力的就两个要素,像素尺寸和焦距,而由于镜头光学素质(1.5um 的尺寸能喂饱就很极限了)限制的缘故,基本上最多就是 C 口 185mm 5mp 1/1.8 的像场,或者是上全幅 200-400 的大炮镜头
实际上当前市场的 CMOS 也是非常的麻烦,小像场的 CMOS 基本就两条路,捡手机的剩饭(还是 USB,没有 RAW 的废物),要么就是用超级老旧 CMOS 的工业镜头。能找到的最新的镜头也就是 8MP 的 IMX678,而且我还不会硬件搞不了 mipi 摄像头
实际上现在的可选项基本上就是 1 寸的短一点的定焦头(120-185 左右) VS 1/1.8 的长焦镜头(185mm),纠结啊
目前工业相机用的比较多的类型是 c/cs 口的,高端的一般是 M58、M72 卡口以及尼康 f 口。使用通用 uvc 协议能买到的最好的摄像头是 imx477 的(买适马的话能 A7R5 同款),只有 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 和电子快门的单反(后续看 A7R2 够,但是镜头贵)。价格需要小于 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
- 索尼 A7R5:全幅 6100W 像素,数毛画质,自带四倍像素的摇摇乐(没有 16bit 和机内合成)。防抖的热噪较高,机内降噪无法关闭。10K
镜头选型
- 海康 35mm F1.4 1" 10MP 镜头:已有。算是综合最好的镜头,甚至只要 150
- 拆机 70mm F1.8 1" 8MP 镜头:只要 86 包邮(原价 860),还要什么自行车,测试效果 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+
- 索尼 GM 100-400mm F4 镜头。差不多要 10K,而且喂不满 A7R5
- 中联科创 120mm 12MP F3.5 镜头,C 口,400 凑合吧,号称 1200W 像素,对此有些怀疑。是能找到的最好的长焦镜头了
- 中联科创 15-185 5MP 镜头 1/1.8 C 口 800,有点贵啊,买来发现挺好玩的
算法实现
- 最重要的 debayer,没了就没法拍照了
- 曝光包围和反卷积超分辨率(CF-Net:多曝光图像融合及超分辨的联合实现?),尽可能提升信噪比。尽量实现 HDR+的效果,防止鬼影
- 图片拼接算法
- 白平衡和 gamma 矫正后期再说吧
- 去雾算法,远距离摄影大气雾霾很重要(存疑,暗通道先验的去雾算法疑似会造成巨大泛白)
开发笔记
逐步记录一些开发内容
整体进度和吐槽
早期树莓派的设计是怎么简单怎么来,所以我用的是非常简单的树莓派接入一个 PWM 驱动板,通过 POE 进行供电后遥控舵机直驱云台。而摄像头测试过 RapsberryHQ Camera(IMX477 1/2.3 的小底,效果很差),目前主力是海康的 MV-CS200-10GC(IMX 183,早期型背照式 1 寸 CMOS)
后续有了 3D 打印机和设计了部分零件后简单设计了一个 L 形由舵机驱动减速同步带的云台,虽然极端保守的采用了 2CM 的墙厚,但还是有点偏移,而且使用 BambuStudio 硬是使用标准零件来制造复杂的云台结构也过于难顶了。目前还是的得使用 SolidWorks 来做,Fushion360 功能不是很全,Blender 压根不合适做这个,就是得先解决版权问题
机械设计很重要
早期就是直接买的舵机云台,舵机直驱的那种,基本相当于硬掰,所以时不时镜头就会抖动一下
后续有了 3D 打印机之后参照云台结构搞了个 L 形的板子,为了硬度搞得 2cm 厚度+同步带组驱动舵机,结果发现有时候过紧配合了看上去不是很顺滑。实际上整体就不应该采用舵机而是用伺服电机比较合适。而且搞 L 型支架又为了兼容大镜头结果搞得末端下垂有点严重,最好做成 U 型支架
燎原版的设计考虑采用直驱电机,目前使用的是达妙的 3510CAN 总线直驱电机作为云台电机,飞特的 ST3032 总线舵机用来变焦和对焦。整体参照原型进行设计,使用交叉滚子轴承作为承力结构,双 U 立柱(空心+金属销增强),运动部分采用箱型分体架构
整体箱型部分是最难设计的,要考虑调平,符合外观和紧固。整体分为中央和上下前后五部分,而是不完全规整,中央有部分入侵到顶部和底部机匣。中央是半箱式加强骨架,负责承力和链接,前部是镂空的镜头外观件,后部考虑改为磁吸的尾盖方便检修。而顶部和底部的设计则更加麻烦,顶部机匣需要能够精密的安装大量的传感器和树莓派主控。底部机匣原计划安装 STM32 的主控板,但后续发现由于镜组空间过大,需要将镜头变焦机构侵入下机匣,空间很有限
软件设计
考虑到带宽成本很高,因此需要研究如何降低传输数据量
可以考虑调整传输内容,目前计划在树莓派上部署 ustreamer 或 GENI 的采集套件,最好能本地完成对数据的近源采集、加工和编解码处理,只需低带宽的传送 h265 内容即可(3588 还差不多...)
统一接口很重要
目前使用了很多种展示方式,有写入到目录下,使用 web 服务器展示和使用海康现有摄像头软件的方式。前两种方法很不方便看,海康软件虽然方便展示,但是自己需要研究如何实现
Picamera2 的坑感觉很多,感觉很难直接开发出一个合适的调用接口。UVC 更是令人头大,无法拿到底层的 RAW 数据,太废物了。工业相机的 GENI 倒是可以,但是工控相机的溢价约等于全新相机
而且目前树莓派的硬件也很孱弱,想做到高速(24hz)的处理并显示是基本不可能的