如何在标签上用三遍定位显示XY
如何利用程序内未启用的三边定位算法,来实现在便签上显示XY值。可不可以详细说一下定位原码中的三遍定位算法是需要哪一个函数,并且如何进行调用
你的意思是固件还是上位机部分? 蓝点无限 发表于 2021-5-26 10:05
你的意思是固件还是上位机部分?
是固件部分,在设备上显示
毕业设计 发表于 2021-5-26 12:09
是固件部分,在设备上显示
在BP50 的定位代码中,我们把上位机解算三边定位的函数已经移植并可编译。对应的文件为trilateration.c.
具体使用的函数为GetLocation。
在main.c 中已经定位了变量vec3d AnchorList,并在main中对三个基站坐标进行赋值,实际使用的时候需要根据基站放置位置修改三个基站坐标。
按照GetLocation函数的参数要求,将三个基站坐标和对应的距离信息传递进去便可以解算标签的坐标。
着重看下GetLocation 参数使用。 祝好! 蓝点无限 发表于 2021-5-26 14:18
在BP50 的定位代码中,我们把上位机解算三边定位的函数已经移植并可编译。对应的文件为trilateration.c.
...
Getlocation中的返回值为什么只有一个result,如何在显示屏幕上显示标签的X,Y 毕业设计 发表于 2021-5-26 16:10
Getlocation中的返回值为什么只有一个result,如何在显示屏幕上显示标签的X,Y
result 表示是否成功
结果在参数里,通过指针方式返回,仔细看结果。
函数的返回值不止有return 一种方式 蓝点无限 发表于 2021-5-26 17:40
result 表示是否成功
结果在参数里,通过指针方式返回,仔细看结果。
可否具体一点说明,:D,哪个是表示的XY,以及如何在main.c里面调用,谢谢您!
(我是三个基站一个标签) 毕业设计 发表于 2021-5-27 00:18
可否具体一点说明,,哪个是表示的XY,以及如何在main.c里面调用,谢谢您!
(我是三个基站一个标签)
int GetLocation(vec3d *best_solution, int use4thAnchor, vec3d* anchorArray, int *distanceArray)
这个函数参数说明,
第一个参数best_solution,其实是用来接收计算结果的。
第二个参数use4thAnchor,是否有4个基站,如果2D定位,3基站,将其设置为0,否则设置为1
第三个参数anchorArray,传递基站的坐标,有x y z
第四个参数distanceArray, 标签与基站对应的距离
返回值,为是否定位成功。
下面是上位机部分调用这个函数的实例
int RTLSClient::calculateTagLocation(vec3d *report, int count, int *ranges)
{
int result = 0;
vec3d anchorArray;
anchorArray.x = _ancArray.x;
anchorArray.y = _ancArray.y;
anchorArray.z = _ancArray.z;
anchorArray.x = _ancArray.x;
anchorArray.y = _ancArray.y;
anchorArray.z = _ancArray.z;
anchorArray.x = _ancArray.x;
anchorArray.y = _ancArray.y;
anchorArray.z = _ancArray.z;
anchorArray.x = _ancArray.x;
anchorArray.y = _ancArray.y;
anchorArray.z = _ancArray.z;
result = GetLocation(report, ((count==4) ? 1 : 0), &anchorArray, ranges);
return result;
}
关于在固件里调用三边定位算法的步骤
step1 定义需要传递的参数类型。
vec3d AnchorList;
vec3d tag_best_solution;
int Anthordistance;
step2 配置基站的坐标,需要根据基站放置的坐标实际配置
AnchorList.x =0.12;
AnchorList.y =0.34;
AnchorList.z =0;
AnchorList.x =0.25;
AnchorList.y =0;
AnchorList.z =0;
AnchorList.x =0;
AnchorList.y =0;
AnchorList.z =0;
step3 传递测距信息到Anthordistance
while(Anchor_Index < ANCHOR_MAX_NUM)
{
if(Anthordistance_count > 0 )
{
Anthordistance =filter((int)(Anthordistance/Anthordistance_count),Anchor_Index);
}
Anchor_Index++;
}
step4 调用GetLocation,这一步代码中没有实现。建议在distance_mange 函数中实现,因为这里已经将Anthordistance 赋值为最新的距离。
step5 根据返回值,将tag_best_solution 中的x 和 y 打印出来就是定位解算的标签坐标
祝好 蓝点无限 发表于 2021-5-27 09:01
这个函数参数说明,
第一个参数best_solution,其实是用来接收计算结果的。
第二个参数use4thAnch ...
请问在固件中修改可以再写的详细一点吗,是在tx_main.c里修改吗 楼主解决了吗?可以给个联系方式交流下吗
页:
[1]
2