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.

IWR1443BOOST: I have Big issue with IWR1443BOOST -READING RAW DATA FOR OBJECT DETECTION

Part Number: IWR1443BOOST

I bought from the Internet this IWR1443BOOST hardware. I want to develop object detection software.However, I cannot do any thing. I spend thousends of hours but I have many issues. First of all, I installed over 3 gbyte and many software versions. Finally, it is working. Secondly, I cannot put in normal run when I use Code Composer Studio.

TEXAS I AM SAYING TO YOU, Please send me one example code with works my IWR1443BOOST and explain which version to use. I want to use this radar and develop object detection system but you cannot give clear information and knowledge on your forum .etc.

  • Former Member
    0 Former Member

    Hello,

    Can you provide details on which demo you are trying to run? You should begin with the SDK out of box demo. The details for running the demo as well as the necessary software are listed in the user’s guide of the lab.

    Amanda

  • Thank you your respond. You can find my question below. Yes I am using out of box demo.

    Is L3 memory while working SDK and web application I am seeing some data it is okay. However, I wrote some code to read directly L3 memory. This L3 is the raw data I mean output of the ADC or processed data ?

  • Former Member
    0 Former Member in reply to turhan kumrallar

    L3 is the radar cube or range-doppler FFT processed data.

    Please refer to the doxygen documentation details. Here you will see diagrams explaining the data processing flow and the data that is stored in L3.

  • I read all of them but still is not clear. Could you connect to my computer and I can show you what I have problem this will take many days. I am trying to collect data about 1 year. However, it is not okay for me. Still I don't have reliable data. 

    Now I am reading L3 but always it is changing. There is not good euclidean distance between the arrays.

  • Former Member
    0 Former Member in reply to turhan kumrallar

    Hello,

    Support is provided via this platform please explain in specifics what you have tried and the issue you are having.

    If the documentation is not clear please point to the section you need help understanding.

    Amanda

  • void MmwDemo_transmitProcessedOutput(UART_Handle uartHandle,

    MmwDemo_DataPathObj *obj)
    {
    MmwDemo_output_message_header header;
    MmwDemo_GuiMonSel *pGuiMonSel;
    uint32_t tlvIdx = 0;
    uint32_t i;
    uint32_t numPaddingBytes;
    uint32_t packetLen;
    uint8_t padding[MMWDEMO_OUTPUT_MSG_SEGMENT_LEN];

    MmwDemo_output_message_tl tl[MMWDEMO_OUTPUT_MSG_MAX];

    /* Get Gui Monitor configuration */
    pGuiMonSel = &gMmwMCB.cliCfg.guiMonSel;

    /* Clear message header */
    memset((void *)&header, 0, sizeof(MmwDemo_output_message_header));
    /* Header: */
    header.platform = 0xA1443;
    header.magicWord[0] = 0x0102;
    header.magicWord[1] = 0x0304;
    header.magicWord[2] = 0x0506;
    header.magicWord[3] = 0x0708;
    header.numDetectedObj = obj->numObjOut;
    header.version = MMWAVE_SDK_VERSION_BUILD | //DEBUG_VERSION
    (MMWAVE_SDK_VERSION_BUGFIX << 8) |
    (MMWAVE_SDK_VERSION_MINOR << 16) |
    (MMWAVE_SDK_VERSION_MAJOR << 24);

    packetLen = sizeof(MmwDemo_output_message_header);
    if (pGuiMonSel->detectedObjects && (obj->numObjOut > 0))
    {
    tl[tlvIdx].type = MMWDEMO_OUTPUT_MSG_DETECTED_POINTS;
    tl[tlvIdx].length = sizeof(MmwDemo_detectedObj) * obj->numObjOut +
    sizeof(MmwDemo_output_message_dataObjDescr);
    packetLen += sizeof(MmwDemo_output_message_tl) + tl[tlvIdx].length;
    tlvIdx++;
    }
    if (pGuiMonSel->logMagRange)
    {
    tl[tlvIdx].type = MMWDEMO_OUTPUT_MSG_RANGE_PROFILE;
    tl[tlvIdx].length = sizeof(uint16_t) * obj->numRangeBins;
    packetLen += sizeof(MmwDemo_output_message_tl) + tl[tlvIdx].length;
    tlvIdx++;
    }
    if (pGuiMonSel->noiseProfile)
    {
    tl[tlvIdx].type = MMWDEMO_OUTPUT_MSG_NOISE_PROFILE;
    tl[tlvIdx].length = sizeof(uint16_t) * obj->numRangeBins;
    packetLen += sizeof(MmwDemo_output_message_tl) + tl[tlvIdx].length;
    tlvIdx++;
    }
    if (pGuiMonSel->rangeAzimuthHeatMap)
    {
    tl[tlvIdx].type = MMWDEMO_OUTPUT_MSG_AZIMUT_STATIC_HEAT_MAP;
    tl[tlvIdx].length = obj->numRangeBins * obj->numVirtualAntAzim * sizeof(uint32_t);
    packetLen += sizeof(MmwDemo_output_message_tl) + tl[tlvIdx].length;
    tlvIdx++;
    }
    if (pGuiMonSel->rangeDopplerHeatMap)
    {
    tl[tlvIdx].type = MMWDEMO_OUTPUT_MSG_RANGE_DOPPLER_HEAT_MAP;
    tl[tlvIdx].length = obj->numRangeBins * obj->numDopplerBins * sizeof(uint16_t);
    packetLen += sizeof(MmwDemo_output_message_tl) + tl[tlvIdx].length;
    tlvIdx++;
    }
    if (pGuiMonSel->statsInfo)
    {
    tl[tlvIdx].type = MMWDEMO_OUTPUT_MSG_STATS;
    tl[tlvIdx].length = sizeof(MmwDemo_output_message_stats);
    packetLen += sizeof(MmwDemo_output_message_tl) + tl[tlvIdx].length;
    tlvIdx++;
    }

    header.numTLVs = tlvIdx;
    /* Round up packet length to multiple of MMWDEMO_OUTPUT_MSG_SEGMENT_LEN */
    header.totalPacketLen = MMWDEMO_OUTPUT_MSG_SEGMENT_LEN *
    ((packetLen + (MMWDEMO_OUTPUT_MSG_SEGMENT_LEN-1))/MMWDEMO_OUTPUT_MSG_SEGMENT_LEN);
    header.timeCpuCycles = Pmu_getCount(0);
    header.frameNumber = obj->frameStartIntCounter;

    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&header,
    sizeof(MmwDemo_output_message_header));
    */
    tlvIdx = 0;
    /* Send detected Objects */
    if ((pGuiMonSel->detectedObjects == 1) && (obj->numObjOut > 0))
    {
    MmwDemo_output_message_dataObjDescr descr;
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&tl[tlvIdx],
    sizeof(MmwDemo_output_message_tl));
    */
    /* Send objects descriptor */
    descr.numDetetedObj = (uint16_t) obj->numObjOut;
    descr.xyzQFormat = (uint16_t) obj->xyzOutputQFormat;
    // UART_writePolling (uartHandle, (uint8_t*)&descr, sizeof(MmwDemo_output_message_dataObjDescr));

    /*Send array of objects */
    // UART_writePolling (uartHandle, (uint8_t*)obj->objOut, sizeof(MmwDemo_detectedObj) * obj->numObjOut);
    tlvIdx++;
    }

    /* Send Range profile */
    if (pGuiMonSel->logMagRange)
    {
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&tl[tlvIdx],
    sizeof(MmwDemo_output_message_tl));
    */
    for(i = 0; i < obj->numRangeBins; i++)
    {
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&obj->rangeDopplerLogMagMatrix[i*obj->numDopplerBins],
    sizeof(uint16_t));
    */
    }
    tlvIdx++;
    }

    /* Send noise profile */
    if (pGuiMonSel->noiseProfile)
    {
    uint32_t maxDopIdx = obj->numDopplerBins/2 -1;
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&tl[tlvIdx],
    sizeof(MmwDemo_output_message_tl));
    */
    for(i = 0; i < obj->numRangeBins; i++)
    {/*
    UART_writePolling (uartHandle,
    (uint8_t*)&obj->rangeDopplerLogMagMatrix[i*obj->numDopplerBins + maxDopIdx],
    sizeof(uint16_t));
    */
    }
    tlvIdx++;
    }

    /* Send data for static azimuth heatmap */
    if (pGuiMonSel->rangeAzimuthHeatMap)
    {
    uint32_t skip = obj->numChirpsPerFrame * obj->numRxAntennas;
    uint32_t copySize = obj->numVirtualAntAzim * sizeof(uint32_t);
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&tl[tlvIdx],
    sizeof(MmwDemo_output_message_tl));


    for (i = 0; i < obj->numRangeBins; i++)
    {
    UART_writePolling (uartHandle,
    (uint8_t *) &obj->radarCube[i * skip],
    copySize);
    }
    */
    tlvIdx++;
    }

    /* Send data for range/Doppler heatmap */
    if (pGuiMonSel->rangeDopplerHeatMap == 1)
    {
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&tl[tlvIdx],
    sizeof(MmwDemo_output_message_tl));
    UART_writePolling (uartHandle,
    (uint8_t*)obj->rangeDopplerLogMagMatrix,
    tl[tlvIdx].length);
    tlvIdx++;
    */
    }

    /* Send stats information */
    if (pGuiMonSel->statsInfo == 1)
    {


    MmwDemo_output_message_stats stats;
    stats.interChirpProcessingMargin = 0; /* Not applicable */
    stats.interFrameProcessingMargin = (uint32_t) (obj->timingInfo.interFrameProcessingEndMargin/R4F_CLOCK_MHZ); /* In micro seconds */
    stats.interFrameProcessingTime = (uint32_t) (obj->timingInfo.interFrameProcCycles/R4F_CLOCK_MHZ); /* In micro seconds */
    stats.transmitOutputTime = (uint32_t) (obj->timingInfo.transmitOutputCycles/R4F_CLOCK_MHZ); /* In micro seconds */
    stats.activeFrameCPULoad = obj->timingInfo.activeFrameCPULoad;
    stats.interFrameCPULoad = obj->timingInfo.interFrameCPULoad;
    /*
    UART_writePolling (uartHandle,
    (uint8_t*)&tl[tlvIdx],
    sizeof(MmwDemo_output_message_tl));
    UART_writePolling (uartHandle,
    (uint8_t*)&stats,
    tl[tlvIdx].length);
    */
    tlvIdx++;
    }

    /* Send padding bytes */
    numPaddingBytes = MMWDEMO_OUTPUT_MSG_SEGMENT_LEN - (packetLen & (MMWDEMO_OUTPUT_MSG_SEGMENT_LEN-1));
    if (numPaddingBytes<MMWDEMO_OUTPUT_MSG_SEGMENT_LEN)
    { /*
    UART_writePolling (uartHandle,
    (uint8_t*)padding,
    numPaddingBytes);
    */
    }


    a4=5;
    if(PassNow % 15 == 0 )
    { a2=0;
    for(a5=0;a5<5000;a5++)
    {

    for(a1=0;a1<40;a1++)
    {

    a2 += gMmwL3[a5*40+a1] ;
    }


    RawData[a5] = a2/40 ;
    a2=0;
    }


    UART_writePolling (uartHandle, (uint8_t*)RawData, 5000 );


    sprintf(TestData,"##TurhanKumrallar##\r\n");
    // UART_writePolling (uartHandle, (char*)TestData, 23);
    //delay_ms(100);
    }
    PassNow++;

    // Globa_Transmitter_Is_Started++;

    a4=0;
    // turhan


    }

     

    // HERE MATLAB SENDS COMMAND TO START RADAR


    fprintf(IWR_CLI_SER,'sensorStop');
    pause(0.1);
    fprintf(IWR_CLI_SER,'flushCfg');
    pause(0.1);
    fprintf(IWR_CLI_SER,'dfeDataOutputMode 1');
    pause(0.1);
    fprintf(IWR_CLI_SER,'channelCfg 15 7 0');
    pause(0.1);
    fprintf(IWR_CLI_SER,'adcCfg 2 1');
    pause(0.1);
    fprintf(IWR_CLI_SER,'adcbufCfg 0 1 0 1');
    pause(0.1);
    fprintf(IWR_CLI_SER,'profileCfg 0 77 429 7 57.14 0 0 70 1 240 4884 0 0 30');
    pause(0.1);
    fprintf(IWR_CLI_SER,'chirpCfg 0 0 0 0 0 0 0 1');
    pause(0.1);
    fprintf(IWR_CLI_SER,'chirpCfg 1 1 1 1 0 0 0 4');
    pause(0.1);
    fprintf(IWR_CLI_SER,'frameCfg 0 1 16 0 100 1 0');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'lowPower 0 1');
    pause(0.1);
    fprintf(IWR_CLI_SER,'guiMonitor 1 2 0 0 0 0');
    pause(0.1);
    fprintf(IWR_CLI_SER,'cfarCfg 0 2 8 4 3 0 967');
    pause(0.1);
    fprintf(IWR_CLI_SER,'peakGrouping 1 0 0 1 56');
    pause(0.1);
    fprintf(IWR_CLI_SER,'multiObjBeamForming 1 0.5');
    pause(0.1);

    fprintf(IWR_CLI_SER,'clutterRemoval 0');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'calibDcRangeSig 0 -5 8 256');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'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');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'measureRangeBiasAndRxChanPhase 0 1.5 0.2');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'CQRxSatMonitor 0 3 5 123 0');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'CQSigImgMonitor 0 119 4');
    pause(0.1);
    %fprintf(IWR_CLI_SER,'analogMonitor 1 1');
    pause(0.1);
    fprintf(IWR_CLI_SER,'sensorStart');
    pause(0.1);

     I am reading gMmwL3 data and sending to matlab to process it. However, look the attachement I don't have any same data frame they are always changing among them. I am taking distance between two matrix and the result are %70 different. 

  • Former Member
    0 Former Member in reply to turhan kumrallar

    I don't understand what the axes in your plot is supposed to represent - can you clarify?

    But I think you're saying you are getting variable output. The problem is you have enabled the detected object list output in the guimonitor command. This means that size of the output packet for each frame will vary with the number of detected objects in that frame. You should disable the output if you don't need it. 

    Amanda

  • Did you check the code?  I am reading directly L3 memory.  Axis is array index.

  • a4=5;
    if(PassNow % 15 == 0 )
    { a2=0;
    for(a5=0;a5<5000;a5++)
    {

    for(a1=0;a1<40;a1++)
    {

    a2 += gMmwL3[a5*40+a1] ;
    }


    RawData[a5] = a2/40 ;
    a2=0;
    }


    UART_writePolling (uartHandle, (uint8_t*)RawData, 5000 );

    Can you check these codes?

  • Former Member
    0 Former Member in reply to turhan kumrallar

    Hello,

    It isn't clear what you are trying to do if you want to capture the radar cube why don't you just write the radarCube similar to how it is done for the rangeAzimuth Heatmap output?

    Amadna