crossa 发表于 2017-3-11 20:33 不错, 现在我使用的数码管,液晶,都是i2c, 连接线少,还省单片机计算资源。 |
payne_pan 发表于 2017-3-11 20:20 你说的有系统和无系统的两个硬件之间,最佳融合方式其实是有的,比如超声波应用,以市面上常见的能买到的4.5元的模块来说,如果直接挂载到有系统的设备上,就是开个进程在那儿一直跑着,如果要融合,也简单,裸机程序,计算量又不大,但是需要控制循环一直循环着,这类事交给单片机来解决,无非就是走通信协议和主机通信呗。融合方式依然和普通的设备一样,但是处理起来更简单! |
crossa 发表于 2017-3-11 20:15 多谢! 回头看了px4firmware,还要找你多交流。 |
payne_pan 发表于 2017-3-11 20:05 你参考下px4firmware,这个程序全程用户态,所以也就没有所谓“实时性”问题,而且我都说了哪个实时性是个伪命题,本就是个使用ORB机制的东西,说白了就是让发布、读取、处理三个动作分配到更多时间而已。目前市面上的Linux飞控,没有一个把姿态处理塞进内核的,内核里只是加些模块做设备映射而已 ,但这也是不方便的地方,飞他们的固件,连系统都不能轻易升级了。‘ 后台任务只有一种情况能得到多的时间片: 大运算量(CPU占用多) 高IO 这类后台任务通常是数据库、承压的服务器之类的服务,而且都是面临巨大的访问量时,才会出现,当下的飞控上,暂时还不会有那么复杂的应用场景,就算以后有了,硬件绝对都已经升级好几代了。估计也早不是问题 |
本帖最后由 payne_pan 于 2017-3-11 20:08 编辑 crossa 发表于 2017-3-11 19:58 多谢,过去经验大多在 libc之上, 术业有专攻,对kernel还是缺乏深入理解。(但我绝对没想过把飞控做到kernel, 只是想了解哪些方式能够避免过多在用户态和 kernel态切换) |
本帖最后由 payne_pan 于 2017-3-11 19:53 编辑 难得遇到能一起热烈讨论的,我把问题分层下面几个方面 (先写几个,后面想到再加),看能否一起讨论,加深对飞控的认识 1)纯用户态进程(不用在用户空间和kernel空间切换)效率高 (以前用过futex),所以飞控用这种方式 那么os,还需要打rt补丁否? 2) 传感器是否需要编写驱动,提供文件句柄操作? 3) 等待唤醒常用 select,进程通信用pipe 或 binder 都要靠操作系统调度 这里面都有线程,进程的调度。 (用android大量使用binder的情况看,够快,很少延迟,应该满足要求) 4) 图像海量数据处理,是否该利用gpu (我过去曾用 cpu 运行 mesa,速度慢的要命,因为cpu是通用的,而gpu是针对图像的) (后面想到再加上) |
本帖最后由 payne_pan 于 2017-3-11 19:59 编辑 crossa 发表于 2017-3-11 10:43 我没有不赞成操作系统,反而是支持的。关键是融合 你说cpu处理图形快,我不这么认为,图形处理快是有GPU, 没GPU, cpu 不看重负 既然依靠操作系统了,就要享受kernel的服务,接收它的管理。 你把用户态的进程说得很强大,我要好好查资料(因为用户态进程正在运行,突然有个低电压异常,操作系统会先处理哪个?,操作系统运行特权级别,向操作系统索要高优先级中断,看os是否允许) 多谢指教!大部分内容,我是赞成的。 大家在严格的思考中都能获得进步。 |
caosix2 发表于 2017-3-10 23:36 多谢指教! 这部分要研究还是要花时间的。 |
本帖最后由 payne_pan 于 2017-3-11 08:16 编辑 crossa 发表于 2017-3-10 23:38 linux需要打实时补丁, 即便打了,上下文,进程切换也要花点时间, 但这点时间对于高速度的cpu不算什么, 实时补丁的作用应该是改善任务的调度机制 如果是轮询的设备 (传感器读取应该是轮询),cpu主动去读 如果是中断io, 用中断处理 如果视频处理是低优先级的,飞控是高优先级的,如果飞控处理误入死循环,就会干扰视频处理。(高通的飞控程序运行在 dsp 上,不知道是如何和操作系统结合的?) 完全死机倒是不用担心, 因为进程都隔离和保护了,大不了就是一个进程完蛋再重启。 |
如果要是冗余运行,应该多路同时运算,就是MCU IMU这些都是平行多路运算通过引入仲裁机制判定哪路故障,从而无缝切换,有几点注意1:系统内避免或减少“单点”。2:多路并行计算,应该至少三组并行运算,最简单的仲裁方法如三路运算做比较,少数服从多数。 |
本帖最后由 crossa 于 2017-3-10 23:57 编辑 关于实时性的问题,操作系统不会干扰实时性的,反过来说,甚至可以强化实时性,优先把时间片分配给用户空间的程序,当下Linux、nuttx系统就是这么干的。 所谓的非实时性,是有条件的,不是说什么程序都不是实时的。 飞控有操作系统绝对是有好处的,高度集成化,反而成本来的低,不用搭很多模块上天,等于是把服务器飞到天上去了,飞行只是副产品。 而且有个优势是无操作系统的飞控比不了的,那就是多处理器协同工作,无操作系统的驾驶仪,你想这么干?你能写出调度多个运算核心的算法时,等于是在做操作系统的事。 关于稳定性,我可以这么说:只要别碰微软的东西(当然这几年有改善)有操作系统的东西出故障的概率和无操作系统出故障的概率是一样的。有操作系统的,普通故障更容易排除! 最重要的是进入智能化时代之前,系统是一定要普及的,只不过系统未必是当下系统的形态。否则结果就和当年苏联搞运放电路不搞集成电路一样 |
payne_pan 发表于 2017-3-10 09:25 片选 信号 当然是 【主 处理器】 发出哟 。要做 冗余 —— 难度不小 —— 以三个 单元为例: 1、如何判断 某个 处理器单元 有异常 : 简单的说 2:1 表决 + 基础逻辑判定。 2、如何确保 这个 表决器 本身 没有发生异常 。 3、如何确保 切换电路本身 也 没有发生异常 。。 考核 冗余系统倒是 很简单——故意搞坏 某个单元 看系统输出 是否稳定 。 |
caosix2 发表于 2017-3-9 23:35 多谢指教! CS 选择由cpu发出吧? 如果主 cpu 失效,如何切换到备份 cpu? |
payne_pan 发表于 2017-3-7 15:10 ![]() SPI 是靠 片选信号CS 来搭配的 :时钟, 数据输出,数据输入 这三根线 主、从器件直接并联。 但是:每一个 “从”设备 都有单独的 片选CS 。 ![]() |
magong 发表于 2017-3-8 00:05 多谢指教! 看来趋势可能是 树莓派处理图像 而后和 pixhawk 通信, 中间的协议还要完善下 |
基本上,飞控本身是不需要 Linux 那样的操作系统的。 Linux 基本上是用来做图像的东西。 飞控还是简单的点的一个单独的 MCU 来做比较容易 满足实时的要求,而且代码也容易维护。 图像部分数据量大很多然后帧率相对飞控也低很多。 用高性能CPU,linux 之类来处理有一定优势,主要是系统比较完备。 |
colt1981 发表于 2017-3-7 10:57 我的理解是: 如果系统简单, 循环,中断代码,内存,自己还控制得过来,就不用操作系统。 但如果系统很复杂,个人都需要编写 内存分配,任务调度,文件管理这些代码的时候,就必须用成熟的操作系统。 操作系统让人恐慌的是你使用os服务了,但你不知道它具体如何服务。 另外请教下: 假设我用 spi连接了 4个 同样陀螺仪( 4 备份 ) 1) 我如何读取, 顺序读取 4次? 2) 我主cpu失效,我如何判断,从而启动备份 cpu来读。 (相关代码逻辑,pixhawk里面应该有,还没来得及看) |
![]() |
payne_pan 发表于 2017-3-7 09:03 要不要操作系统这个问题工业/军用无人机界也都在争论,传统的从载人机发展来的无人机应用一般是无操作系统,各个子系统都是独立模块并且利用冗余保证最大可靠性,单一系统失效不会影响整套系统安全。玩具无人机还是用操作系统性价比更高并且简单,反正摔了也就那几个钱。 |