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

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
楼主: scaple

UAV 地面站软件开发平台 Control Station Studio (306楼 重要功能实现 9.12

  [复制链接]
 楼主| 发表于 2013-9-7 19:30 | 显示全部楼层
点击查看详情
本帖最后由 scaple 于 2013-9-7 19:31 编辑
liangdyc 发表于 2013-9-7 19:18
您好,我已经可以自己写命令获取数据了。还得谢谢你哦。
这是我获取的一段数据
我可以知道哪几位是哪些数据。查了一下MAVLINK协议文档。是利用的IEE745表示浮点数。所以想转换到浮点数来看,可是发现转换后的数据不对。
例如roll为: 6A 44 73 BB。转换后为:59373995582784778000000000.000000

你直接用 memcpy() 把 6A 44 73 BB 复制到一个 float 变量中去看看是不是以弧度表示的滚转角,如果不是的话,说明是别的地方错误。等我吃晚饭给你看看代码去。
另外说一句,你这种解析数据的方法是“硬解析”,前面我也贴过代码的,但这个不是简单的方法。你可以研究下 mavlink 里面是如何解析msg的。



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

 楼主| 发表于 2013-9-7 23:05 | 显示全部楼层
仅仅是有了下行的 RC_Ch1 数据是不足以完成通道一的校准工作的,毕竟,RC_Ch1 只是代表了遥控器通道一的实际输出数值,要完成遥控器通道校准工作,还必须获取通道一输出的最大值、最小值以及中点数值,获取上述数值之后,上行发送至APM进行数据装订,这样才能够完成校准的全过程。

类似的,我们要为RC_Ch1输出范围内的最大值、最小值、中点值创建总想数据项,依然是进入数据总线编辑器中使用和前面类似的方法进行创建,如下图:

5.JPG


但是不同的是,此次创建的 RcCh1_MAX、RcCh1_MIN、RcCh1_MID 三条总线数据,他们的总线数据类型为“状态总线”,而非前面RC_Ch1 的类型“数值总线”。

数值总线与状态总线顾名思义,分别用于表示数值型数据和状态型数据,在数据总线编辑器分别绿色和橙色表示。但要特别注意,这两类总线的最大区别在于,状态总线能够进行Mavlink二次动态关联,也就是说该总线数据能够与代表APM/ArduPlane机载参数数值的机载参数总线(有时候也简单的称为“远端总线”)建立起单向数据联系。数据传输的方向为:机载参数总线(远端总线) ---> 系统数据总线(本地总线)。之所以要这样做,一是可以实时反映机载参数的数值(当然,前提条件是通讯链路不能中断,否则地面上的你怎么可能知道天上飞机的某项参数呢?);二是限于通讯链路在进行上行数据传输的时候并不是100%可靠(下行也是一样),地面为飞机装订的参数不一定能够装订成功,设置两个总线数据分别用于反映地面、飞机的同一数值,对及时了解地面与飞机在同一参数的一致性上有很大的帮助。

到这里,认真思考的TX可能有疑问了,既然上面说到的数据传输是单向的,那么CSS如何进行机载参数的数据装订呢?这个问题问得好,CSS为机载参数上行装订准备了至少3种方法:
1、通过数据帧复用直接发送数据帧进行参数装订,这种是最生猛直接的装订方式,但是比较复杂繁琐,有点像汇编语言编程。
2、通过机载参数装订Grid装订ArduPlane当中200多个中的任意个。类似于MP当中的Adv Parameter List,如下图:

6.JPG

3、通过“远端总线数据装订”机制,将系统总线(本地总线)上的数值装订到机载参数总线(远端总线),这种方法的优势在于,在本地总线与远端总线之间形成了闭环回路,同时还可利用数据处理通道对闭环回路进行数据运算处理,从而能够实现远端数据总线与本地数据总线之间形成自动化或半自动化的闭环控制。

好像说多了点哈,本地总线与远端总线机制是CSS的核心内容之一,也是功能最强的大一部分,当然啦,稍微有点点复杂啦…

言归正题,在总线编辑器中分别将总线数据项RcCh1_MAX与0x64 RC1_MAX,RcCh1_MIN与0x62 RC1_MIN,RcCh1_MID与0x63 RC1_TRIM 建立起Mavlink 二次数据关联。注意,这几个数值代表的是远端机载数据参数的数值。

完成了上述工作之后,接下来的问题是,如何从RC_Ch1 数值范围中获取最大值与最小值。人工确定?当然可以,推动遥控器通道一的控制杆,记下最大值最小值值后填入“参数装订Grid”中进行上行装订。但这是个笨办法。CSS还有更好的方法,那就是利用“公式编辑器—数据处理通道”来自动进行获取。

简单的说,在CSS的数据总线之上还有一个数据处理通道,数据总线上的数值在经过数据处理通道时,如果事先使用公式编辑器设置了以总线数据项为运算变量的多个公式表达式,则经过连续运算后的数值将重新返回数据总线。

7.JPG


比如说我们要从RC_Ch1 数值范围中获取最大值 RcCh1_MAX,ok,如下表达式轻松搞定:
RcCh1_MAX = if(RC_ch1>RcCh1_MAX , RC_ch1, RcCh1_MAX)
这个表达式的含义解释一下,如果RC_ch1>RcCh1_MAX成立,则RC_ch1 赋值给RcCh1_MAX,否则RcCh1_MAX不变。

如此这般,建立接下来的两个表达式:
RcCh1_MIN = if( RC_ch1<RcCh1_MIN ,RC_ch1 ,RcCh1_MIN)
RcCh1_MID = (RcCh1_MIN+RcCh1_MAX)/2

保存,OK啦,一旦CSS开始运行,RcCh1_MAX、RcCh1_MIN什么的就能够从RC_ch1变化范围中自动获取。
这个问题就此搞定。

接下来的最后一个问题,如何才能够把RcCh1_MAX、RcCh1_MIN、RcCh1_MID的数值上行装订到APM/Arduplane上面去?点那个按钮呢进行发送呢?同学你又错了!CSS不提供现成的手段,而是提供实现手段的方法。CSS提供的是渔,而不是鱼。

点那个按钮进行发送,那个按钮是大是小,是圆是方,完全由你自己来决定。这就要通过CSS当中的“触发条件—动作响应”机制来实现。CSS当中如果出现了符合预设条件的“条件—动作”组合,则该组合加入到动作队列当中。系统会在每个循环周期检查动作队列,如果队列中存在元素(“条件—动作”),则执行该组合中预设的动作,执行完毕后从队列中清除该元素,直到队列为空。该机制有点类似于Windows当中的消息相应机制。

动作编辑器:

8.JPG

待续……喘口气先……



发表于 2013-9-8 00:14 | 显示全部楼层
不错  开源还是闭源?
 楼主| 发表于 2013-9-8 00:41 | 显示全部楼层
NeoLu 发表于 2013-9-8 00:14
不错  开源还是闭源?

哈哈哈,你的问题和 3D Robotics Inc 的软件总监 Craig Elder 问我的问题一样。

因为这个是集体的项目,所以我无法决定它开源与否,但我可以肯定的是,合适的时候,会有一个免费版推出。


发表于 2013-9-8 01:21 | 显示全部楼层
scaple 发表于 2013-9-8 00:41
哈哈哈,你的问题和 3D Robotics Inc 的软件总监 Craig Elder 问我的问题一样。

因为这个是集体的项目 ...



没感觉比  ArdupilotMegaPlanner 有啥更好的地方呀。

发表于 2013-9-8 09:38 | 显示全部楼层
师兄威武,飞场不错啊,通用性地面站是个很大的工程
 楼主| 发表于 2013-9-8 11:26 | 显示全部楼层
NeoLu 发表于 2013-9-8 01:21
没感觉比  ArdupilotMegaPlanner 有啥更好的地方呀。

您这个问题问得非常好。

简单的说,MP提供的是鱼,而CSS提供的是渔。MP是现成GCS,而CSS是用于构建各种不同类型GCS的平台。
因为不同发展阶段,不同用途的UAV对GCS提出的要求及运用关注的重点是各不相同的,用一陈不变的GCS来应对显然是不合适的。

在设计之初我就在反复考虑一个问题,为什么极少有人用LabView来搭建GCS,答案很简单,不适合。既然这一块暂时算个不大不小的空白,那我们就在这个领域借鉴LabView的理念,做一点探索性的工作。

我的目标是CSS接下来不仅仅能作为无人机/车/船的控制,还能作为诸如智能家居一类的控制中心,甚至,要是拿来作路边炸弹网络的智能控制中心估计也可以,哈哈哈。

CSS是以仪表控件可视化编辑方式来搭建GCS操作界面,目前只实现了原设计当中1/3左右的控件种类,后续将继续实现。但即便如此,目前的CSS已经可以实施有效飞行控制,对此我个人是很满意的,这充分说明了CSS架构的有效性和高效性。

热烈欢迎大家展开想象的翅膀,天马行空,给我提出更多的意见和建议,以利于CSS的后续推进。谢谢!




 楼主| 发表于 2013-9-8 11:33 | 显示全部楼层
本帖最后由 scaple 于 2013-9-8 11:39 编辑
阿咕 发表于 2013-9-8 09:38
师兄威武,飞场不错啊,通用性地面站是个很大的工程

近期阴雨连绵,里面路是越来越烂,水坑是越来越深,就怕那天一个不小心就陷在里面了。

20130825_183433.jpg


你要早回来一天我就可以带你进去了,不过这个要求对你有点残酷阿,你还是老实呆着吧。

等软件整利索了就可以整硬件了,不过任何简单的问题放到通用化的环境下面就都不是简单的问题了。一个功能,专用地面站里面可能1、2小时就能搞定,CSS里面得1、2天甚至一周。




发表于 2013-9-8 12:16 | 显示全部楼层
scaple 发表于 2013-9-8 11:33
近期阴雨连绵,里面路是越来越烂,水坑是越来越深,就怕那天一个不小心就陷在里面了。

LABVIEW我的没合适的用,安不上,下次找你拷个
发表于 2013-9-8 13:57 | 显示全部楼层
scaple 发表于 2013-9-8 11:26
您这个问题问得非常好。

简单的说,MP提供的是鱼,而CSS提供的是渔。MP是现成GCS,而CSS是用于构建各 ...

不是太理解 这个想要如何玩.  (开放使用? 开放code? 封闭商业授权?)
MP 算是开源的 也是给你渔 呀, CSS 我现在只能看到鱼 . (昨晚刚下了 mp 的code ,刚编译过了)



 楼主| 发表于 2013-9-8 16:25 | 显示全部楼层
NeoLu 发表于 2013-9-8 13:57
不是太理解 这个想要如何玩.  (开放使用? 开放code? 封闭商业授权?)
MP 算是开源的 也是给你渔 呀, CSS ...

要证明渔的有效性和高效性,那我就得首先自己抓几条活蹦乱跳的鱼才行。

遥控器校准操作,MP大概用了不到不到一页的篇幅来说明。我这里了6页来讲述(见99楼开始的教程),而且还有很多细节上的问题没有涉及。区别就在于MP是告诉你如何进行校准操作。而我是讲述如何利用CSS提供的机制来构建和实现校准操作这个功能,呵呵。
因为遥控器校准操作比较有代表性,CSS最主要的数据帧编辑器、总线编辑器、仪表控件编辑器、公式编辑器、条件-动作编辑器都用到了。

这么说吧:
MP 或是 QGCS 等开放的源代码,是让你从如何结网,如何砍木头做小船等开始一步步教你捕鱼。
CSS 是直接把小船、渔网什么的一并提供给你,教你如何捕鱼。
MissionPlanner 、QGroundStation、HK GCS 等等等等,是直接把抓到的鱼给你,至于是不是合乎口味,各人自己看着办吧...










发表于 2013-9-10 11:31 | 显示全部楼层
强人 如果政府对一些品牌加以限制的话  就只能这样玩了 能个性化是最好的
发表于 2013-9-14 17:12 | 显示全部楼层
等更新………………
发表于 2013-9-14 21:39 | 显示全部楼层
留脚印,备用

发表于 2013-9-17 23:50 | 显示全部楼层
楼主你好,我现在也准备做一个地面站,可否加好友请教一下,万分感谢
 楼主| 发表于 2013-9-18 01:23 | 显示全部楼层
本帖最后由 scaple 于 2013-9-18 01:25 编辑

热泪盈眶啊,终于在 VS08 上把ArduPlane的开发环境给弄好了
用 Arduino IDE 编译 ArduPlane 倒是简单的事情一件,除了arduino N 多的版本控制有点小混乱之外
但是 Arduino IDE 的运行速度之慢,使用之不方便那是出了名的...再加上LZ就是个离开了 Visual Assist 就压根写不了程序的货...

不过这下好了,看看俺的豪华配置:VS08 + VA X + VisualMicro + Arduino 1.02 搭建的 ArduPlane 开发环境


66666.JPG

准备托海外的哥们给买个正版的 VisualMicro 去了...



发表于 2013-9-22 08:35 | 显示全部楼层
好帖~ 来膜拜来了~
 楼主| 发表于 2013-9-22 23:58 | 显示全部楼层
阔别arduino一年多之后,俺又回来了,哈哈。前面最后一次整 arduino 是在上面跑了个操作系统,开了三个线程,做了个带控制台的 CDMA2K 加密数据传输的咚咚

今天怀着一丝侥幸心理,把Arduplane烧到 Arduino 2560 里面去了,不出所料,在显示了ArduPlane的版本信息之后死机了,哈哈哈
 楼主| 发表于 2013-9-24 00:33 | 显示全部楼层


增加一个条件触发模式:简单数据总线条件相关触发,当数据总线上某个数值满足特定的条件时,执行预设的动作
测试设置为当滚转角大于60度,切换飞行模式为RTL

无标题.JPG

发表于 2013-9-24 00:46 | 显示全部楼层
内容很精彩!不得不顶帖啊!
学习了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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