如何测试3588(linux系统)与飞控通信协议?

背景

设计一个无人机系统,该无人机需要完成以下功能:识别特定目标并结算GPS,并且根据目标位置GPS进行航点规划,飞控并接受其他控制板的姿态指令调整无人机飞行模式。

测试通信协议

目的

根据制定的指令协议(3588发送给飞控的指令格式,飞控发给3588的指令格式),进行验证是否两者数据是否能收发稳定正常,并且验证数据精度,比如经纬度精确到第几位,即从3588发送的经纬度,传输到飞控是否准确,以及从飞控传到3588的经纬度是否准确。这个十分关键,因为,后续内置的算法都和无人机GPS位置,识别到的目标GPS位置息息相关。

设备

3588 (外接一根电源线,一根连接显示设备线,数据通信线(TTL+网线))、飞控设备、转换线(422转USB,TTL转USB线,还要有TTL转422线)、电脑

步骤

1. 3588通过typeC-USB线,连接到电脑上。

2.电脑上打开cmd,输入adb shell,进入root@...模式,说明连接成功。

3.还是在该界面,输入exit;,退出adb shell。

exit;

4.在cmd 界面,输入下面语句,做端口映射,为了后面能够在vscode 上通过ssh 连接3588。

adb forward tcp:22 tcp:22

5.打开vscode,按照下面这个步骤,操作,输入密码,连接3588。

(备注:如果不行,在cmd界面执行ssh-keygen -R 127.0.0.1)

6.编译cpp程序,执行程序。开始收发序列。

备注:如何不直接运行程序,看到串口的数据?

在开发板打开终端,执行指令:

cat 命令读取串口数据

cat /dev/ttyCH343USB0

注:该命令后以阻塞方式执行,接收到串口数据会自动打印。如果是串口Loopback回环测试,则需要再开启一个 terminal 终端窗口运行写串口。

问题

1. 飞控能够正常发给地面站GPS,也能够通过422串口转USB发送给串口助手,接收到经纬度。但是通过3号422串口转TTL连接3588连接电脑,显示的就是为零。 问题破案:线路和程序都没问题,是因为飞控确实是会输出一短时间内为零的数字。但是显示了一段时间之后,就不对了。

正常能读取的数据,并且校验和能过的例子如上图所示。

测试1:通过电脑的串口助手,指定一帧的数据如下所示,数据够正常解析并通过校验和:

EB 16 00 00 A2 01 01 01 01 01 01 02 02 02 02 74 FE 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3 00 00 00 00 00 00 00 00 00 00 00 00 26 14

接下来从串口助手里,把飞控数据上发送出来的数据截一帧出来,如下所示:

EB 16 00 00 A2 01 01 28 D2 18 13 98 13 D2 46 4B FD CF 00 B0 FF 0D 00 EF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 F9 00 00 00 00 00 00 00 00 00 00 00 00 63 43

发现读取到的数据,少了13,如下所示

EB 16 00 00 A2 01 01 28 D2 18 98 D2 46 4B FD CF 00 B0 FF 0D 00 EF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 F9 00 00 00 00 00 00 00 00 00 00 00 00 63 43 EB 16 

导致通过不了校验和,自然解析不到正确的经纬度。于是猜测是否屏蔽了13,将13换成14,发现,确实就不屏蔽了。再上网搜索了一下问题,确实存在这个问题。

解决Linux下串口数据接收不全的异常问题_linux c的read读取串口总是数据不够-CSDN博客

fd = open("/dev/ttyS5", O_RDWR, 0);
struct termios options;
tcgetattr(fd,&options);
//屏蔽 0x0d   0x11  0x13 这些特殊字符 解决这些特殊字符收不到的问题
options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tcsetattr(fd,TCSANOW,&options);

添加完就能正常读取了。

思考

1.这里为什么填写127.0.0.1就能连接到3588?

2.当3588搭载在无人机上时,如何控制程序的启动和交互?

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值