51uwb.cn

标题: UWB测距得的距离值偏小是怎么回事? [打印本页]

作者: Nephalem    时间: 2024-11-9 11:43
标题: UWB测距得的距离值偏小是怎么回事?
本帖最后由 Nephalem 于 2024-11-9 11:46 编辑

代码参考官方例程和论坛提供的历程,测距结果现在稳定偏小,大约测距1.2m时会显示1m,0.6m时为0.4m这样。
final_tx_time =   dwt_readsystimestamphi32()  + 0x17cdc00/10;
final_tx_time_copy = ((resp_rx_ts + (RESP_RX_TO_FINAL_TX_DLY_UUS * UUS_TO_DWT_TIME)) >> 8);

在标签部分代码,如果选择第一条代码,即论坛内示例,能运行,使用第二条代码(淘宝店提供的历程)就无法完成测距,接入串口发现标签有接收到“A”,但是基站没有接到F。
感觉是时间戳的问题或者天线延迟导致的测距结果偏小,但是不知道如何修改,还望不吝赐教。
并没有进行距离修正,现在的距离测算只是
poll_rx_ts_32 = (uint32)poll_rx_ts;
resp_tx_ts_32 = (uint32)resp_tx_ts;
final_rx_ts_32 = (uint32)final_rx_ts;
Ra = (double)(resp_rx_ts - poll_tx_ts);
Rb = (double)(final_rx_ts_32 - resp_tx_ts_32);
Da = (double)(final_tx_ts - resp_rx_ts);
Db = (double)(resp_tx_ts_32 - poll_rx_ts_32);
tof_dtu = (int64)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db));
tof = tof_dtu * DWT_TIME_UNITS;
distance_temp = tof * SPEED_OF_LIGHT;

基站时间戳部分都是正常的,都是接收或发送后读取即可。
标签的“F”包部分如下
poll_tx_ts = get_tx_timestamp_u64();
resp_rx_ts = get_rx_timestamp_u64();
final_tx_time =   dwt_readsystimestamphi32()  + 0x17cdc00/10;
dwt_setdelayedtrxtime(final_tx_time);
final_tx_ts = (((uint64)(final_tx_time & 0xFFFFFFFE)) << 8);
                               
msg_f_send.messageData[0]='F';//Final message
final_msg_set_ts(&msg_f_send.messageData[FINAL_MSG_POLL_TX_TS_IDX], poll_tx_ts);
final_msg_set_ts(&msg_f_send.messageData[FINAL_MSG_RESP_RX_TS_IDX], resp_rx_ts);
final_msg_set_ts(&msg_f_send.messageData[FINAL_MSG_FINAL_TX_TS_IDX], final_tx_ts);
dwt_writetxdata(25, (uint8 *)&msg_f_send, 0) ; // write the frame data
dwt_writetxfctrl(25,0,1);
dwt_starttx(DWT_START_TX_DELAYED);



作者: 蓝点无限    时间: 2024-11-11 08:33
稳定偏小,你调整下天线延迟




欢迎光临 51uwb.cn (http://51uwb.cn/) Powered by Discuz! X3.3