51uwb.cn

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

如何在标签上用三遍定位显示XY

[复制链接]

8

主题

22

帖子

84

积分

注册会员

Rank: 2

积分
84
跳转到指定楼层
楼主
发表于 2021-5-25 23:59:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  如何利用程序内未启用的三边定位算法,来实现在便签上显示XY值。
  可不可以详细说一下定位原码中的三遍定位算法是需要哪一个函数,并且如何进行调用
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
沙发
发表于 2021-5-26 10:05:38 | 只看该作者
你的意思是固件还是上位机部分?
回复

使用道具 举报

8

主题

22

帖子

84

积分

注册会员

Rank: 2

积分
84
板凳
 楼主| 发表于 2021-5-26 12:09:08 | 只看该作者
蓝点无限 发表于 2021-5-26 10:05
你的意思是固件还是上位机部分?

是固件部分,在设备上显示
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
地板
发表于 2021-5-26 14:18:35 | 只看该作者
毕业设计 发表于 2021-5-26 12:09
是固件部分,在设备上显示

在BP50 的定位代码中,我们把上位机解算三边定位的函数已经移植并可编译。对应的文件为trilateration.c.

具体使用的函数为GetLocation。

在main.c 中已经定位了变量vec3d AnchorList,并在main中对三个基站坐标进行赋值,实际使用的时候需要根据基站放置位置修改三个基站坐标。

按照GetLocation函数的参数要求,将三个基站坐标和对应的距离信息传递进去便可以解算标签的坐标。

着重看下GetLocation 参数使用。 祝好!
回复

使用道具 举报

8

主题

22

帖子

84

积分

注册会员

Rank: 2

积分
84
5#
 楼主| 发表于 2021-5-26 16:10:19 | 只看该作者
蓝点无限 发表于 2021-5-26 14:18
在BP50 的定位代码中,我们把上位机解算三边定位的函数已经移植并可编译。对应的文件为trilateration.c.
...

Getlocation中的返回值为什么只有一个result,如何在显示屏幕上显示标签的X,Y
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
6#
发表于 2021-5-26 17:40:54 | 只看该作者
毕业设计 发表于 2021-5-26 16:10
Getlocation中的返回值为什么只有一个result,如何在显示屏幕上显示标签的X,Y

result 表示是否成功

结果在参数里,通过指针方式返回,仔细看结果。

函数的返回值不止有return 一种方式
回复

使用道具 举报

8

主题

22

帖子

84

积分

注册会员

Rank: 2

积分
84
7#
 楼主| 发表于 2021-5-27 00:18:24 | 只看该作者
蓝点无限 发表于 2021-5-26 17:40
result 表示是否成功

结果在参数里,通过指针方式返回,仔细看结果。

可否具体一点说明,,哪个是表示的XY,以及如何在main.c里面调用,谢谢您!
(我是三个基站一个标签)
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
8#
发表于 2021-5-27 09:01:01 | 只看该作者
毕业设计 发表于 2021-5-27 00:18
可否具体一点说明,,哪个是表示的XY,以及如何在main.c里面调用,谢谢您!
(我是三个基站一个标签)
  1. int GetLocation(vec3d *best_solution, int use4thAnchor, vec3d* anchorArray, int *distanceArray)
复制代码


这个函数参数说明,
第一个参数best_solution,其实是用来接收计算结果的。
第二个参数use4thAnchor,是否有4个基站,如果2D定位,3基站,将其设置为0,否则设置为1
第三个参数anchorArray,传递基站的坐标,有x y z
第四个参数distanceArray, 标签与基站对应的距离

返回值,为是否定位成功。

下面是上位机部分调用这个函数的实例
  1. int RTLSClient::calculateTagLocation(vec3d *report, int count, int *ranges)
  2. {
  3.     int result = 0;
  4.     vec3d anchorArray[4];

  5.     anchorArray[0].x = _ancArray[0].x;
  6.     anchorArray[0].y = _ancArray[0].y;
  7.     anchorArray[0].z = _ancArray[0].z;

  8.     anchorArray[1].x = _ancArray[1].x;
  9.     anchorArray[1].y = _ancArray[1].y;
  10.     anchorArray[1].z = _ancArray[1].z;

  11.     anchorArray[2].x = _ancArray[2].x;
  12.     anchorArray[2].y = _ancArray[2].y;
  13.     anchorArray[2].z = _ancArray[2].z;

  14.     anchorArray[3].x = _ancArray[3].x;
  15.     anchorArray[3].y = _ancArray[3].y;
  16.     anchorArray[3].z = _ancArray[3].z;

  17.     result = GetLocation(report, ((count==4) ? 1 : 0), &anchorArray[0], ranges);

  18.     return result;
  19. }
复制代码


关于在固件里调用三边定位算法的步骤
step1 定义需要传递的参数类型。
  1. vec3d AnchorList[ANCHOR_MAX_NUM];
  2. vec3d tag_best_solution;
  3. int Anthordistance[ANCHOR_MAX_NUM];
复制代码


step2 配置基站的坐标,需要根据基站放置的坐标实际配置
  1.     AnchorList[0].x =0.12;
  2.     AnchorList[0].y =0.34;
  3.     AnchorList[0].z =0;

  4.     AnchorList[1].x =0.25;
  5.     AnchorList[1].y =0;
  6.     AnchorList[1].z =0;

  7.     AnchorList[2].x =0;
  8.     AnchorList[2].y =0;
  9.     AnchorList[2].z =0;
复制代码

step3 传递测距信息到Anthordistance
  1.         while(Anchor_Index < ANCHOR_MAX_NUM)
  2.         {
  3.             if(Anthordistance_count[Anchor_Index] > 0 )
  4.             {
  5.                 Anthordistance[Anchor_Index] =filter((int)(Anthordistance[Anchor_Index]/Anthordistance_count[Anchor_Index]),Anchor_Index);
  6.             }
  7.             Anchor_Index++;
  8.         }
复制代码

step4 调用GetLocation,这一步代码中没有实现。建议在distance_mange 函数中实现,因为这里已经将Anthordistance 赋值为最新的距离。

step5 根据返回值,将tag_best_solution 中的x 和 y 打印出来就是定位解算的标签坐标

祝好
回复

使用道具 举报

7

主题

26

帖子

49

积分

新手上路

Rank: 1

积分
49
9#
发表于 2021-11-25 20:19:46 | 只看该作者
蓝点无限 发表于 2021-5-27 09:01
这个函数参数说明,
第一个参数best_solution,其实是用来接收计算结果的。
第二个参数use4thAnch ...

请问在固件中修改可以再写的详细一点吗,是在tx_main.c里修改吗
回复

使用道具 举报

0

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
10#
发表于 2022-2-7 16:50:40 | 只看该作者
楼主解决了吗?可以给个联系方式交流下吗
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-11-23 03:20 , Processed in 0.020936 second(s), 4 queries , File On.

Powered by Discuz! X3.3

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

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