51uwb.cn

 找回密码
 立即注册
查看: 937|回复: 2
打印 上一主题 下一主题

bp30定位距离问题

[复制链接]

5

主题

20

帖子

152

积分

官方会员

Rank: 8Rank: 8

积分
152
跳转到指定楼层
楼主
发表于 2023-6-20 21:30:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、三个基站按照正三角形摆放:①默认情况下是基站0和1作为x轴,即三点坐标位:基站0(0,0),基站1(x,0),基站2(x2,y2)吗?如果不是,那么 对应的坐标系是什么?
②如下图:测距时候上位机的 x  y  是谁的坐标?是标签到原点(基站0的坐标)吗?如果不是,是什么?


③标签上液晶显示的三个距离,上位机能否获得到,如何获得?

QQ截图20230620212315.jpg (12.3 KB, 下载次数: 425)

QQ截图20230620212315.jpg
回复

使用道具 举报

35

主题

969

帖子

4072

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4072
沙发
发表于 2023-6-21 08:30:43 | 只看该作者
1. 是的,你可以看用户手册描述。坐标是相对坐标,所有模块(基站和标签)都是相对关系。
2,是定位不是测距,是标签相对于基站0的一个相对坐标
3., 途中anc x range就是基站与标签的距离,与液晶上显示对应
回复

使用道具 举报

5

主题

20

帖子

152

积分

官方会员

Rank: 8Rank: 8

积分
152
板凳
 楼主| 发表于 2023-6-21 21:59:22 | 只看该作者
本帖最后由 wenhorm 于 2023-6-21 22:14 编辑

找到参考:
上位机大概的流程:
上位机通过串口接收数据,收到数据后进行数据包解析,解析得到三个距离,配合上位机已经设定的三个基站的坐标,通过三边定位算法解算标签的坐标。如果坐标解算成功,把对应的点在界面上显示。

主要涉及到的文件:
1 SerialConnection.cpp  这个文件负责串口初始化相关内容
2 RTLSClient.cpp

着重分析下数据处理流程,这部分功能是RTLSClient.cpp中实现的
1 函数void RTLSClient::newData()
当收到串口信息会调用这个函数,在这个函数中会判断是否接受到一个完整的数据包,这个数据包必须是固件和上位机约定的格式,例如头必须是mr。否则认为数据包无效。
2 函数 void RTLSClient:: ProcessData(void)
这个函数是当接收到有效数据包后,对数据包里的数据进行解析,解析主要内容有3个距离信息(如果是4基站定位有4个距离信息),标签的ID以及其它信息。
3processTagRangeReport(0, TAG_ID, range[0]*10, lnum, seq);
这个函数是处理TAG和某个基站的距离信息,可以适当做校正,类似于滤波,把距离信息存放到某个大的结构体里。
4 trilaterateTag(TAG_ID, seq);
这个是解算标签坐标的入口函数,在这个函数会判断是有几个基站距离,然后调用calculateTagLocation 完成解算。
5 int RTLSClient::calculateTagLocation(vec3d *report, int count, int *ranges)
其实这个函数中进一步提前去基站设定的坐标,匹配距离信息送到GetLocation,GetLocation 是一个纯数学的东西了。
6emit tagPos(tid, report.x, report.y, report.z);
当calculateTagLocation 执行成功,标签的坐标解算出来,会emit这个信号,槽收到这个信号,将标签的坐标进行绘制。

总体代码流程就是这样。 具体细节需要仔细研读代码,并且对QT 的信号和槽有较深入的理解才能更好的追逐代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-5-6 20:03 , Processed in 0.014231 second(s), 5 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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