附图:
首先R8EF和T8S需要对码操作 B站有视频
完成后可选择 通信协议 有三种 S.BUS , PPM ,PWM
我选择的是 S.BUS
我只需要拿到 前后左右的数据,做成 geometry_msgs/Twist Message类型的数据就可以了
于是我将R8EF接收器接个DB9的串口转usb
然后用个串口工具就可以看到完整的数据了,但是想象很美好,之前在看SBUS协议的时候,就老是听到一个操作“硬件取反”好像是需要接一个三极管电路,这玩意我不太懂
果然用串口工具解析的都是乱码数据!!!
还是得用钞能力,买了一个转好的模块,插上即用非常方便
SBUS调试助手 sbus解析,sbus协议_sbus转串口_沨_的博客-优快云博客
附带调试工具!!!(工具要在window里边使用)
我买的是转115200波特率的那款,非常的好用,直接就解析出来了
根据实际情况设置参数,我的是直接转成115200了,无校验,1停止位
如果连接一切正常的话就可以,读到数据了
然后我根据遥杆上下,左右 试出来
CH1 是控制左右数据的,CH3 是控制前后数据的
于是我只需要解析这两个通道的数据,根据数据的范围,确定一个线速度和角速度
让他们能响应起来就可以了
因为我是要用到ros上的,所以需要在linux系统下,解析串口数据
ros解析串口可以参考博客:
所以还需要参考一下sbus数据解析,可以参考guithub源码
https://github.com/bolderflight/sbushttps://github.com/bolderflight/sbus看完就知道这个东西是回事了,不过这只是参考!还是得自己写一下
写出来的东西我也放到github上了
https://github.com/ORBslam2-3/serialPort_wshttps://github.com/ORBslam2-3/serialPort_ws就是解析了一下 通道数据 并自定义成了gemotry/Twist Message 类型
将发布出去的话题,改成/turtle1/cmd_vel 名字就可以用小乌龟做实验了
附带一个subs协议资料:
SBUS协议:使用的是串口的通讯,直接可以用串口发出,但有几点仍需要注意:
1.串口配置:100k波特率,8位数据位(在stm32中要选择9位),偶校验 (EVEN),2位停止位,无控流,25个字节。
2.协议格式:(每字节8位)
[startbyte] [data1][data2]…[data22][flags][endbyte];
startbyte=0x0f;
endbyte=0x00;
flags标志位是用来检测控制器与px4是否断开的标志位:
flags=1:控制器与接收器保持连接;
flags=0:控制器与接收器断开(失控),px4会控制电机停转。
data1…data22:对应16个通道(ch1-ch16),每个通道11bit(22X8=16X11=176)
数据范围在282~1722之间,中值为1002;
ch1的11位=data2的低3位+data1的8位;
例如:data1=00110110,data2=11001111;
这时ch1=111 00110110=1846;通道1 的值就为1846;
ch2=data3的低6位+data2的高5位;
ch3=data5的低1位+data4的8位+data3的高2位;
ch4=4 7;
ch5=7 4;
ch6=2 8 1;
ch7=5 6;
ch8=8 3;
ch9=1 8;
ch10=4 7;
ch11=7 4;
ch12=2 8 1;
ch13=5 6;
ch14=8 3;
ch15=3 8;
ch16=8 5;
3.用stm32中给px4发时,需要取反,并且是硬件取反,软件取反是无效的