智能小车系列 -NODE 版 SBUS 飞控协议解析历程
项目地址:
https://github.com/xujialiang/sbus
背景:
最近买了个 MC10 遥控,发现 sbus 默认协议,pwm 信号只支持 90 度坨机,遥控能修改行程,但是最大 120。如果我要用于云台和小车之类大行程的 pwm 信号,就没法直接用遥控默认的数值,需要手动映射到我需要的数值上。
由于我的小车之前都是 Node 些的控制端,同一个小项目,还是不要用异构的程序了,所以还是弄个 Node 版本的 sbus 协议解析,貌似没找到轮子,只能自己写了。
踩坑记:
1.我买的是 Microzone 的遥控器,在官网招了半天的资料,没有相关的开发资料,简直了,淘宝上还写着它支持 mbus 协议(兼容 sbus),但是我半点 mbus 的资料都没找到。好在 sbus 协议是标准的,还是老老实实解析 sbus 协议吧。https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm?spm=2013.1.1997525045.2.6329333ePziPev 不建议购买。
2.mc9008s 的接收机,和其他大部分接收机一样,需要自己接一个硬件反相器。我一开始没接反相器,结果,收到的数据,怎么都不是 0x0f 开头, 整整折腾了两天,查了好多资料,看了别人的博文,才知道要接反相器。https://item.taobao.com/item.htm?spm=a1z09.2.0.0.869b2e8dAebnhg&id=573097365819&_u=iatl2840a3 反相器是有方向的,从接收机反相,别买错。 接线时候也要注意,接反了会没有信号。
3.为了解析 sbus 协议,特意买了一个逻辑分析仪。https://item.taobao.com/item.htm?spm=a1z09.2.0.0.58232e8dA9m9hW&id=614150181233&_u=iatl2826fc 结果,它的 uart 协议解析,不支持 2 位停止位。 还是要买好点的逻辑分析仪,好在不贵。
4.调试的时候,可以先在电脑上调试数据。我的树莓派 3b+不知为什么只能发送数据,接收不到数据。大概时间太久了,最终剁手,又下单 4b https://item.taobao.com/item.htm?spm=a1z09.2.0.0.65762e8d2AadQM&id=597115872531&_u=iatl28a7ae
5.MAC 上频繁插拔 usb,可能找不到串口,也许重启下电脑,就行。
6.性能问题修改。一开始想自己建缓存,接收串口数据,然后一个字节一个字节接收数据,缓存 25 个字节作为一帧数据。 结果发现数据处理太慢,1s 只处理了两帧数据,数据的接收远大于数据的处理。最终放弃这个方案。 调试时,发现大部分情况下,收到的数据还是正好是 25 字节的。 偶尔会收到超过 25 字节的数据。 所以,还是直接处理即可。
在使用判断时,用异或的速度远大于直接字符串对比,所以能用位运算就尽量使用位运算。
使用教程
在使用串口之前,需先了解树莓派串口通信的设置。
使用起来相当方便
写这个库的目的是为了将遥控器的行程转换为我真实设备的行程,所以支持了数据的归一化,方便映射到自己的数据集中。
设置遥控器最大及最小行程
开始获取数据
参考博文
版权声明: 本文为 InfoQ 作者【波叽波叽啵😮一口盐汽水喷死你】的原创文章。
原文链接:【http://xie.infoq.cn/article/3668e8f31c260266546ae47f8】。未经作者许可,禁止转载。
评论