51uwb.cn

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

6基站测距问题

[复制链接]

13

主题

37

帖子

119

积分

注册会员

Rank: 2

积分
119
跳转到指定楼层
楼主
发表于 2025-4-13 22:37:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用的是BP50代码,但是将基站修改成6标签代码,出现通讯成功,但是测距没有显示问题。图片一些字母是为了确定调试程序那一部分出现的问题。
static void compute_angle_send_to_anthor0(int distance1, int distance2,int distance3,int distance4,int distance5,int distance6)函数以及修改过了,最大的基站数量以及基站位置的初始化。程序在这一部分没有满足 if (status_reg & SYS_STATUS_RXFCG)
                {
                                                                                OLED_ShowString(0,6,"tiaook");
                    /* Clear good/fail RX frame event in the DW1000 status register. */
                    dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);
                    /* A frame has been received, read it into the local buffer. */
                    frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;
                    if (frame_len <= RX_BUF_LEN)
                    {
                        dwt_readrxdata(rx_buffer, frame_len, 0);
                    }

                    if(rx_buffer[ALL_MSG_TAG_IDX] != TAG_ID)
                        continue;
                    rx_buffer[ALL_MSG_TAG_IDX] = 0;

                    /*As the sequence number field of the frame is not relevant, it is cleared to simplify the validation of the frame. */
                    rx_buffer[ALL_MSG_SN_IDX] = 0;
                                                                                OLED_ShowString(0,2,"444ok");
                    if (memcmp(rx_buffer, distance_msg, ALL_MSG_COMMON_LEN) == 0)
                    {
                        // final_distance = rx_buffer[10] + (float)rx_buffer[11]/100;
                        Anthordistance[rx_buffer[12]] +=(rx_buffer[10]*1000 + rx_buffer[11]*10);
                        Anthordistance_count[rx_buffer[12]] ++;
                                                                                        OLED_ShowString(0,4,"buff");
                        {
                            int Anchor_Index = 0;
                            while(Anchor_Index < ANCHOR_MAX_NUM)
                            {
                                                                                                                                OLED_ShowString(0,0," 444");
                                if(Anthordistance_count[Anchor_Index] >=ANCHOR_REFRESH_COUNT )
                                {
                                    distance_mange();
                                                                                                                                        OLED_ShowString(0,6,"   51UWB Node");
                                    Anchor_Index = 0;
                                    //clear all
                                    while(Anchor_Index < ANCHOR_MAX_NUM)
                                    {
                                        Anthordistance_count[Anchor_Index] = 0;
                                        Anthordistance[Anchor_Index] = 0;
                                        Anchor_Index++;
                                    }
                                    break;
                                }
                                Anchor_Index++;
                            }
                        }
                    }
                }不知道是不是延迟问题,/* Delay between frames, in UWB microseconds. See NOTE 4 below. */
/* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the
* frame length of approximately 2.46 ms with above configuration. */
#define POLL_RX_TO_RESP_TX_DLY_UUS 2600
/* This is the delay from the end of the frame transmission to the enable of the receiver, as programmed for the DW1000's wait for response feature. */
#define RESP_TX_TO_FINAL_RX_DLY_UUS 500
/* Receive final timeout. See NOTE 5 below. */
#define FINAL_RX_TIMEOUT_UUS 3300


/* Delay between frames, in UWB microseconds. See NOTE 4 below. */
/* This is the delay from the end of the frame transmission to the enable of the receiver, as programmed for the DW1000's wait for response feature. */
#define POLL_TX_TO_RESP_RX_DLY_UUS 150//150
/* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the
* frame length of approximately 2.66 ms with above configuration. */
#define RESP_RX_TO_FINAL_TX_DLY_UUS 3800 //2700 will fail
/* Receive response timeout. See NOTE 5 below. */
#define RESP_RX_TIMEOUT_UUS 2700
想问一下应该怎么修改呢

f6f30a683c291a52980fc0b1f630ed03.jpg (348.52 KB, 下载次数: 42)

可以正常发送和接受,但是测距没有出现

可以正常发送和接受,但是测距没有出现
回复

使用道具 举报

13

主题

37

帖子

119

积分

注册会员

Rank: 2

积分
119
沙发
 楼主| 发表于 2025-4-13 22:44:11 | 只看该作者
通过网盘分享的文件:sdkalman6.zip
链接: https://pan.baidu.com/s/1Lpy58NV6Sd-ppJelpMNBNQ?pwd=7762 提取码: 7762这个是我的代码,不知道是什么情况
回复

使用道具 举报

35

主题

1128

帖子

4831

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4831
板凳
发表于 2025-4-14 08:50:36 | 只看该作者
wwwaa 发表于 2025-4-13 22:44
通过网盘分享的文件:sdkalman6.zip
链接: https://pan.baidu.com/s/1Lpy58NV6Sd-ppJelpMNBNQ?pwd=7762 提 ...

标题是6基站,内容是6标签。实际你是要改那个?

在UWB测距过程中,不要加OLED显示,不然模块时间信息不满足,无法完成测距。

请详细提供你的需求,以及你具体改动了哪里,以及对应的现象(现在什么现象以及预期的现象是什么)
回复

使用道具 举报

13

主题

37

帖子

119

积分

注册会员

Rank: 2

积分
119
地板
 楼主| 发表于 2025-4-14 09:52:44 | 只看该作者
蓝点无限 发表于 2025-4-14 08:50
标题是6基站,内容是6标签。实际你是要改那个?

在UWB测距过程中,不要加OLED显示,不然模块时间信息 ...

改的是6基站,不加后面测试的也没有测距的显示,会出现问题,主要改的就是通过网盘分享的文件:修改图片.zip
链接: https://pan.baidu.com/s/1zB0GiyXg0Bnj3XM8Nh-ovg?pwd=573c 提取码: 573c
回复

使用道具 举报

35

主题

1128

帖子

4831

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4831
5#
发表于 2025-4-16 08:50:49 | 只看该作者
wwwaa 发表于 2025-4-14 09:52
改的是6基站,不加后面测试的也没有测距的显示,会出现问题,主要改的就是通过网盘分享的文件:修改图片. ...

分析了代码,没有看出太多问题。你们五基站测试有问题吗?
回复

使用道具 举报

13

主题

37

帖子

119

积分

注册会员

Rank: 2

积分
119
6#
 楼主| 发表于 2025-4-17 10:27:28 | 只看该作者
蓝点无限 发表于 2025-4-16 08:50
分析了代码,没有看出太多问题。你们五基站测试有问题吗?

找到问题了,六基站导致有个值位数超出了,但是还想问一下导入到上位机的时候,以及改过对应的值,但还是只有四个基站测距的距离,56都没有 else if(frame_type == 2)
    {
        range[0]=frame[4]|frame[5]<<8;
        range[1]=frame[6]|frame[7]<<8;
        range[2]=frame[8]|frame[9]<<8;
        range[3]=frame[10]|frame[11]<<8;
        range[4]=frame[12]|frame[13]<<8;
        range[5]=frame[14]|frame[15]<<8;
        ra[0] = range[0]*10;
        ra[1] = range[1]*10;
        ra[2] = range[2]*10;
        ra[3] = range[3]*10;
        ra[4] = range[4]*10;
        ra[5] = range[5]*10;
        processTagRangeReport(0, TAG_ID, range[0]*10, lnum, seq);
        processTagRangeReport(1, TAG_ID, range[1]*10, lnum, seq);
        processTagRangeReport(2, TAG_ID, range[2]*10, lnum, seq);
        processTagRangeReport(3, TAG_ID, range[3]*10, lnum, seq);
        processTagRangeReport(4, TAG_ID, range[4]*10, lnum, seq);
        processTagRangeReport(5, TAG_ID, range[5]*10, lnum, seq);
        trilaterateTag(TAG_ID, seq);,打印的range信息没有56距离。硬件上可以已经显示56测距的距离信息,不知道为什么
回复

使用道具 举报

13

主题

37

帖子

119

积分

注册会员

Rank: 2

积分
119
7#
 楼主| 发表于 2025-4-17 10:46:33 | 只看该作者
蓝点无限 发表于 2025-4-16 08:50
分析了代码,没有看出太多问题。你们五基站测试有问题吗?

打印了一下发现frame[12]  frame[13] frame[14]  frame[15]都是0好像没有识别到,但是我在硬件中加过了uint8 len = 0;
        angle_msg[LOCATION_FLAG_IDX] = 1;

        angle_msg[LOCATION_INFO_START_IDX + (len++)] = 'm';
        angle_msg[LOCATION_INFO_START_IDX + (len++)] = 'r';

        angle_msg[LOCATION_INFO_START_IDX + (len++)] = 0x02;
        angle_msg[LOCATION_INFO_START_IDX + (len++)] = TAG_ID;//TAG ID

        angle_msg[LOCATION_INFO_START_IDX + (len++)] = (uint8)(framenum&0xFF);
        angle_msg[LOCATION_INFO_START_IDX + (len++)] = (uint8)((framenum>>8)&0xFF);

        angle_msg[LOCATION_INFO_START_IDX + (len++)] = (uint8)((distance1/10)&0xFF);
        angle_msg[LOCATION_INFO_START_IDX + (len++)] = (uint8)((distance1/10 >>8)&0xFF);

        angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance2/10)&0xFF);
        angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance2/10 >>8)&0xFF);

        angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance3/10)&0xFF);
        angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance3/10 >>8)&0xFF);
                       


        if(ANCHOR_MAX_NUM > 3)
        {
            angle_msg[LOCATION_INFO_START_IDX + (len++)] = (uint8)((distance4/10)&0xFF);
            angle_msg[LOCATION_INFO_START_IDX + (len++)] = (uint8)((distance4/10 >>8)&0xFF);
                                                angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance5/10)&0xFF);
                                                angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance5/10 >>8)&0xFF);
                                          angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance6/10)&0xFF);
                                                angle_msg[LOCATION_INFO_START_IDX + (len++)] =  (uint8)((distance6/10 >>8)&0xFF);
        }#define ALL_MSG_SN_IDX 2
#define ALL_MSG_TAG_IDX 3
#define FINAL_MSG_POLL_TX_TS_IDX 10
#define FINAL_MSG_RESP_RX_TS_IDX 14
#define FINAL_MSG_FINAL_TX_TS_IDX 18
#define FINAL_MSG_TS_LEN 4
#define ANGLE_MSG_IDX 10
#define LOCATION_FLAG_IDX 11
#define LOCATION_INFO_LEN_IDX 12
#define LOCATION_INFO_START_IDX 13
#define ANGLE_MSG_MAX_LEN 40把最后一个延长可以正常在硬件看到距离但是不知道为什么45的距离信息发送不到上位机
回复

使用道具 举报

35

主题

1128

帖子

4831

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4831
8#
发表于 7 天前 | 只看该作者
wwwaa 发表于 2025-4-17 10:46
打印了一下发现frame[12]  frame[13] frame[14]  frame[15]都是0好像没有识别到,但是我在硬件中加过了ui ...

上述代码是标签汇总,可以直接用printf函数打印看标签是否将各个距离准确放到angle 数据包

另外,基站收到这个angle_msg后通过串口发送给上位机,检查下发送上位机时数据长度是否有调整,如果没有调整按照修改后的数据包长度修改基站串口发送函数
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2025-4-25 18:53 , Processed in 0.019642 second(s), 6 queries , File On.

Powered by Discuz! X3.3

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

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