5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
12
返回列表 发新帖
楼主: liio
打印 上一主题 下一主题

不知道有没有人感兴趣, Pixhawk的一些中文开发文档

[复制链接]
21
 楼主| 发表于 2014-4-28 21:06 | 只看该作者
抓食者 发表于 2014-4-28 20:46
楼主是专门搞软件的吗?我看到博客里很多关于软件开发的文章

博客有部分i9300手机上传感器的native代码.  但很久都没有更新了.  你有兴趣我也可以share出来

欢迎继续阅读楼主其他信息

22
 楼主| 发表于 2014-4-28 21:08 | 只看该作者
爵爷 发表于 2014-4-28 20:26
那就是一个指针而已...不过估计不可能就一个单一的指针..

一般的封装过程无非就是两种, 1指针,指向自定义的一个上下文结构体, 2内核对象, 这个略复杂一点. 所以要进一步分析

23
发表于 2014-4-28 22:20 | 只看该作者
liio 发表于 2014-4-28 21:08
一般的封装过程无非就是两种, 1指针,指向自定义的一个上下文结构体, 2内核对象, 这个略复杂一点. 所以要 ...

指针可能性最大..内核对象貌似除了复杂没啥优点..C不熟...美版

24
 楼主| 发表于 2014-4-28 22:50 | 只看该作者
本帖最后由 liio 于 2014-4-28 22:53 编辑
爵爷 发表于 2014-4-28 22:20
指针可能性最大..内核对象貌似除了复杂没啥优点..C不熟...美版

看了下uORB的实现。 其内部就是一个虚拟的I/O节点+POLL接口
每次open时拉开一个定长buffer用来日后发布公告时存放数据。也就是要传输的数据。
而发布者只能以只写打开这个节点, 订阅者只能以只读打开(同一个节点)。 每次写完就用poll去通知那些读的订阅户

那么这个在linux中怎么移植呢.. 考虑了2种方案
1、 共享内存+信号, 设计一个数据结构  由头+负荷组成, 头中包含了消息的状态以及异步信号。 发布者创建这块共享内存,初始化相关的异步信号,订阅者打开这块内存,映射到自己空间  这样每个订阅户要访问发布者的信息时就可以直接像访问本地内存一样的使用拉。
当然,可以像uORB一样设计一个函数接口, 设定轮旬的频率~ 还美其名曰 ,“单独设置频率,而不影响其它的订阅”

2、我用的是a n droid linux,那么我可以直接用binder, binder也是基于共享内存,但自我封装了一层。 貌似我用作飞控不需要这么大的开销。

所以, 我只需要一个能够支持到1Khz周期通讯的玩艺就差不多了。 一般sensors采样都不到这么高的频率。 也就是我通讯一个PAGE_SIZE(4KB)在1ms内完成。  我不能在通讯周期内有任何的内核/用户模式切换,切换一次就要花10ms了。这样,我会优先选择第1种方案,因为我不清楚binder中的实现会不会导致模式切换。 而第一种方案 ,我想模式切换只会发生在处理异步信号上。 而异步信号并不常用(既然都需要等了, 那就无所谓延迟了。而sensors采样可以直接使用轮询+频率设定解决)

还有轮询时每次轮完直接调用nanosleep(0) 放弃下cpu  避免过高占用  调度下其他进程~~~    哎 非实时系统干这个活还真是坑爹~
补充说明下,  uORB重载了CDev对象 ,整个px4代码如果一定要用分层概念来描述的话 就是类似于linux的R0.  优势阿~~



25
发表于 2014-4-29 15:20 | 只看该作者
liio 发表于 2014-4-28 21:06
博客有部分i9300手机上传感器的native代码.  但很久都没有更新了.  你有兴趣我也可以share出来

博主太犀利了!!

如果我想开发pixhawk控制任务代码,博主任务应该从哪开始

26
 楼主| 发表于 2014-5-1 23:30 | 只看该作者
考虑了几个方案~
1. linux SysV IPC通信   - 失败
2. a n droid Ashmem 共享内存 - 失败

最后自己写了个内核模块, 实现了一套跨进程的通信来替代uORB.
20 bytes / 次的传输时 , 能达到180 KHz的频率
1K / 次 的传输时, 大约在160 KHz 的频率, 完全够用了。
测试环境是 ARM Linux - 三星 exynos 4412处理器
接口部分完全兼容uORB

实现了uORB就意味着剩下的模块可以完全照搬Pixhawk 而要做的仅仅是匹配下kernel以及hal部分
Pixhawk Linux 四轴又近了一步
27
发表于 2014-5-2 00:00 | 只看该作者
翻译总比不翻译好,不能因噎废食。
不是每个模友英语水平都好。
28
 楼主| 发表于 2014-5-2 00:04 | 只看该作者
kmani 发表于 2014-5-2 00:00
翻译总比不翻译好,不能因噎废食。
不是每个模友英语水平都好。

pixhawk代码之所以难看 和 这个uORB有很大的关系
uORB通俗来讲就是消息的流水线,  比如传感器把原始数据抛到这个流水线上 , 一个类似于采集器的东西把所有数据收集好打个包 然后再抛到另一条流水线. 最后融合器从这上面取出数据进行姿态等计算~  
除了通讯以外 , 也可以发送命令~
  有兴趣的可以延着uORB看下去 就 比较容易理解了

29
发表于 2014-5-2 00:10 | 只看该作者
关注,准备入手个玩玩

30
发表于 2014-5-2 02:42 | 只看该作者
liio 发表于 2014-5-2 00:04
pixhawk代码之所以难看 和 这个uORB有很大的关系
uORB通俗来讲就是消息的流水线,  比如传感器把原始数据 ...

十分感谢分享
没搞明白pix这么做的好处什么,好复杂的感觉

31
 楼主| 发表于 2014-5-2 07:16 | 只看该作者
kmani 发表于 2014-5-2 02:42
十分感谢分享
没搞明白pix这么做的好处什么,好复杂的感觉

流程是复杂了,但整体架构上比较清晰明朗.在以前的px4-imu时代,也就是他们重构前, 那份代码虽然直接,但sensor,姿态融合,mavlink等所有代码全部参杂在一起,非常不利于维护
px4-fmu是重构后的版本(v1开始重构). 重构后虽然复杂,但架构至少合理了一点.  起码不用担心他再重构了~ 因为目前看来架构上px4确实下了点功夫. 我就是被之前的imu坑了 之前没看到fmu的代码 直接把老的imu代码移植到linux 白搞了

32
发表于 2014-5-2 07:30 | 只看该作者
看看
33
发表于 2014-5-3 18:46 | 只看该作者
liio 发表于 2014-5-2 07:16
流程是复杂了,但整体架构上比较清晰明朗.在以前的px4-imu时代,也就是他们重构前, 那份代码虽然直接,但sen ...

楼主,我看那个代码确实有点蒙圈。
可否私聊,指点一二?
qq315302189

34
 楼主| 发表于 2014-5-3 20:06 | 只看该作者
抓食者 发表于 2014-5-3 18:46
楼主,我看那个代码确实有点蒙圈。
可否私聊,指点一二?
qq315302189

uORB 的分析总结我写在了 http://blog.arm.so/docs/183-0503.html今天把uORB的代码完整的移植到了linux , 只是为了Real-Time性能 所以内核重写而已,包括ORB_DEFINE这些宏定义。 用起来相当方便。 测了一遍 感觉不错~
从今起 ,就是大量的代码搬运工作了。体力活了


35
发表于 2014-5-5 22:16 | 只看该作者
liio 发表于 2014-5-3 20:06
uORB 的分析总结我写在了 http://blog.arm.so/docs/183-0503.html今天把uORB的代码完整的移植到了linux , ...

楼主,在px4代码开发的过程中,Git Github都起到了什么作用?
它们和所使用的开发环境什么关系?

36
发表于 2014-5-5 22:22 | 只看该作者
liio 发表于 2014-5-3 20:06
uORB 的分析总结我写在了 http://blog.arm.so/docs/183-0503.html今天把uORB的代码完整的移植到了linux , ...

或者具体一点说,咱们可以怎么运用它?
为什么px4的官网让安装Github?


37
发表于 2014-6-2 12:54 | 只看该作者
liio 发表于 2014-5-2 07:16
流程是复杂了,但整体架构上比较清晰明朗.在以前的px4-imu时代,也就是他们重构前, 那份代码虽然直接,但sen ...

pix是C语言编的吗?怎么出现了 class 和public啊,我看不懂百度了下发现是java里面的class MS5611 : public device::CDev{
public:






38
发表于 2014-7-13 13:37 | 只看该作者

樓主加油!支持你!


您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表