Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

可否增加支持外挂模块用于自定义OSD显示的功能? #47

Open
Easy4Racing opened this issue Apr 18, 2023 · 7 comments
Open
Labels
enhancement New feature or request
Milestone

Comments

@Easy4Racing
Copy link

Easy4Racing commented Apr 18, 2023

Is your feature request related to a problem? Please describe

我做了一个OSD计时器外设模块,使用Atmel328P作为MCU控制OSD芯片(AT7456),串接在摄像头和飞控之间,用于在视频信号上叠加计时信息。目前只支持模拟视频,想改进以支持HD图传

Describe the solution you'd like

计时器计划通过串口向飞控发送数据,以便飞控在OSD上显示计时信息。这就需要bf固件新增一个额外的MSP命令,便于外设通过该命令显示自定义的osd信息

Describe alternatives you've considered

看到git上有个项目ESP32-INAV-Radar,通过esp和飞控串口通讯,打算用类似方法在BF上实现我想要的功能。
这是ESP32-INAV-Radar项目中,向飞控(inav固件)发送显示雷达信息的命令:msp.command2(MSP2_COMMON_SET_RADAR_POS , &radarPos, sizeof(radarPos), 0);
MSP2_COMMON_SET_RADAR_POS是INAV特有的MSP命令ID

@DusKing1
Copy link
Contributor

没有看懂你想要干什么,请清晰描述你的需求,改动要求等

@Easy4Racing
Copy link
Author

没有看懂你想要干什么,请清晰描述你的需求,改动要求等

已更新,请看看我是否表达的清楚,谢谢~~

@shanggl
Copy link
Contributor

shanggl commented Apr 23, 2023

增加显示信息的目的,主要是为了在DVR上以OSD记录赛道每圈用时,分为:总时间 和上一圈时间。
当然这种记录方式主要是面向个人训练, 因为飞控、外设必然存在计时的误差,所以正规严肃的比赛是无法作为标准时间的。

飞控接到触发赛道开始信息(可以是红外/或者其他外设中断),飞控启动两个计时器的计时,并实施显示在OSD上
当再次触发开始信息,上一圈时间 清零, 总时间继续计时
当飞控触发N+1次起始时间后(可以实现设置比赛圈数N),总计时器和上一圈时间计时器均停止计时。

以上是否理解正确?

为什么不设计为计时器的输出直接显示在 OSD上?
初步考虑是飞控的实时性要求很高, 简单计时在飞控内实现所需资源比较少,如果高频的通过MSP 串口指令进行交互的话,有可能会干扰接收机等其他通过串口交互的外设通信,因此计时频率不应该超过10hz, 时间精度在秒级。
采用触发式计时的话,可以进一步简化外接外设的设计

还需要进一步讨论哪些信息?
需要确认实现理解是否正确,以及触发&交互的接口协议信息。

@Easy4Racing
Copy link
Author

Reference in

感谢回复,你的理解非常正确,我补充一些信息:
关于外设时间误差的问题,外设模块确实存在计时误差,但用作个人玩家训练使用还是比较有价值的,并且也可以通过时间同步来解决多外设一致性的问题;

考虑到飞控的复杂性以及我个人能力,没有选择将功能内置在飞控固件中,而是做个外挂设备,目前使用Arduino+红外触发;

外设发送MSP命令的频率非常低(比如单圈飞行时间10秒,也就是10秒才会交互,其他时间空闲或者以较低频率发送心跳,如5Hz心跳频率)。
交互频率不会影响外设的计时精度,因为OSD信息只是静态显示交互时刷新一次的计时信息(比如10秒),这条计时信息由外设生成的字符串。

@DusKing1
Copy link
Contributor

为什么不直接将单圈计时功能在飞控外部的计时器外设内实现?这样只需要每圈计时完成之后向飞控发送计时通告即可。

@Easy4Racing
Copy link
Author

Easy4Racing commented Apr 23, 2023

为什么不直接将单圈计时功能在飞控外部的计时器外设内实现?这样只需要每圈计时完成之后向飞控发送计时通告即可。

感谢回复。
是的,目前就是这么计划的。由外设负责计时,每圈完成后向飞控发送计时数据,由飞控显示在OSD。
所以需要与飞控通讯。我想到的是通过MSP命令,也可能有其他更好的方式。

期待您的回复。

@Easy4Racing
Copy link
Author

飞控只要显示外设提供的字符串,其他计时和统计等工作均由外设完成。

@shanggl shanggl added the enhancement New feature or request label Apr 25, 2023
@shanggl shanggl added this to the 4.3.3 milestone Apr 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants