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.

CCS/IWR6843ISK-ODS: Overhead People Counting Demo for detected target message

Part Number: IWR6843ISK-ODS

Tool/software: Code Composer Studio

I traced Overhead People Counting Demo souce code, and found something strange for below cases:
1. target info about accX/accY/accZ are assigned with dimension info (ex:targetList->target[n].accX = targetDescr[n].dim[0];)
2. No elements in MmwDemo_output_message_target struct to store dimensions info:depth, width, [height], doppler
3. However, TLV still have the output data for dimx/dimy/dimz     
Task_app.c
MmwDemo_appTask()
{
      for(n=0; n<tNum; n++) {
            targetList->target[n].tid  = (uint32_t)targetDescr[n].uid;
            targetList->target[n].posX = targetDescr[n].S[0];
            targetList->target[n].posY = targetDescr[n].S[1];
            targetList->target[n].posZ = targetDescr[n].S[2];
            targetList->target[n].velX = targetDescr[n].S[3];
            targetList->target[n].velY = targetDescr[n].S[4];
            targetList->target[n].velZ = targetDescr[n].S[5];
            targetList->target[n].accX = targetDescr[n].dim[0]; //refer to Gtrack.h & Mmw.output.h
            targetList->target[n].accY = targetDescr[n].dim[1]; //refer to Gtrack.h & Mmw.output.h
            targetList->target[n].accZ = targetDescr[n].dim[2]; //refer to Gtrack.h & Mmw.output.h
#ifndef ShortTarget
            memcpy(targetList->target[n].ec, targetDescr[n].EC, sizeof(targetDescr[n].EC));
            targetList->target[n].g = targetDescr[n].G;
#endif
        }
}
Gtrack.h
typedef struct
{
 /**  @brief   Tracking Unit Identifier */
 uint8_t uid;
 /**  @brief   Target Identifier */
 uint32_t tid;
 /**  @brief   State vector */
 float S[GTRACK_STATE_VECTOR_SIZE];
 /**  @brief   Group covariance matrix */
 float EC[GTRACK_MEASUREMENT_VECTOR_SIZE*GTRACK_MEASUREMENT_VECTOR_SIZE];
 /**  @brief   Gain factor */
 float G;
 /**  @brief   Estimated target dimensions: depth, width, [height], doppler */
 float dim[GTRACK_MEASUREMENT_VECTOR_SIZE];
} GTRACK_targetDesc;
Mmw.output.h
typedef struct MmwDemo_output_message_target_t
{
    /*! @brief   tracking ID */
    uint32_t    tid;
    /*! @brief   Detected target X coordinate, in m */
    float  posX;
    /*! @brief   Detected target Y coordinate, in m */
    float  posY;
    float       posZ;
    /*! @brief   Detected target X velocity, in m/s */
    float  velX;
    /*! @brief   Detected target Y velocity, in m/s */
    float  velY;
    float       velZ;
    /*! @brief   Detected target X acceleration, in m/s2 */
    float       accX;
    /*! @brief   Detected target Y acceleration, in m/s2 */
    float       accY;
    float       accZ;
#ifndef ShortTarget
    /*! @brief   Target Error covarience matrix, [3x3 float], in row major order, range, azimuth, doppler */
    float  ec[16];
    float       g;
#endif
 
} MmwDemo_output_message_target;

For the document -Overhead_People_Tracking_and_Stance_Detection_users_guide.pdf, it says dimx/dimy/dimz are the target size in x/y/z dimension.
Seems need to update overhead People Counting Demo sample code for such issue..
  • Hello,

    Thank you for detailed look into the Demo code for overhead counting. We will get back to you on whether this was intentional or effect of reuse of code on next working day.

    Thank you,
    Vaibhav
  • Hi Bruce,

    The output data is the dimX, dimy, dimZ of the target. The parameters for the output struct simply were not renamed. Feel free to edit the code as you need to get the information you want. S[6], S[7], S[8] are the acceleration values.

    Regards,
    Justin
  • Hi Justin,

    Do you mean I can rename the codes as below to get target size in X/Y/Z dimension?  


    typedef struct MmwDemo_output_message_target_t
    {
    /*! @brief tracking ID */
    uint32_t tid;
    /*! @brief Detected target X coordinate, in m */
    float posX;
    /*! @brief Detected target Y coordinate, in m */
    float posY;
    float posZ;
    /*! @brief Detected target X velocity, in m/s */
    float velX;
    /*! @brief Detected target Y velocity, in m/s */
    float velY;
    float velZ;
    /*! @brief Detected target X acceleration, in m/s2 */
    float accX; // rename to float dimX;
    /*! @brief Detected target Y acceleration, in m/s2 */
    float accY; // rename to float dimY;
    float accZ; // rename to float dimZ;
    #ifndef ShortTarget
    /*! @brief Target Error covarience matrix, [3x3 float], in row major order, range, azimuth, doppler */
    float ec[16];
    float g;
    #endif

    } MmwDemo_output_message_target;

    Thanks.

  • Hi Bruce,

    You can rename those if you want - right now they are being assigned the dimension values, and then being fed to the visualizer through UART.  So you are already getting the dimension values.

     targetList->target[n].accX = targetDescr[n].S[6]; //refer to Gtrack.h & Mmw.output.h
     targetList->target[n].accY = targetDescr[n].S[7]; //refer to Gtrack.h & Mmw.output.h
     targetList->target[n].accZ = targetDescr[n].S[8]; //refer to Gtrack.h & Mmw.output.h

    Making the above change will give the acceleration values.

    Regards,

    Justin

  • Hi Justin,

    I checked "mmw_pplcount_demo_default.cfg",  find some new parameters(as below) and  are not the same defined in "pplcount_customization_guide.pdf".

    Could you please help to provide document to explain for such parameters?

    SceneryParam
    GatingParam
    AllocationParam
    VariationParam
    MaxAcceleration
    AllocZone
    CloudPersistence
    SNRFilter

    Thanks.

  • Hi Bruce,

    Scenery Param: <Left X Limit> <Right X Limit> <Close Y limit> <Far Y limit> <Bottom Z Limit> <Top Z Limit>

    Gating Param: <Gating Gain> <Y Limit> <X Limit> <Z Limit> <Doppler Limit>

    Allocation Param <SNR Threshold> <Obscured SNR Threshold> <Velocity Threshold> <Points Threshold> <Max Distance> <Max Doppler Offset>

    Variation Param - do not change

    Max Acceleration - <X acceleration> <Y Acceleration> <Z acceleration> - use this to set the maximum amount the tracked object can accelerate in any direction.  Keep it small for people, as they show velocity in many directions while walking. If this is large, it is easy for the track to get lost

    AllocZone - do not change

    CloudPersistence - do not change

    SNRFilter - <max distance to filter> <SNR Threshold> - points with the max distance must have an SNR greater than the Threshold to be passed to the tracker

    Regards,

    Justin

  • Hi Justin,

    For lab0011-pplcount in mmwave_industrial_toolbox_3_1_1, it provide document - "pplcount_customization_guide.pdf".

    Can you also provide the document for  lab0020_pplcount_Overhead to know more detail info?

    Thanks. 

  • Hi Bruce,

    That document does not exist in a complete form.

    regards,

    Justin

  • Hi Justin,

    Some questions for below items:
    - Allocation Param <SNR Threshold> <Obscured SNR Threshold> <Velocity Threshold> <Points Threshold> <Max Distance> <Max Doppler Offset>
    - SNRFilter - <max distance to filter> <SNR Threshold> 
    1. What does "Obscured SNR Threshold" mean?
    2. For the example:  SNRFilter 4 40
        The unit of 4 is cm(centimeters) or m(meters) ?
    Thanks.
    BRs
    Bruce 
  • Hi Bruce,

    1. Obscured threshold is when a potential target is behind another target. this is a special case where the target may be a ghost due to multipath, so a different SNR threshold can be used to help filter those.

    2. The unit is in meters. This line requires all points within 4 meters to have SNR of 40 or above to be used with the tracker. Otherwise, they are discarded.

    Regards,
    Justin
  • Hi Justin,

    For below case, could you please explain more about "Obscured SNR Threshold"? 

    How does it be used in the case when a potential target is behind another target?

    =>

    AllocationParam 50 120 0.01 5 1 20

    Thanks.

    BRs

    Bruce

  • Hi Bruce,

    In the configuration you have given above:

    Case 1: Potential cluster for allocation is not obscured - cumulative SNR of the points associated with the target must be greater than or equal to 50.

    Case 2: Potential cluster for allocation is behind another tracked object (obscured). I.e.: There is a tracked target between the radar sensor and the cluster that is being considered for allocation. In this case, the cumulative SNR must be 120 or above.

    Regards,
    Justin