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.

AWR6843AOPEVM: Possibility of using ROS with the AWR6843AOPEVM

Part Number: AWR6843AOPEVM
Other Parts Discussed in Thread: AWR6843AOP

Hello again,

So I need to use ROS for my project with the AWR6843AOPEVM board, I digged into documentation a little bit, mainly the TI mmwave ROS driver user guide

I flashed the demo into the radar, done every step with the driver and all. Once I get to launch the 6843AOP_multi_2d_0.launch file (for testing), I get no error. However when I look into my topics, nothing is received in the terminal. Why is that.

Are there other ROS leads to look into in my case.

Thanks and regards.

  • Hello,

    Can you please let us know how you are looking at the topics? Also please confirm that you are also using all the latest files from the git and same toolbox you linked to.

    Regards,

    Jackson

  • Hello,

    Which demo did you flash to the EVM for this experiment? In the most recent ROS Driver, within the bin folder is a README.txt that provides a list of which binary to use with which EVM for which .launch and ros package

    Best Regards,

    Pedrhom

  • Hi Jackson,

    Sorry for the delayed answer.

    I look at the topics using another terminal with the command $ rostopic echo /topic_name. By the way, the topics are present when I do a simple rostopic list, however nothing is published.

    I am using the radar toolbox 1.00.01.07 available in ressource explorer in my CCS (also found in this link). And the git package proposed in it.

    Please enlighten me if anything is not fitting.

    Lilia.

  • Hi Pedrhom,

    Thank you for your answer too.

    I tried flashing both out-of-box demo options, ie the .bin available in the mmWave sdk 3.06 demo file, and the demo I build using CCS.

    I do confirm in both cases that it is working by seeing data in the mmWave visualizer. Then when launching the ROS node, I stop the visualizer and go check the topics values (as explained in my answer to Jackson).

    Regarding the readme, here is what the file contains, the setup part proposes a link to the ROS driver in toolbox 4.12.0, and the use of the People Counting binary file. I am going to test that and confirm if the issue persists. 

    --------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    v1.0 
    
    ROS Driver + Tracking added
    Detection layer for ti_mmwave_tracker_rospkg will now be based off of Capon algorithm and processing chain with tracking, as opposed to the Bartlett algorithm which is also used in Out of Box Demo and no tracking. Capon algorithm allows for better point cloud density and accuracy, as well as tracking information.
    
    Tested with Industrial Toolbox for mmWave Sensors 4.12.0
    
    
    --------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    Setup:
    
    1. Follow the ROS Driver user guide up until the step that requires you to use "roslaunch" 
    
    https://dev.ti.com/tirex/explore/node?a=VLyFKFf__4.12.0&node=AAFPzcnzNHunUphPQZyTyg__VLyFKFf__4.12.0
    
    **NOTE** For anywhere the guide mentions Out of Box demo make sure you are using the People Counting binary file.
    
    2. Use the console command "roslaunch ti_mmwave_tracker_rospkg AOP_3d_Tracking.launch" to start the sensor which will start the sensor and Rviz to show the point cloud. The tracking information is not visualized but number of tracks detected is currently being printed to console via a "ROS_INFO" command within DataHandlerClass.cpp.
    
    If you want to avoid having Rviz start at the same time as the sensor, delete the entire line near the bottom of AOP_3d_Tracking.launch that says "rviz" in it
    
    
    --------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    Developer's Guide:
    
    All tracker information is handled within the "DataHandlerClass.cpp" file in the src folder.
    
    
    Each track has 112 bytes of information. 
    
    Track List 3D	112 Bytes * Number of Tracks	
    'tid', {'uint32', 4}, ... % Track ID
    'posX', {'float', 4}, ... % Track position in X dimension, m
    'posY', {'float', 4}, ... % Track position in Y dimension, m
    'posZ', {'float', 4}, ... % Track position in Z dimension, m
    'velX', {'float', 4}, ... % Track velocity in X dimension, m/s
    'velY', {'float', 4}, ... % Track velocity in Y dimension, m/s
    'velZ', {'float', 4}, ... % Track velocity in Z dimension, m/s
    'accX', {'float', 4}, ... % Track acceleration in X dimension, m/s2
    'accY', {'float', 4}, ... % Track acceleration in Y dimension, m/s
    'accZ', {'float', 4}, ... % Track acceleration in Z dimension, m/s
    
    
    --------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    Every point is given a track index value, assigning that point to a track ID it falls into. If a point does not fall into a track for whatever reason, a special value is given for why. 
    
    Track Index 	1 Byte * Number of Points	
    'targetID', {'uint8', 1}); % Track ID
    
    Special Values:
    
    253 - Point not associated, SNR too weak
    
    254 - Point not associated, located outside boundary of interest
    
    255 - Point not associated, considered as noise
    
    
    --------------------------------------------------------------------------------------------------------------------------------------------------
    
    3D Spherical Compressed Point Cloud: 20 bytes + (7 bytes * Number of Points)
    
    For data compression, the 20 bytes worth of unit values are sent first and only once. These unit values need to be multiplied by every point's 7 bytes of values to get the point's real values.
    
     ‘elevationUnit', {'float', 4}, ... % unit resolution of elevation report, in rad
     'azimuthUnit', {'float', 4}, ... % unit resolution of azimuth report, in rad
     'dopplerUint', {'float', 4}, ... % unit resolution of Doppler report, in m/s
     'rangeUint', {'float', 4}, ... % unit resolution of Range report, in m
     'snrUint', {'float', 4}); % unit resolution of SNR report, ratio
    
    Each point has the following:
    
    pointStruct = struct(...
     ‘elevation', {'int8', 1}, ... % Elevation report, in number of elevationUnit
     'azimuth', {'int8', 1}, ... % Azimuth report, in number of azimuthUnit
     'doppler', {'int16', 1}, ... % Doppler, in number of dopplerUint
     'range', {‘uint16', 2}, ... % Range, in number of rangeUint
     'snr', {‘uint16', 2}); % SNR, in number of snrUint
    
     --------------------------------------------------------------------------------------------------------------------------------------------------

    PS : However for my project, I need to implement a similar detection case to the demo adding a ROS node in the radar, that is why I was using the demo example, would that still be possible ?

    Thanks and regards.

    Lilia.

  • Hello Lilia,

    I am talking about the README.txt within the bin folder which has the following:

    -------------------------------------------------------------------------------

    Correct binary to be flashed for ROS Driver:

    xWRL6432:
    xwrl6432_mmw_demo.appimage

    xWR6843AOP/ISK + Tracking (Capon Chain):
    3D People Counting binary

    xWR6843ISK + Occupancy/Zone Detection:
    Small Obstacle Detection binary

    xWR6843AOP:
    Out of Box Demo binary (Use 64xxAOP)

    xWR1443:
    Out of Box Demo binary

    xWR1642:
    Out of Box Demo binary

    xWR1843:
    Out of Box Demo binary

    -------------------------------------------------------------------------------

    All the binaries needed are in the folder as well. If you try running the wrong ros driver with the wrong binary you will probably get CLI errors saying commands are not recognized as well as no output once sensor starts.

    Best Regards,

    Pedrhom

  • Hello Pedrhom,

    Excuse my lack of attention, I found the correct Readme and flashed the correct out-of-box demo which gave no error as you can see in the screens bellow (modified the ports in the .launch file to corresponding ones).

    Once done, I can check the topics list which are all available. When I try to print their values, I have three results : 

    1- I either get a pending terminal as shown here : 

    2- I get a warning for the scan_pcl topics : 

    3- The only topic printing real time values is radar_scan, I can even see the changes by passing my hand next to the radar, when nothing is detected, the printing stops :

    PS : in the launch terminal, I get no error at all when printing topics.

    So, my guess is that the example is correctly working, but I still don't understand why the other topics aren't printed correctly. However for my application, I need to implement a ROS publisher node giving radar data output as in the demo example. I was planing on merging the ROS example with the xwr68xx_mmw demo to get the expected result.

    However since ROS works on my board with another demo, can I work with the 64xxAOP out-of-box demo and adjust it on CCS (with my needs + the ROS node) to be built for the AWR6843AOP target ? Will that be possible ?

    Thanks for your help again.

    Lilia.

  • Hello,

    You can ignore the other topics, the other ones exist for purely debug purposes. As long as you are getting the point cloud from one of the topics then you are getting the full point cloud based on the configuration file's chirp design.

    The binaries you find in the ROS driver's bin folder are all default binaries found throughout the Radar Toolbox, I have put them in one place for the user's convenience. The way it works is that the binary flashed to the sensor configures the output to send out TLVs and the mmWave + serial ROS packages read in this output. A list of all the TLVs that are/can be output can be found here

     https://dev.ti.com/tirex/explore/node?a=1AslXXD__1.00.01.07&node=A__ADnbI7zK9bSRgZqeAxprvQ__radar_toolbox__1AslXXD__1.00.01.07

    You can have a ROS topic for every TLV found above if you want any other types of data. Currently what is implemented in the ROS driver is the Detected Points TLV. I would look particularly at the DataHandlerClass.cpp file in the ROS driver's source as that is where a majority of the output parsing for ROS occurs.

    Best Regards,

    Pedrhom Nafisi