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

Prodigy 20 points

Replies: 4

Views: 82

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..

4 Replies

  • 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
  • In reply to Vaibhav Mahimkar:

    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
  • In reply to Justin Curewitz:

    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.

  • In reply to Bruce Hu:

    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