51uwb.cn

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

四基站为什么z轴误差很大

[复制链接]

6

主题

16

帖子

48

积分

新手上路

Rank: 1

积分
48
跳转到指定楼层
楼主
发表于 2024-12-10 13:29:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想问一下源代码增加到四基站,增加了anchorList[3]的xyz值定义,为什么进行上位机的时候xy值基本正确,z值一直在3m左右什么情况?图上有自己设定的四个基站的位置,想问一下是什么情况,比较急

图片3d.png (88.6 KB, 下载次数: 25)

3d四基站定位

3d四基站定位
回复

使用道具 举报

35

主题

1068

帖子

4571

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4571
沙发
发表于 2024-12-11 08:26:21 | 只看该作者
你的定位区域只有0.4*0.4*0.6 这么小吗?
xyz 至少2米以上
回复

使用道具 举报

6

主题

16

帖子

48

积分

新手上路

Rank: 1

积分
48
板凳
 楼主| 发表于 2024-12-11 19:18:07 | 只看该作者
蓝点无限 发表于 2024-12-11 08:26
你的定位区域只有0.4*0.4*0.6 这么小吗?
xyz 至少2米以上

z轴也必须要2m吗?还想问一下想把xy写入标签屏幕上,但是数值都是0是什么情况呢(加入源码的getlocation函数基站和标签没有办法链接,加入getlocation2可以连接但是xy数据不刷新,三维xyz好像只能使用getlocation这个函数吗),需要刷新xy定位的数值吗?
回复

使用道具 举报

35

主题

1068

帖子

4571

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4571
地板
发表于 2024-12-11 21:38:13 | 只看该作者
wwwaa 发表于 2024-12-11 19:18
z轴也必须要2m吗?还想问一下想把xy写入标签屏幕上,但是数值都是0是什么情况呢(加入源码的getlocation ...

1. z 也需要
2.getlocation 并没有做过验证,仅供学习参考。
我们目前工程,必须模块测距,测得距离必须由电脑解算坐标
回复

使用道具 举报

6

主题

16

帖子

48

积分

新手上路

Rank: 1

积分
48
5#
 楼主| 发表于 2024-12-12 11:13:36 | 只看该作者
蓝点无限 发表于 2024-12-11 21:38
1. z 也需要
2.getlocation 并没有做过验证,仅供学习参考。
我们目前工程,必须模块测距,测得距离必 ...

必须通过上位机进行定位吗?固件不支持解算坐标吗?是想通过固件结算坐标然后在上位机上显示。如果支持的话需要增加什么模块来完成呢?(我自己增加了结算坐标的函数,但是每次加上标签的两个灯都不会亮,和程序中的GetLocation函数一样的结果)
回复

使用道具 举报

6

主题

16

帖子

48

积分

新手上路

Rank: 1

积分
48
6#
 楼主| 发表于 2024-12-12 16:54:29 | 只看该作者
蓝点无限 发表于 2024-12-11 21:38
1. z 也需要
2.getlocation 并没有做过验证,仅供学习参考。
我们目前工程,必须模块测距,测得距离必 ...

还想问一下qt上位机运行连接connect的时候总显示程序异常错误大概是因为什么情况呢
回复

使用道具 举报

35

主题

1068

帖子

4571

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4571
7#
发表于 2024-12-13 08:39:12 | 只看该作者
wwwaa 发表于 2024-12-12 16:54
还想问一下qt上位机运行连接connect的时候总显示程序异常错误大概是因为什么情况呢

1. 固件程序不支持坐标解算。你说每次加了这部分代码标签灯不亮,可能是程序没有返回,导致无法再执行到UWB程序
2. qt上位机提示错误,具体错误信息是什么? 看你开始截图,上位机正常工作。
可能错误是log报错位置问题,这个可以忽略
回复

使用道具 举报

6

主题

16

帖子

48

积分

新手上路

Rank: 1

积分
48
8#
 楼主| 发表于 2024-12-14 19:23:04 | 只看该作者
蓝点无限 发表于 2024-12-13 08:39
1. 固件程序不支持坐标解算。你说每次加了这部分代码标签灯不亮,可能是程序没有返回,导致无法再执行到U ...

想问一下需要怎么返回呢?不太懂需要加什么程序?我只加了一个定位函数,需要把定位信息返回到基站吗?还是什么意思呢
回复

使用道具 举报

35

主题

1068

帖子

4571

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4571
9#
发表于 2024-12-14 20:46:22 | 只看该作者
wwwaa 发表于 2024-12-14 19:23
想问一下需要怎么返回呢?不太懂需要加什么程序?我只加了一个定位函数,需要把定位信息返回到基站吗?还 ...

程序没有调试,不能使用。所以不要在模块解算定位坐标信息。不要调用getlocation
回复

使用道具 举报

6

主题

16

帖子

48

积分

新手上路

Rank: 1

积分
48
10#
 楼主| 发表于 7 天前 | 只看该作者
蓝点无限 发表于 2024-12-14 20:46
程序没有调试,不能使用。所以不要在模块解算定位坐标信息。不要调用getlocation

您好,我的定位代码是这样的
int zuixiao3d(vec3d* report,int use4thAnchor,vec3d* anchorArray,int* distanceArray)
{

    if (use4thAnchor == 1)
    {
    float Res[4];
    float BS1[3] = { anchorArray[0].x, anchorArray[0].y, anchorArray[0].z};
    float BS2[3] = { anchorArray[1].x, anchorArray[1].y, anchorArray[1].z };
    float BS3[3] = { anchorArray[2].x, anchorArray[2].y, anchorArray[2].z };
    float BS4[3] = { anchorArray[3].x, anchorArray[3].y, anchorArray[3].z};

    float pack_r_measure[4];
    float A[16] = {
        1, -2 * BS1[0], -2 * BS1[1], -2 * BS1[2],
        1, -2 * BS2[0], -2 * BS2[1], -2 * BS2[2],
        1, -2 * BS3[0], -2 * BS3[1], -2 * BS3[2],
        1, -2 * BS4[0], -2 * BS4[1], -2 * BS4[2]
    };
    float B[4];


    for (int i = 0; i < 4; i++) {
        pack_r_measure =  distanceArray / 1000.0  ;
    }

    B[0] = pack_r_measure[0] * pack_r_measure[0] - BS1[0] * BS1[0] - BS1[1] * BS1[1] - BS1[2] * BS1[2];
    B[1] = pack_r_measure[1] * pack_r_measure[1] - BS2[0] * BS2[0] - BS2[1] * BS2[1] - BS2[2] * BS2[2];
    B[2] = pack_r_measure[2] * pack_r_measure[2] - BS3[0] * BS3[0] - BS3[1] * BS3[1] - BS3[2] * BS3[2];
    B[3] = pack_r_measure[3] * pack_r_measure[3] - BS4[0] * BS4[0] - BS4[1] * BS4[1] - BS4[2] * BS4[2];


    // ?????? At ???
    float At[16];
    // ?????? Ax ???
    float Ax[16];
    // ?????? A_ ???
    float A_[16];
    // ?????? Ac ???
    float Ac[16];
    // ?????? Res ???
    //Res[4]= (float *)malloc(4 * sizeof(float));

    MatrixTrans(A, At,4,4);
    MatrixMul(At, A, Ax,4, 4, 4 );
        MatrixInv1(Ax, A_,4,4);

    MatrixMul(A_, At, Ac,4, 4, 4 );
    MatrixMul( Ac, B, Res,4, 4, 1);
    report->x=Res[1];
    report->y=Res[2];
    report->z=Res[3];
    }
    else
    {
        float Res[2];
        float BS1[3] = { anchorArray[0].x, anchorArray[0].y};
        float BS2[3] = { anchorArray[1].x, anchorArray[1].y};
        float BS3[3] = { anchorArray[2].x, anchorArray[2].y};
        //float BS4[3] = { anchorArray[3].x, anchorArray[3].y};


        float pack_r_measure[3];
        float B[2];
        for (int i = 0; i < 3; i++) {
            pack_r_measure =  distanceArray / 1000.0  ;
        }
        float A[4] = {
            2 * (BS1[0] -BS2[0]), 2 * (BS1[1]-BS2[1]),
            2 * (BS1[0] -BS3[0]), 2 * (BS1[1]-BS3[1])
            

        };


        B[0] = pack_r_measure[1] * pack_r_measure[1]-pack_r_measure[0] * pack_r_measure[0]  - BS2[0] * BS2[0] - BS2[1] * BS2[1]+ BS1[0] * BS1[0] + BS1[1] * BS1[1];
        B[1] = pack_r_measure[2] * pack_r_measure[2]-pack_r_measure[0] * pack_r_measure[0]  - BS3[0] * BS3[0] - BS3[1] * BS3[1]+ BS1[0] * BS1[0] + BS1[1] * BS1[1];
        


        // ?????? At ???
        float At[4];
        // ?????? Ax ???
        float Ax[4];
        // ?????? A_ ???
        float A_[4];
        // ?????? Ac ???
        float Ac[4];
        // ?????? Res ???
        //Res[4]= (float *)malloc(4 * sizeof(float));

        MatrixTrans(A, At,2,2);
        MatrixMul(At, A, Ax,2, 2, 2 );
        MatrixInv1(Ax, A_,2,2);

        MatrixMul(A_, At, Ac,2, 2, 2 );
        MatrixMul( Ac, B, Res,2, 2, 1);
        report->x=Res[0];
        report->y=Res[1];
        report->z=0;

    }

    return 1;
}
distance_mange有关的使用是这样的
                zuixiao3d(&Res,i,AnchorList,Anthordistance);
                sprintf(dist_str, "x:%3.2f", (float)Res.x);
                OLED_ShowString(0, 2,dist_str);
                sprintf(dist_str, "y:%3.2f", (float)Res.y);
                OLED_ShowString(0, 4,dist_str);
                sprintf(dist_str, "z:%3.2f", (float)Res.z);                
    OLED_ShowString(0, 6,dist_str);
但是不知道为什么总是连接不到标签,删除掉就没有问题,所以能不能帮忙看一下哪里有问题呀
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-12-23 00:25 , Processed in 0.018407 second(s), 6 queries , File On.

Powered by Discuz! X3.3

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

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