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

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

UAV 地面站软件开发平台 CSS (LZ从火星滚回来了!!!!!409楼)

  [复制链接]
61
发表于 2013-8-27 11:04 | 只看该作者
点击查看详情
scaple 发表于 2013-6-29 09:04
CSS作为无人机/车/船控制软件的开发平台,其诸多的编辑设定功能由一系列编辑器组成,它们分别为:仪表编辑器 ...

您好,有些问题需要请教您下,能加下我Q吗?451290891.谢谢了

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

62
 楼主| 发表于 2013-8-27 12:28 | 只看该作者
liangdyc 发表于 2013-8-27 11:04
您好,有些问题需要请教您下,能加下我Q吗?451290891.谢谢了

有什么问题在论坛里面提吧,大家一块讨论效果会更好。俺的QQ经常是想起来才偶尔上来看看,平时一般不在线。

您的问题:

你好,谢谢你的解答,其实可能是我没说明白。在我的理解中,就是地面站软件通过发送mavlink协议里面的相关命令,然后飞控会根据不同的命令做出不同的反应。那么这个命令怎么发?比如前面说到要得到姿态数据,那么用66号命令。这个命令怎么发出去?难道用串口助手我打一个66,然后发出去?我现在需要的不是具体哪个指令是什么意思,而且这些指令怎样发出去。

直接把合成好的数据帧写入串口就行了,比方说将  req_stream_id 为 3 的下行数据传输速率调整为 0,合成后的数据帧内容为 FE 06 36 FF BE 42 00 00 01 01 03 01 3D 94,把这14个字节的数据写入串口就ok了


-------------------------------------------------------------------------------------

>>> GCS Msg:  MAVLINK_MSG_ID_REQUEST_DATA_STREAM ( 66/0x42)
>>> FE 06 36 FF BE 42 00 00 01 01 03 01 3D 94 , W:1
>>> req_message_rate=0; target_system=1; target_component=1; req_stream_id=3; start_stop=1;


63
发表于 2013-8-28 18:06 | 只看该作者
scaple 发表于 2013-8-27 12:28
有什么问题在论坛里面提吧,大家一块讨论效果会更好。俺的QQ经常是想起来才偶尔上来看看,平时一般不在线 ...

你好,看到你的解释了。我用串口助手把你说的那几个字节发送出去,没有反应。具体情况我现在也弄不清楚了。

64
发表于 2013-8-28 18:07 | 只看该作者
本帖最后由 liangdyc 于 2013-8-28 18:09 编辑
scaple 发表于 2013-8-27 12:28
有什么问题在论坛里面提吧,大家一块讨论效果会更好。俺的QQ经常是想起来才偶尔上来看看,平时一般不在线 ...

而且,通过这几天的测试,我发现,地面站与APM连接的时候,好像之间还需要进行通信,才能正式启动。另外我是用的那个USB线直接和APM连接的。不是走的数传模块或者其他的。


65
 楼主| 发表于 2013-8-28 20:49 | 只看该作者
liangdyc 发表于 2013-8-28 18:06
你好,看到你的解释了。我用串口助手把你说的那几个字节发送出去,没有反应。具体情况我现在也弄不清楚了 ...

>>> GCS Msg:  MAVLINK_MSG_ID_REQUEST_DATA_STREAM ( 66/0x42)
>>> FE 06 36 FF BE 42 00 00 01 01 03 01 3D 94 , W:1
>>> req_message_rate=0; target_system=1; target_component=1; req_stream_id=3; start_stop=1;

这条指令当中req_message_rate 字段的数值为0,表示请求下行发送的数据刷新率为0,也就是说这条指令实际上是关闭了req_stream_id=3的数据下行传输。你把req_message_rate改成大于0的数值,应该就有数据下来了,具体是哪类数据我记不清楚了。当然,你也可以把req_stream_id改为10,这个我记得好像是姿态数据。具体字段数值与字节位置的对应关系,看我前面贴过的图。

还有要注意的是,写入串口的必须是16进制的数据,而非 FE 06 36 FF BE 42 00 00 01 01 03 01 3D 94 这个字符串




66
 楼主| 发表于 2013-8-28 20:54 | 只看该作者
本帖最后由 scaple 于 2013-8-28 21:00 编辑
liangdyc 发表于 2013-8-28 18:07
而且,通过这几天的测试,我发现,地面站与APM连接的时候,好像之间还需要进行通信,才能正式启动。另外我 ...

MP与apm建立连接的时候,MP上行发送了一个请求机载参数下行发送的msg上去,APM接受并响应该消息后,下行传送ArduPlane的200多个参数。MP必须完整接收这些参数后,才能继续运行。

实际上,无论MP是否请求下行参数传送,只要连接建立后,MP都在接收并处理APM的下行数据了。这只不过是MP的一个强制措施罢了。

USB连接是最可靠的数据通讯方式,相对其他无线数传。



67
发表于 2013-8-29 18:54 | 只看该作者
scaple 发表于 2013-8-28 20:54
MP与apm建立连接的时候,MP上行发送了一个请求机载参数下行发送的msg上去,APM接受并响应该消息后,下行传 ...

非常感谢你啊,这么耐心详细的解释。

68
发表于 2013-8-31 14:43 | 只看该作者
scaple 发表于 2013-8-28 20:54
MP与apm建立连接的时候,MP上行发送了一个请求机载参数下行发送的msg上去,APM接受并响应该消息后,下行传 ...

不过还是不好意思。。。还是没反应。嘿嘿。可能是我不怎么会弄吧

69
 楼主| 发表于 2013-9-1 00:42 | 只看该作者
liangdyc 发表于 2013-8-31 14:43
不过还是不好意思。。。还是没反应。嘿嘿。可能是我不怎么会弄吧

前面说漏了一点,如果您需要对例子当中某个字段数值进行更改的话,相应的,最后两位CRC校验码也必须随之改变。否则,APM肯定不会有什么响应动作。

先用mp把apm的下行数据关掉,然后关闭MP,用串口助手打开apm,发送如下图所示的 请求机载参数下行传送 message 上去,机载参数就源源不断地下来了...




70
发表于 2013-9-1 16:44 | 只看该作者
scaple 发表于 2013-9-1 00:51
终于把 tlog 格式遥测数据的记录、回放搞定了。记录简单,很容易就弄完了。回放有点啰嗦,一方面原有的遥测 ...

膜拜大神,膜拜大神。出来了。啊哈哈哈。太感谢了。

71
发表于 2013-9-1 18:54 | 只看该作者
本帖最后由 liangdyc 于 2013-9-1 21:33 编辑
scaple 发表于 2013-9-1 00:42
前面说漏了一点,如果您需要对例子当中某个字段数值进行更改的话,相应的,最后两位CRC校验码也必须随之改 ...

非常感谢你的帮忙,现在已经收到数据了。正在做数据校验。但是5555,又遇到问题了。  1、比如发送的命令为:FE 06 36 FF BE 42 00 00 01 01 03 01 3D 94。各数据位的含义我已经懂了。3D 94是校验和。我用CRC-16-CCITT校验软件对上面数据进行处理,却获得的不是3D 94,而是44 2F。对FE 02 91 FF BE 15 01 01 78 9B 进行校验,获得的校验和为:FA 7F而不是78 9B。这是怎么一回事?是不是还有其他的问题呢?(刚才又仔细研究下资料,好像是需要校验的数据+ crc_extra )。这个CRC_extra在它那个mavlin库里面可以查到。查到的是: #ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 9, 34, 26, 46, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 26, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 44, 3, 9, 22, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 0}
#endif

#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 240, 183, 130, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 78, 68, 189, 127, 111, 21, 21, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0}
#endif
这个里面具体是怎样定义的?仔细看了一下长度为9的就可以看到CRC_extra有50,46两个值。具体怎么选啊?能仔细说明下吗?最好举个例子。非常感谢
刚刚又查看了地面站源代码程序,发现他里面做了这个定义:const int X25_INIT_CRC = 0xffff; const int X25_VALIDATE_CRC = 0xf0b8; 好像是0xffff作为CRC—extra的值。但是还是不对。WHY?
  

   2、另外对命令的生成自己也有一些疑问。例如你前面教给我的发送FE 02 91 FF BE 15 01 01 78 9B 可以获得数据,非常成功哦。的确是大神,但是疑问来了。对于这已组数据每一位的含义我基本了解了。FE为头,02表示有两个有效数据,91为数据包序列号,FF为系统ID,BE 为组件ID,15为消息ID,01 01两个为数据, 78 9B为校验和。可是如果我现在想写一条让APM发送姿态数据的消息,除了FE以及校验和可以最后确定。那么其他数据位的数据是怎样确定的呢?我也查看了MAVLINK协议说明,很多只是说了某个命令的含义。至于发送命令时,每一位是怎样确定的,却没有说明。您能详细解释下吗?或者举个详细的例子说明下,谢谢了,。     (刚查了资料,总不能什么都让您帮解答吧嘿嘿。消息ID 是固定在协议里的 ,可变化的。组件ID ,系统ID 都是可变得 是根据飞行器类型,模式所定的。这一点自己可以理解了。对了我用的是四旋翼飞行器。

   3、 还有我通过发送那条指令,从APM获取了一些数据,其中一条为:FE 19 58 01 01 16 00 00 00 00 10 01 01 01 4D 4E 54 5F 52 43 5F 49 4E 5F 50 41 4E 00 00 00 02 3E 4B。根据这包数据,我知道其中00 00 00 00 10 01 01 01 4D 4E 54 5F 52 43 5F 49 4E 5F 50 41 4E 00 00 00 02这些为有效数据。但是怎样把他合成有效的或者说我们能够看懂的数据,这里就不大清楚了。比如多少个数据表示的是同一个数,或者哪一个数是表示的正负?因为我们平时在实验室,通信协议和格式都是自己规定的,很少用其他的,所以,这里自己就遇到难题了。
  再次对你前面对我的帮助表示感谢啊。















72
 楼主| 发表于 2013-9-1 22:12 | 只看该作者
本帖最后由 scaple 于 2013-9-1 22:18 编辑
liangdyc 发表于 2013-9-1 18:54
非常感谢你的帮忙,现在已经收到数据了。正在做数据校验。但是5555,又遇到问题了。  1、比如发送的命令为 ...

祝贺你!你已经一步步接近问题的实质了。

1、你说得对,在校验的过程中确实要加上 crc_extra(好像是最后,我记得)。

宏定义 MAVLINK_MESSAGE_LENGTHS 和 MAVLINK_MESSAGE_CRCS 简单的说就是两张表,mavlink在这里用简单查表的形式获取其需要的数据。
MAVLINK_MESSAGE_LENGTHS 表示mavlink message的长度(准确的应该是载荷长度,如果我没记错的话),MAVLINK_MESSAGE_CRCS表示mavlink message 对应的附加校验码。这2个表当中的元素的索引,就是 mavlink msg 的id(即序号),这样,通过message的序号,马上就可以得到message的载荷长度与附加校验码。哈哈,简单吧?

const int X25_INIT_CRC 这个应该是CRC校验迭代运算的初始值,至于其他....Sorry 我现在好想念当年给我上《通信原理》的老师,好多东西又还给他了....5555555

3、4,两个问题的实质其实就是一个:mavlink message,或者我称其为 mavlink 数据帧的帧格式是如何定义的?赫赫,你仔细看下mavlink的源代码去,所有所有mavlink message的帧格式定义及其他信息都定义在程序当中了。是哪个文件我记不得了,得回头看下我的源程序去。

现在真羡慕你们,学习mavlink的时候有那么资源。当初我啃mavlink的时候,几乎连可用可信的数据帧例子数据都没有。

另外说一句,西工大和北航的类似通讯协议我接触过一点,从通讯协议的角度上来说 mavlink 协议还是不错的,考虑得比较周全。可以看出 mavlink在设计的时候是想做为一个海陆空天的通用协议来进行设计的。但是在实现的过程中,mavlink 的通用性并不是太优秀,具体的说就是不同类型的数据帧之间的规律性不是很强,包含了一定数量的特殊规则在里面,这样就给通用化的实现带来一定麻烦。





73
发表于 2013-9-1 22:16 | 只看该作者
本帖最后由 liangdyc 于 2013-9-1 22:18 编辑
scaple 发表于 2013-9-1 22:12
祝贺你!你已经一步步接近问题的实质了。

1、你说得对,在校验的过程中确实要加上 crc_extra(好像是最 ...

5555555555,激动啊。刚刚也是在看源代码,发现真的越来越接近实质问题了。哈哈。还好自己用了一个星期疯狂学习C#,现在部分源代码也能看懂了。激动啊。您能仔细帮我解释下FE 02 91 FF BE 15 01 01 78 9B这个里面的校检码是用的哪个CRC_extra算出来的吗?尤其是怎样通过那个表查到相应的CRC_extra 。现在这里稍微还有点晕。


74
 楼主| 发表于 2013-9-1 22:21 | 只看该作者
liangdyc 发表于 2013-9-1 22:16
5555555555,激动啊。刚刚也是在看源代码,发现真的越来越接近实质问题了。哈哈。还好自己用了一个星期疯 ...
您能仔细帮我解释下FE 02 91 FF BE 15 01 01 78 9B这个里面的校检码是用的哪个CRC_extra算出来的吗
俩字:查表
表当中索引为 0x15 的信息就是你所需要的咚咚



75
发表于 2013-9-1 22:25 | 只看该作者
scaple 发表于 2013-9-1 22:12
祝贺你!你已经一步步接近问题的实质了。

1、你说得对,在校验的过程中确实要加上 crc_extra(好像是最 ...

恩,通信协议这里就是需要通用化,标准化,简单化,发现mavlink这里好像有点太繁琐了。而且他还设定了包的序列号,我个人认为,无非就丢包了,数据传输过程中肯定会有偶尔的几个数据包丢失,这个比较正常,且有误码率的存在。一般我们实验室在不大的工程上一般不设定序列号,只是校检下数据正确与否,不过暂时还从来没有出现过数据错误或者其他情况。也可能我们现在有的项目工作频率比较低的原因吧。

76
 楼主| 发表于 2013-9-1 22:26 | 只看该作者
今天的测试飞行堪称完美,但是也有存在个重大事故隐患,差点出大事了!


























77
发表于 2013-9-1 22:31 | 只看该作者
scaple 发表于 2013-9-1 22:21
俩字:查表
表当中索引为 0x15 的信息就是你所需要的咚咚

55555555555,还是不行哦。嘿嘿。在#define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 240, 183, 130, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 78, 68, 189, 127, 111, 21, 21, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0}
#endif里面查?具体怎么查还是不懂哦。因为没用计算机查,只是自己手动查的。。。。嘿嘿。有点笨

78
 楼主| 发表于 2013-9-1 22:34 | 只看该作者
第一个起落降落的不是太好,落远了点,捡飞机的时候发现少了两根橡筋,怪哉,也不是很粗暴的降落阿,怎么橡筋就断了,还两根?

拿回飞机来才突然想起:不是断了两根橡筋,而是上天的时候就只绑了两根橡筋

1.6-1.8公斤,1.7米翼展的飞机啊,简直是黑死人喽.....
79
 楼主| 发表于 2013-9-1 22:36 | 只看该作者
飞行数据回放,youku会吃清晰度阿,明明上传的是高清



80
发表于 2013-9-1 22:42 | 只看该作者
scaple 发表于 2013-9-1 22:36
飞行数据回放,youku会吃清晰度阿,明明上传的是高清

帅气。哈哈。我们的四旋翼飞行器前天也稳定起飞航行了。惊动学校了。我们学院院长给我来了一句“经费没白费。”。。。。狂汗。我们导师居然让我加上图像识别,自动跟踪羊群。。。。。

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

本版积分规则

关闭

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

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