zoukankan      html  css  js  c++  java
  • 一种快速UWB 测距方法(单周期法) -- 代码实现

    在之前的分析过一种快速测距方法原理:https://www.cnblogs.com/tuzhuke/p/12359038.html

    这里做代码实现。 测距分为设备A 和 设备B,与原理部分NodeA NodeB对应。

    代码中,设备B,也就是NodeB,启动发送。

    NodeB:将之前的两个时间戳加载到数据包中,开始上电的时候,这个时间戳信息可能是无效的。

    NodeA 接收到NodeB,根据原理部分,需要处理自己的时间戳,同时通过数据包的信息,获取NodeB 时间戳信息,然后变可以计算距离信息

    NodeA,收到NodeB后,同时要回复一条信息

    case 'D'://distance
       msg_f_send.messageData[0]='d';
       msg_f_send.messageData[1]=msg_f->messageData[1];
    
       dwt_writetxdata(psduLength, (uint8 *)&msg_f_send, 0) ; // write the frame data
       dwt_writetxfctrl(psduLength, 0);
       /* Start transmission. */
       dwt_starttx(DWT_START_TX_IMMEDIATE);
       //MUST WAIT!!!!!
       while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_TXFRS)))
       { };
       dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_TXFRS|SYS_STATUS_RXFCG);
       Handle_TimeStamp();
    以上就是NodeA处理的所有主要事件。NodeA发送给NodeB,Node B更新事件戳,并准备下次发送给NodeA,依次往复不停测距。

    NodeB发送时定时发送的,可以改成收到NodeA信息后,立马发送,测距频率会大幅提高!

                    case 'd'://distance
                        BroadCastComplete =1;
                        tx_node[msg_f_recv->messageData[1]].tx_ts[0] = get_tx_timestamp_u64();
                        tx_node[msg_f_recv->messageData[1]].rx_ts[0] = get_rx_timestamp_u64();
                        break;  

    代码下载:51uwb.cn

    更多信息请关注51uwb.cn

  • 相关阅读:
    DLUTOJ 1209 字典序和r-子集
    C++ Standard-Library Random Numbers
    后缀数组模板
    UVA 1398 Meteor
    STL Iterators
    hihocoder1187 Divisors
    51nod 子序列的个数(动态规划)
    51nod 最长单增子序列(动态规划)
    51nod 更难的矩阵取数问题(动态规划)
    51nod 多重背包问题(动态规划)
  • 原文地址:https://www.cnblogs.com/tuzhuke/p/12431115.html
Copyright © 2011-2022 走看看