This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AWR1843BOOST:中距离雷达实验室输出延迟

Guru**** 2556920 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1539012/awr1843boost-medium-range-radar-lab-output-latency

器件型号:AWR1843BOOST


工具/软件:

您好、我正在使用配置为仅使用 MRR 子帧的 MRR Lab。 但雷达模块似乎一次每 60ms 发送两个 MRR 子帧、而不是每 30ms 发送一个 MRR 子帧、因此即使每个子帧的持续时间为 30ms、但我没有获得 30fps、因为雷达模块固定在第一个子帧上等待第二个子帧完成、然后再发送出去。 下面是我用于解码传入原始数据的 python 代码、您可以看到、我每次收到的消息都有两个标头、即两个子帧。 如何更改 MRR 代码、使其每 30ms 发出子帧、也许是 dss_main.c 中的 MRR_DSS_DataPathOutputLogging 函数?

import serial
from mrr_structs import MRR_session

magic_word = b"\x02\x01\x04\x03\x06\x05\x08\x07"
ser = serial.Serial('COM5', 921600, timeout=0.1)
buffer = b""

def update():
    global buffer
    if ser.in_waiting:
        buffer += ser.read(ser.in_waiting)
        ptr = buffer.find(magic_word)
        count = buffer.count(magic_word)
        print(count)

        if ptr != -1:
            try:
                session = MRR_session(buffer, ptr)
                messages = session.get_dict()
                print(messages)
                ##OUTPUT##
                #{'messages': [{'header': {'magic_word_0': 258, 'magic_word_1': 772, 'magic_word_2': 1286, 'magic_word_3': 1800, 'version': 50725376, 'totalPacketLen': 64, 'platform': 661058, 'frameNumber': 93315, 'timeCpuCycles': 389067100, 'numDetectedObj': 0, 'numTLVs': 0, 'subFrameNumber': 0}, 'body': []}, 
                #              {'header': {'magic_word_0': 258, 'magic_word_1': 772, 'magic_word_2': 1286, 'magic_word_3': 1800, 'version': 50725376, 'totalPacketLen': 64, 'platform': 661058, 'frameNumber': 93316, 'timeCpuCycles': 407057434, 'numDetectedObj': 0, 'numTLVs': 0, 'subFrameNumber': 0}, 'body': []}]}
                ##########
                buffer = b""
            except Exception as e:
                print("Incomplete or corrupt message:", e)

while True:
    update()

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    开箱即用演示也会出现同样的问题。 我使用传感估算器将雷达配置为以 35FPS 运行、并尝试使用支持的最大波特率 3,125,000bps。 但是、当我运行 Python 脚本来接收和解析数据时、我始终观察到每~60ms 就会一起接收两个数据包、因此有效帧速率仅为 17FPS。

    我想确认:

    • 这是雷达硬件的限制、或者说

    • Python 脚本中是否存在用于数据接收和解析的瓶颈?

    我附上了配置文件和用于数据解析的 Python 代码。

    drive.google.com/.../15qiu0v_lNgurTJebSu7IRy0RoA5Q7kw-

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hi Fong、

     在 OOB 演示中、配置的数据端口波特率为 921600。 您是否更改了波特率?

    您能否确认 ADC 数据处理是否在给定的帧时间内完成? 您能否共享运行 OOB 演示所用的配置?

    这是雷达硬件的限制吗

    这不是器件限制。 下面是 “C:\ti\mmwave_DFP_01_02_06_03\docs\mmwave-radar-Interface-Control.pdf“中的屏幕截图、其中显示了可配置的最小和最大帧周期。

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 附件是解析后使用的配置文件和输出示例。
    frameCfg 为 0 2 88 0 30 1 0。 因此、30ms 周期、大约 33fps。 我一次收到两个数据包、但仍使用 921600 波特率。 我尝试将 configDataPort 3125000 1 添加到配置文件中、但仍然是相同的。

    sensorStop
    flushCfg
    dfeDataOutputMode 1
    channelCfg 15 7 0
    adcCfg 2 1
    adcbufCfg -1 0 1 1 1
    profileCfg 0 76 2 3.9 16.11 0 0 19.55 1 128 11414 0 0 30
    chirpCfg 0 0 0 0 0 0 0 1
    chirpCfg 1 1 0 0 0 0 0 2
    chirpCfg 2 2 0 0 0 0 0 4
    frameCfg 0 2 88 0 30 1 0
    lowPower 0 0
    guiMonitor -1 1 0 0 0 0 1
    cfarCfg -1 0 2 8 4 3 0 15 1
    cfarCfg -1 1 0 4 2 3 1 15 1
    multiObjBeamForming -1 1 0.5
    clutterRemoval -1 1
    calibDcRangeSig -1 0 -5 8 256
    extendedMaxVelocity -1 0
    lvdsStreamCfg -1 0 0 0
    compRangeBiasAndRxChanPhase 0.0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
    measureRangeBiasAndRxChanPhase 0 1.5 0.2
    CQRxSatMonitor 0 3 4 23 0
    CQSigImgMonitor 0 47 4
    analogMonitor 0 0
    aoaFovCfg -1 -90 90 -90 90
    cfarFovCfg -1 0 0 49.99
    cfarFovCfg -1 1 -13.89 13.89
    calibData 0 0 0
    sensorStart


    解析后的输出示例:

    数据包 1:
    {'header ':{'magic0':258、'magic1':772、'magic2':1286、'magic3':1800、'version ':50725376、 'packet_len':192、'platform':661571、'frame_num':70、'cpu_cycle':1501060051、'num_obj':3、 'num_TLV':4、'subframe_num':0}、'objects':[{'x':0.04286005347967148、'y':0.5945236086845398、'z':–0.3390761017793774、 'v':0.2831193506717682}、{'x':0.02143002673983574、'y':0.5683829188346863、'z':–0.38307902216911316、'v':–0.2831193506717682}、 {'x':0.06429007649421692、'y':0.583331286907196、'z':–0.3547665774822235、'v':–0.2831193506717682}]、'sr':[122、 114,114]、“噪声“:[424,423,423]、 'statsinfo':[{'interFrameProcessingTime':6159、'transmitOutputTime':2248、'interFrameProcessingMargin':19047、'interChirpProcessingMargin':0、'activeFrameCPULoad':0、 'InterFrameCPULoad':13}]}

    数据包 2:
    {'header ':{'magic0':258、'magic1':772、'magic2':1286、'magic3':1800、'version ':50725376、 'packet_len':192、'platform':661571、'frame_num':71、'cpu_cycle':1507059929、'num_obj':3、 'num_TLV':4、'subframe_num':0}、'objects':[{'x':0.107150137424469、'y':0.45845332741737366、'z':–0.4986053705215454、 'v':0.2831193506717682}、{'x':0.15001018345355988、'y':0.42576974630355835、'z':–162218809127808、'v':–0.2831193506717682}、 {'x':0.08572010695934296、'y':0.4647745192050934、'z':–0.4968950152397156、'v':–0.2831193506717682}]、'sr':[139, 148,148]、“噪音“:[424,405,405]、 'statsinfo':[{'interFrameProcessingTime':6157、'transmitOutputTime':2249、'interFrameProcessingMargin':19038、'interChirpProcessingMargin':0、'activeFrameCPULoad':0、 'InterFrameCPULoad':13}]}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的 Python 代码从雷达读取数据以供参考:

    def read_data_from_sensor(port, baudrate):
        try:
            with serial.Serial(port, baudrate, timeout=0.001) as ser:
                print(f"[INFO] Listening to {port}...")
                while True:
                    data = ser.read(ser.in_waiting)
                    magic_indices = find_magic_indices(data)
                    packets = []
                    for i in range(len(magic_indices)):
                        start = magic_indices[i]
                        end = magic_indices[i+1] if i+1 < len(magic_indices) else len(data)
                        packet = data[start:end]
                        parsed = decode_packet(packet)
                        packets.append(parsed)
                    for i, pkt in enumerate(packets):
                        print(f"\nPacket {i+1}:")
                        print(pkt)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fong、

    调试自定义代码超出了 E2E 的范围。 我认为问题与解析器脚本有关、而不是演示应用程序有关、因为应用程序在没有任何断言的情况下运行并传输 UART 数据。 在配置的帧周期下、帧将每 30ms 触发一次、处理 ADC 数据、还通过 UART 传输对象数据。  

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,感谢您的答复。 我注意到、当我增加测量速率(即将帧周期减少到 15ms)时、我一次可以收到四个连续的帧、这可能是因为 15ms× 4 = 60ms、这与轮询间隔相匹配。 如果我将帧周期设置为 60ms、则只会接收一个帧。

    这可能与 pyserial 如何读取缓冲数据或读取循环中的时序不匹配有关。 如果有其他工程师遇到这种行为或有见解、感谢您提供意见。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fong、

    我建议您查看 C:\ti\radar_toolbox_ \tools\visualizers\visualizers\visualizer\visualizer Industrial_Visualizer 或 C:\ti\radar_toolbox\tools\tools\visualizer 中的任何 Applications_Visualizer 可视化工具。

    如果您仍遇到问题、请在线搜索此问题、因为此查询与 python 库相关。

    此致、

    Samhitha