你对视频防抖了解多少?首先映入脑海的是云台?亦或是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文件,可打印
同上
线材
这是放假的那几天我写的,现在实在是连不起思路了,如果有空,我重写一下。
联系客服