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.

IWR1642BOOST: mmwave demolab with IWR1642

Part Number: IWR1642BOOST

Hi,

I want know,where exctly the range value is calculated prior to display on visualizer?

What is the resoluton of range, like( it measure only 100cm, 90cm in steps of 10 cm or in steps of cm is it possible after reaching near the object by 10 cm, 9cm,8cm?

I have already checked with High accuracy lab but since FOV is coming very less. I want to try this with mmwave demo, If I could get range value found by the radar and I can compare that, so that the FOV is around 60 degree. 

Kindly ans these

1. Where exactly the range value is calculated(like we have tempRange in high accuracy lab)?( it would be good if you show in code)

2. Till what point It can give range accurately?(for me it should be below 10cm ..and in steps of atlest 9cm,8cm,7cm etc...

3. As shown in above image it is said that we can calculate the range in meteers using the formula, is it there already in code?if not how do we write it and where?

regards

Karthik

  • Hi Karthik,

    The mmWave SDK demo accuracy is on the order of 1cm.

    As mentioned previously regarding the mmWave SDK demo: "You can search the ARM file "C:\ti\mmwave_sdk_02_00_00_04\packages\ti\demo\xwr16xx\mmw\mss\mss_main.c" for "MMWDEMO_DSS2MSS_DETOBJ_READY" to find the place that the ARM receives the data and sends it over UART. The data format/structure is also described in the mmWave SDK demo documentation. (C:/ti/mmwave_sdk_02_00_00_04/packages/ti/demo/xwr16xx/mmw/docs/doxygen/html/index.html)"

    Specifically, a description of the detected object data (with X, Y, Z data in meters in Q-format) in the mmWave SDK demo was given in the following post.
    e2e.ti.com/.../2707925

    As previously mentioned, modifying embedded C code for a specific desired behavior requires a good working knowledge of C programming and requires the user to analyze the code to understand how it is working and thus how it should be modified to achieve the desired behavior. The mmWave E2E forum provides support to point users to existing documentation and examples and give pointers on how to go about supported modifications, but is not intended to supply complete/tested custom code modifications for individual use-cases that are not supported by the existing demos.

    Regards,
    John
  • Hi John,

    Ya I agree your Point.

    I got some info from your last post and the old thread what you linked.g

    But lets say, I dont need range, I will only look at x-y z values. In your last post you put that X in meters= Float(x)/2^(xyzqformat). But in the dataobj structure, it is only giving x,y and z values separately.

    How do I get the value xyzqformat ?

    It would be very good if you just tell How to access these structure data x,y, and z,  in brief, then I will build on that.

    I will use, only Y value, if Y value (perpendicular distance) of any object is less than some threshold, I will make GPIO high.

    In this case, How I should proceed?

  • Karthik,

    Please see the link I already sent (e2e.ti.com/.../2707925. It specifically shows that the xyzQFormat is located in the MmwDemo_output_message_dataObjDescr at the beginning of the list of detected objects. Please review the demo documentation and the code for more details.

    Regards,
    John
  • Hi John,

    With help of last post I could access the number of objects detected and display it on the console with help of,

    if(message.body.detObj.tlv[itemIdx].type == 1)

                                                   {

                                                       MmwDemo_output_message_dataObjDescr* myDataObjDescr;

                                                       myDataObjDescr = (MmwDemo_output_message_dataObjDescr*)SOC_translateAddress(message.body.detObj.tlv[itemIdx].address,

                                                       SOC_TranslateAddr_Dir_FROM_OTHER_CPU,NULL);

                                                       System_printf ("*********>>>>>>>> Num of Detected objects - [%d]\n", myDataObjDescr->numDetetedObj);

    . Now if I am getting number of obj detected as , there has to be 5 x,y co-ordinate corresponding to each object.

    How do Need to access it?

    I have tried some what Like this,

    MmwDemo_detectedObj* myDataObjDescr1;

                                                       myDataObjDescr1 = (MmwDemo_detectedObj*)SOC_translateAddress(message.body.detObj.tlv[itemIdx].address,

                                                                                                          SOC_TranslateAddr_Dir_FROM_OTHER_CPU,NULL);

                                                       System_printf ("*********>>>>>>>> Detected y in qformat[%d]\n", myDataObjDescr1->y);

                                                       Ym=(myDataObjDescr1->y)/(2^(myDataObjDescr->xyzQFormat));

                                                       System_printf ("*********>>>>>>>> Y in meters - [%d]\n", Ym);

                                                   }

    I am able to get some value, attached the reference data as txt file.

    But not able to make out which vlaue it is corresponding to?

    please help on this.

    loop enetredloop enetredloop enetred*********>>>>>>>> Num of Detected objects - [9]
    *********>>>>>>>> Qformat - [9]
    *********>>>>>>>> Detected y in q format - [14865]
    *********>>>>>>>> Y in meters - [1351]
    

  • loop enetredloop enetredloop enetred*********>>>>>>>> Num of Detected objects - [6]
    *********>>>>>>>> xyzQFormat - [9]
    *********>>>>>>>> y VALUE - [592]
    loop enetredloop enetredloop enetred*********>>>>>>>> Num of Detected objects - [6]
    *********>>>>>>>> Num of Detected objects - [9]
    
    Hi John,

    With help of last post I could access the number of objects detected and display it on the console with help of,

    if(message.body.detObj.tlv[itemIdx].type == 1)

                                                   {

                                                       MmwDemo_output_message_dataObjDescr* myDataObjDescr;

                                                       myDataObjDescr = (MmwDemo_output_message_dataObjDescr*)SOC_translateAddress(message.body.detObj.tlv[itemIdx].address,

                                                       SOC_TranslateAddr_Dir_FROM_OTHER_CPU,NULL);

                                                       System_printf ("*********>>>>>>>> Num of Detected objects - [%d]\n", myDataObjDescr->numDetetedObj);

    . Now if I am getting number of obj detected as , there has to be 5 x,y co-ordinate corresponding to each object.

    How do Need to access it?

    I have tried some what Like this,

    MmwDemo_detectedObj* myDataObjDescr1;

                                                       myDataObjDescr1 = (MmwDemo_detectedObj*)SOC_translateAddress(message.body.detObj.tlv[itemIdx].address,

                                                                                                          SOC_TranslateAddr_Dir_FROM_OTHER_CPU,NULL);

                                                       System_printf ("*********>>>>>>>> Detected range index - [%d]\n", myDataObjDescr1->y);

                                                       Ym=(myDataObjDescr1->y)/(2^(myDataObjDescr->xyzQFormat));

                                                       System_printf ("*********>>>>>>>> Y in meters - [%d]\n", Ym);

                                                   }

    I am able to get some value, attached the reference data as txt file.

    But not able to make out which vlaue it is corresponding to?

    please help on this.

  • Karthik,


    As listed in the link I sent already, if you are trying to get "Ym" in decimal meters then you would need to make it a float variable and then typecast the expression on the right as a float.

    float Ym;
    Ym = (float) <mathematical_expression>;

    Also, since the MmwDemo_output_message_dataObjDescr at the beginning of the list is 4 bytes long, you would need to add 4 bytes to the address to access the first detected object.

    (MmwDemo_detectedObj*)SOC_translateAddress(message.body.detObj.tlv[itemIdx].address + 4,
    SOC_TranslateAddr_Dir_FROM_OTHER_CPU,NULL);

    Since each detected object is 12 bytes long, the second detected object would be 12 bytes later, i.e.

    (MmwDemo_detectedObj*)SOC_translateAddress(message.body.detObj.tlv[itemIdx].address + 16,
    SOC_TranslateAddr_Dir_FROM_OTHER_CPU,NULL);

    The next detected object would be 12 bytes later, etc.

    If you are not familiar with C programming, please work with someone locally who can help you understand and modify the code. You will need to understand C programming variables, addresses, bytes, etc. in order to successfully modify the code.

    Regards,
    John
  • Hi John

    Thank you very much for your kind information.

    I will go through the concepts you mentioned.

    One last question: 1. Let us say number of detected objects is 3 and, how do I identify 1st object, 2nd object and third object?Which variable contain this info?

    2. Is it possible to restrict the number object detected, by changing value from 100 to 3 or 4?

  • Karthik,

    There is no object index. The first object in the list is the first object and the second one is the second object, etc. My previous post explicitly mentions how to find the address of each object.

    The following post discusses the maximum number of objects detected.
    e2e.ti.com/.../2707859

    Regards,
    John