|
- 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[4];
- anchorArray[0].x = _ancArray[0].x;
- anchorArray[0].y = _ancArray[0].y;
- anchorArray[0].z = _ancArray[0].z;
- anchorArray[1].x = _ancArray[1].x;
- anchorArray[1].y = _ancArray[1].y;
- anchorArray[1].z = _ancArray[1].z;
- anchorArray[2].x = _ancArray[2].x;
- anchorArray[2].y = _ancArray[2].y;
- anchorArray[2].z = _ancArray[2].z;
- anchorArray[3].x = _ancArray[3].x;
- anchorArray[3].y = _ancArray[3].y;
- anchorArray[3].z = _ancArray[3].z;
- result = GetLocation(report, ((count==4) ? 1 : 0), &anchorArray[0], ranges);
- return result;
- }
复制代码
关于在固件里调用三边定位算法的步骤
step1 定义需要传递的参数类型。
- vec3d AnchorList[ANCHOR_MAX_NUM];
- vec3d tag_best_solution;
- int Anthordistance[ANCHOR_MAX_NUM];
复制代码
step2 配置基站的坐标,需要根据基站放置的坐标实际配置
- AnchorList[0].x =0.12;
- AnchorList[0].y =0.34;
- AnchorList[0].z =0;
- AnchorList[1].x =0.25;
- AnchorList[1].y =0;
- AnchorList[1].z =0;
- AnchorList[2].x =0;
- AnchorList[2].y =0;
- AnchorList[2].z =0;
复制代码
step3 传递测距信息到Anthordistance
- while(Anchor_Index < ANCHOR_MAX_NUM)
- {
- if(Anthordistance_count[Anchor_Index] > 0 )
- {
- Anthordistance[Anchor_Index] =filter((int)(Anthordistance[Anchor_Index]/Anthordistance_count[Anchor_Index]),Anchor_Index);
- }
- Anchor_Index++;
- }
复制代码
step4 调用GetLocation,这一步代码中没有实现。建议在distance_mange 函数中实现,因为这里已经将Anthordistance 赋值为最新的距离。
step5 根据返回值,将tag_best_solution 中的x 和 y 打印出来就是定位解算的标签坐标
祝好 |
|