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.

[参考译文] AWR2944PEVM:跟踪在 AWR2944 SDK 演示中设置点云坐标和速度的位置

Guru**** 2538930 points
Other Parts Discussed in Thread: AWR2944PEVM

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1558957/awr2944pevm-tracking-where-point-cloud-coordinates-and-velocity-are-set-in-awr2944-sdk-demo

器件型号:AWR2944PEVM


工具/软件:

嗨、

我们的目标是确定在 SDK 代码中设置点云值 (x、y、z、velocity) 的位置、以便我们可以在处理流水线中正确地添加和使用 rangeIdx 和 dopplerIdx。

我们将使用 AWR2944PEVM 电路板、以及从 SDK mmwave_mcuplus_sdk_04_07_01_04 加载的 awr2x44P_mmw_demoTDMenet.appimage 演示的修改版本。 我们修改的代码是 DPIF_PointCloudCartesian 结构、用于包含 rangeIdx 和 dopplerIdx 信息:
typedef 结构 DPIF_PointCloudCartesian_t

  悬空 x;
  浮动 y;
  浮动 z;
  浮 速;
  int16_t rangeIdx;  /*新*/
  int16_t dobplerIdx;/*新*/
}DPIF_PointCloudCartesian;
添加这一内容的原因是、稍后在处理流水线中、我们希望收集每个检测点附近的多普勒数据并通过以太网发送。 我的问题是:代码中的 x、y、z 和速度值设置在哪里? 我找到了一些可能的位置并放置了虚拟值、例如 aoaprochwa.c 中的第 1903 行:
  objOut[objOutIdx].x = x;
  objOut[objOutIdx].y = y;
  objOut[objOutIdx].z = z;

  objOut[objOutIdx].velocity = params->dopplerStep *(float) dopplerIdx;
  objOut[objOutIdx].rangeIdx = 10;/*此处设置虚拟值*/
  objOut[objOutIdx].dopplerIdx = 10;/*此处设置虚拟值*/
  objOutSideInfo[objOutIdx].noise = objIn[objInIdx].noise;
  objOutSideInfo[objOutIdx].SNR = objIn[objInIdx].SNR;
  RES->detObj2dAzimIdx[objOutIdx]=(uint8_t) maxIdx;


在 aoaprochwa.c 中的第 2870 行:
    对于 (idx=0;idx < numObjsIn;idx++)
    {
      range =(float) res->cfarRngDopSnrList[idx].rangeIdx * DPParams->rangeStep;
      RES->detObjOut[idx].y =范围;
      RES->detObjOut[idx].x = 0.0F;
      RES->detObjOut[idx].z = 0.0F;
      temp = AOA_Dopply_IDX_to_signed (res->cfarRngDopSnrList[idx].dopplerIdx、DPParams->numDopplerBins);
      RES->detObjOut[idx].rangeIdx = 20;/*此处设置的虚拟值*/
      RES->detObjOut[idx].dopplerIdx = 20;/*此处为虚拟值*/
      Res->detObjOut[idx].velocity = DPParams->dopplerStep *(float) temp;
      Res->detObjOutSideInfo[idx].SNR = res->cfarRngDopSnrList[idx].SNR;
      Res->detObjOutSideInfo[idx].noise = res->cfarRngDopSnrList[idx].noise;
    }


但是、在使用 CCS 20.2.0 进行调试时、我会获得以下输出:
Cortex_R5_0:点:[0.053103、–0.066911、0.000000]- 0.406067 m/s
Cortex_R5_0:CFAR:RangeIdx:1698、DopplerIdx:16125
Cortex_R5_0:点:[0.418488、0.000000、1.457062] 1.930595m/s
Cortex_R5_0:CFAR:RangeIdx:22879、DopplerIdx:–16531.
Cortex_R5_0:点:[0.000000、0.000000、0.000000] 0.000000 m/s
Cortex_R5_0:CFAR:RangeIdx:0、DopplerIdx:0

这看起来像是来自未初始化变量的随机/垃圾值。 由于这些垃圾值,我怀疑 x、y、z 和 velocity 的值被设置在代码中的其他位置,而不是在我定位的位置。 如果有人能帮助我解决这个问题或指出 x、y、z 和速度的设置位置、我将非常感激。

我使用的配置如下:
%****************************************************************************
为 SDK 版本创建的百分比:04.07
使用可视化工具版本:4.7.0.0 创建的百分比
%频率:77
%平台:AWR2X44P
%场景分类器:best_range_res
%方位角分辨率(度):15 +仰角
%距离分辨率 (m):0.04
%最大不模糊距离 (m):9.02
%最大径向速度 (m/s):1
%径向速度分辨率 (m/s):0.13
帧持续时间百分比(毫秒):100
% RF 校准数据:无
范围检测阈值百分比 (dB):15
%多普勒检测阈值 (dB):15
%范围峰值分组:已启用
%多普勒峰分组:已启用
%静态干扰消除:已禁用
%到达角 FOV:全 FOV
%范围 FOV:全 FOV
%多普勒 FOV:全 FOV
%****************************************************************************
sensorStop
flushCfg
dfeDataOutputMode 1
channelCfg 15 11 0 0 0
adcCfg 2 0
adcbufCfg –1 1 1 1
低功率 0 0
profileCfg 0 77 267 2.5 57.14 0 0 70 1 272 5070 0 30
chirpCfg 0 0 0 0 0 0 0 1
chirpCfg 1 1 1 0 0 0 0 2
chirpCfg 2 2 0 0 0 0 0 8
frameCfg 0 2 16 0 272 100 1 0
低功率 0 0
guiMonitor –1 1 0 0 0 1
antGeometryCfg 1 0 1 2 1 7 1 9 1 3 1 5 1 10 1 12 1 6 1 8 1 13 1 15 0 9 0 11 0 16 0 18 0.5
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
calibDcRangeSig –1 0 –5 8 256
离合器拆卸–1 0
cfarFovCfg –1 0 0 30
CfarFovCfg –1 1 - 1.00
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 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
extendedMaxVelocity –1 0
MeasureRangeBiasAndRxChanPhase 0 1.5 0.2
aoFovCfg –1 –90 90 –90 90
calibData 0 0 0
enetStreamCfg 1 192 168 1 10.
sensorStart

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

    您好:

    可以尝试在 DPC_ObjDet_estimateXYZ () 函数的 objectdetection_elevEst.c 中执行此操作。 我将附上带有行号的代码屏幕截图。

    此致、

    Gabriel

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

    嗨、Gabriel、

    我修改了 objectdetection_elevEst.c 中的代码、如下所示:
    IF (((azimSinPhase > subframeCfg->aaovSinVal.minAzimuthDeg)&&(azimSinPhase < subframeCfg->aoaFovSinVal.maxAzimthDeg))
      {
      /*存储 x、y、z 值*/
      objOut[ValidObjIdx].z = z;
      objOut[ValidObjIdx].x = x;
      objOut[ValidObjIdx].y =(float) sqrt (ySquared);
      objOut[ValidObjIdx].dopplerIdx = 10;/*虚拟值*/
      objOut[ValidObjIdx].rangeIdx = 10;/*虚拟值*/
      /*获取和存储速度*/
      if (detObjList[objIdx].dopIdxActual > numDopplerBins / 2u)
      {
    但我仍然在 rangeIdx 和 dopplerIdx 的输出中看到随机/垃圾值:
    Cortex_R5_0:启动传感器(发出 MMWAVE_START)
    Cortex_R5_0:RANGE[0]:1005426282、多普勒[0]:100386714
    UART 处理未完成:numObjOut 11 Time 1136
    Cortex_R5_0:x[0]:–0.059716、y[0]:0.031553、z[0]:0.081906

    在我的初始帖子中、我不清楚我使用的是哪个演示。 我使用的是 TDM 演示、而不是 DDM 演示、从我可以看到的内容来看、只有 DMM 演示使用 objectdetection_elevEst.c 文件。 目前、我已尝试将我的虚拟值添加到以下文件/行中:
    - aoaprochwa.c 行 1906 和 2870
    - DPC\objectdetectionobjdethwaDDMA\objectdetection.c src 第 1203 行  
    - DPC\objectdetectionobjdethwaDDMA\objectdetection_elevEst.c src 行 996 和 469
    但调试打印输出仍会显示垃圾/随机值。 在这些地方,我也尝试将 x 值修改为一个虚拟值,但这也没有显示在打印输出中,表明代码没有被执行。 因此、我想知道使用 mmwave_mcuplus_sdk_04_07_01_04 SDK 为 AWR2944PEVM 的 TDMenet 演示设置的 x、y、z 和速度值的位置。

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

    您好:

    我注意到您在“objectdetectionobjdethwaDDMA"文件夹“文件夹中进行了 objectdetection.c 更改。 此代码仅在 DDMA 演示中使用、不在 TDM 演示中使用。 请尝试在此路径中对以下文件进行更改

    “C:\ti\mmwave_mcuplus_sdk_04_07_01_03\mmwave_mcuplus_sdk_04_07_01_03\ti\datapath\dpc\objectdetection\objdetection\objdethwa\objectdetection.c“ src

    此致、

    Gabriel

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

    嗨、Gabriel、

    我们已经尝试更改该文件。

    此致、

    埃米尔

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

    您好:

    请给我几天时间来进一步调查这个问题。

    此致、

    Gabriel

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

    您好:

    我能够打印正确的虚拟值、并将分享我如何打印的步骤。 这是控制台输出

    1) 在 dpif_point.h 的 DPIF_PointCloudCartesian_t 结构中的以下路径为 rangeIdx 和 dopplerIdx 添加适当的定义

    C:\ti\mmwave_mcuplus_sdk_04_07_01_03\mmwave_mcuplus_sdk_04_07_01_03\ti\datapath\dpif\dpif_pointcloud.h

    2) 在 aoaprochwa.c 中的 AoAProcHWA_XYZthimation() 中添加类似这样的代码

    3) 这一步很重要,因为我相信这是你错过的。 然后您必须重新构建此库。 导航到以下 makefile 文件并重新构建库

    C:\ti\mmwave_mcuplus_sdk_04_07_01_03\mmwave_mcuplus_sdk_04_07_01_03\ti\datapath\dpu\aoproc\makefile

    4) 你可以打印这些信息,无论你喜欢,但这是我做的。 此代码添加到 MmwDemo_transmitProcessedOutput() 中的 mss_main.c 中。

    5) 然后重新编译整个 TDM 演示。 您应该会看到所需的值  

    此致、

    Gabriel