写点什么

智能小车系列 -NODE 版 SBUS 飞控协议解析历程

发布于: 2021 年 04 月 18 日

项目地址:

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 字节的数据。 所以,还是直接处理即可。

在使用判断时,用异或的速度远大于直接字符串对比,所以能用位运算就尽量使用位运算。


使用教程


在使用串口之前,需先了解树莓派串口通信的设置。


智能小车系列-串口通信


使用起来相当方便

npm install sbusuart --save
复制代码


const SBUSUART = require('sbusuart')
var sbus = new SBUSUART();
或自定义参数:var sbus = new SBUSUART(start_byte = '0f', end_byte = '0x', sbus_frame_len = 25, sbus_num_channels = 18, baudRate = 100000, stopBits = 2, parity = 'even', dataBits = 8);
复制代码


写这个库的目的是为了将遥控器的行程转换为我真实设备的行程,所以支持了数据的归一化,方便映射到自己的数据集中。


设置遥控器最大及最小行程

// min表示遥控器的最小值// max表示遥控器的最大值sbus.setupConvertParams(min, max);
复制代码


开始获取数据

// status: 信号正常为0 信号丢失为1 输出failsafe信号时为2// channels: 原始信号// channels_c: 归一化值,0~1之间sbus.start('/dev/tty.usbserial-00003314B', (status, channels, channels_c)=>{	console.debug('Decode Data:', status, channels, channels_c);});
复制代码


参考博文

https://cloud.tencent.com/developer/article/1706116

发布于: 2021 年 04 月 18 日阅读数: 110
用户头像

每个人都应该为他的梦想付出他的全部! 2018.02.28 加入

一个喜欢搞破坏,研究新技术、新硬件的技术人~

评论

发布
暂无评论
智能小车系列-NODE版SBUS飞控协议解析历程