打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Sony multi+FlowBox

你对视频防抖了解多少?首先映入脑海的是云台?亦或是Pr内功能强大的增稳插件?那你有没有想过这样的想法,你可以在拍摄视频的时候将当前的相机位姿也同步的记录下来?后期可以通过一种算法按照位姿矫正回来?听起来有点awesome对吗?事实上GoPro已经拥有了这种技术,那我们平民窟蓝孩子可以整一个不?

国际惯例先放图,以下在我喊停之前都是,姜主任的朋友圈内容,看他的朋友圈最近一直在搞这个东西。

他的a6300,上面是个bf的飞控(MCU+陀螺仪)

可以看到随着相机的晃动,bf地面站也在同步发生改变

同时也记录了,控制相机的元件的制作吐槽(焊点光滑)

由于对Sony的协议来讲,是双向的,所以就有协议的握手等处理,可以看到已经(差不多,可能)调试通了。

LOED屏幕

这里使用了一个OLED的屏幕来做交互

今日最新成果,基本上原型就是这样了

https://github.com/DusKing1

这里放上他的Github地址,欢迎Star~

第一个就是,至于为什么不在自己的仓库下面,下面他也给了解答

大佬很专业,说话点到为止

https://github.com/gyroflow/flowshutter

这个是他目前的工作,我接下来会阅读一下内容。

Flowshutter 是一个用 micropython 编写的自定义相机遥控器。

它可以同步摄像机的视频记录和运动记录器的黑匣子记录(在大多数情况下是带有闪存芯片或 SD 卡的 betaflight/emuflight 控制器)。

它旨在与 gyroflow 软件一起使用,为您提供最佳的开源视频稳定体验。

其测试机器是A6300,完美工作

支持的飞控

最后请记住这句话

授权很有讲究,搞钱前先想想这东西怎么来的,要不要给人家奶一口

开始看内容:

这里写了一些通信参数,应该是飞控板和ESP32的通信参数

接下来是数据的解包操作,也可以说精华中的精华:

<Device address> <Length> <Type> <Payload> <CRC>

设备地址+长度+类型+载荷(就是具体的信息)+校验

有个单词好像不太理解sam,好像是错的?应该是same。

啧,天天GT看热闹看还没怎么学过这东西

直接好像把人家修改了。。。谢姜主任不骂之恩

具体内容在此

给个例子RX->FC(飞控)

CRC8:MSB 优先  poly = (1)11010101 = 0xD5

剩下是相机的部分,比较重要:

- 1: Power on/off (triggerd by shorting to ground)- 2: GND (without circuit it's NC)- 3: Video out- 4: Audio L out- 5: Audio R out- 6: Select ( 100k 电阻 GND)- 7: UART_TX- 8: UART_RX- 9: NC- 10: 3V

这个很重要的,因为我查资料,Sony一开始这个叫LANC协议,当然现在也是这个协议,不过有一些改变。我的机器老,估计不受影响。

和相机的连接参数

得,写得够好了,我觉得没有必要翻译,Are you OK?

啊,我看会儿代码,再写剩下的。

代码我看了下没什么高难度的地方,但是注意去学习构造数据包:

这是全部

函数无参,返回了两个byte

 def to_bytes(self, length: SupportsIndex, byteorder: Literal["little", "big"], *, signed: bool = ...) -> bytes:

接着看硬件的初始化:

就一个函数,俩串口,一个I2C,俩按键,上拉一下。下面返回对象,要解包处理一下,我觉得。

确实是解包了,下面就是显示了

分辨率是128x32的

这些是UI,可以去对视频,都可以对上

OLED初始化,就搞正事了,下面是引脚和FC的初始化(可能写错了)

下面这块看上面,文档有说明,和SONY的相机沟通用的

变量初始化,好习惯

先看按钮,我习惯是全局变量加g_前缀

拉面拉下来,易懂(代码就是要易懂)

定时器用上了,老哥用定时器了,展开讲讲了得

注意这里得回调,按键得检测使用了定时器

https://docs.micropython.org/en/latest/library/machine.Timer.html?highlight=timer#machine.Timer

先上文档

参数5ms,定时器以通道的配置频率定期运行。

你的代码中需要依赖到回调函数的使用(比如事件处理器、等待后台任务完成后的回调等), 并且你还需要让回调函数拥有额外的状态值,以便在它的内部使用到。

回调函数就是一个通过函数名调用的函数。如果你把函数的名字(地址)作为参数传递给另一个函数,当这个参数被用来调用其所指向的函数时,我们就说这是回调函数。

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

上面是对回调函数的描述和解释,概念往往都显得生涉拗口,不易理解.

简单来说,我们可以这样理解回调,A实现了A1函数和A3函数,B实现了B2函数,B2函数接收一个函数名字作为参数,然后在B2内执行这个函数.

在实际应用时,A1函数调用了B2,B2函数接收函数A3作为参数,在B2内部执行A3函数,A3就是回调函数.

简单来说,具体执行得哪个函数就是回调函数。回调函数,其实就是在参数中定义函数,调用时,回到主函数去调用这个函数

但是有些函数( function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)

在一个时刻下,执行了一个函数,这个函数在调用的时候又唤醒了一个相关的函数,这个被唤醒的相关函数就是回调函数。回调函数通常和应用处于同一抽象层(因为传入什么样的回调函数是在应用级别决定的)。而回调就成了一个高层调用底层,底层再回过头来调用高层的过程。就好像是这个定时器的函数,这个定时器就是给时间节拍的,然后调用的函数却是高层的。

回调实际上有两种:阻塞式回调和延迟式回调。两者的区别在于:阻塞式回调里,回调函数的调用一定发生在起始函数返回之前;而延迟式回调里,回调函数的调用有可能是在起始函数返回之后。延迟式回调通常牵扯到多线程。

回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。这个角度是说明了执行的顺序,主函数执行在回调函数才会执行

最早的小FC

很明显有多功能接口

就当我看了眼运动相机的接口

我的相机

后面有接口

看15

看多样的接口

装配图

长接口

兼容的相机

接口线

快门线

还可以输出视频

这个接口图可能更详细

STL文件,可打印

同上

线材

这是放假的那几天我写的,现在实在是连不起思路了,如果有空,我重写一下。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
西门子PLC FC和FB用法讲解
西门子1200系列PLC用户程序结构
TIA中定时器的应用
从S7-300-400到S7-1500看变址寻址的改变
300PLC带接口的FC
近期爆火的Meta Learnjng,遗传算法与深度学习的火花,再不了解你就out了(附github...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服