Skip to content

ROS node for capturing raw ADC I/Q samples from Texas Instruments (TI) mmWave radars (xWR1843, xWR6843, xWR2944, xWR1843AOP, xWR6843AOP)

License

Notifications You must be signed in to change notification settings

ConnectedSystemsLab/xwr_raw_ros

Repository files navigation

xwr_raw_ros

This repository contains a ROS node for real-time raw ADC I/Q sample data capture and processing from TI AWR/IWR radar EVMs + DCA1000EVM combo. It was developed for and used in the following papers:

BatMobility: Towards Flying Without Seeing for Autonomous Drones
Emerson Sie, Zikun Liu, Deepak Vasisht
ACM International Conference on Mobile Computing and Networking (MobiCom), 2023

Radarize: Enhancing Radar SLAM with Generalizable Doppler-Based Odometry
Emerson Sie, Xinyu Wu, Heyu Guo, Deepak Vasisht ACM International Conference on Mobile Systems and Services (MobiSys), 2024

example.mp4

Features

  • Tested on ROS Melodic/Noetic, Ubuntu 18.04/20.04.
  • Tested on xWR1843, xWR6843ISK, xWR6843ISK-ODS, xWR2944, xWR1843AOP, xWR6843AOP
  • Can be used to collect I/Q samples and point clouds at the same time (see example.mp4).

Organization

  • configs/ - Example radar configs.
  • nodes/
    • radar.py - Starts radar EVM and publishes data from DCA1000 EVM.
    • visra.py - Subscribes to radar samples to visualize range-azimuth heatmaps.
    • visda.py - Subscribes to radar samples to visualize doppler-angle heatmaps.
  • src/
    • xwr_raw/ - Python package containing code for nodes.
      • radar_pub.py - Handles all communication with EVMs.
      • dsp.py - Low level signal processing functions (beamforming, etc.)
    • recver.cpp - Implementation of raw data receiver in C.
  • launch/
    • radar.launch - Run raw sample node.
    • radar_pcd.launch - Visualize point cloud + get raw samples at same time.
    • radar_visra.launch - Visualize range-azimuth heatmaps from raw samples in real-time.
    • radar_visda.launch - Visualize doppler-azimuth heatmaps from raw samples in real-time.
    • radar_visra_c.launch - Same as above, but with optimized C receiver.
  • udev/ - udev rules for USB ports (optional).

Getting Started

  1. Install ROS Noetic or Melodic.
  2. Create catkin workspace.
mkdir -p ~/catkin_ws/src
  1. Clone repository.
cd ~/catkin_ws/src && git clone https://github.com/ConnectedSystemsLab/xwr_raw_ros.git
  1. Install ROS and Python dependencies.
cd ..
rosdep install --from-paths src --ignore-src -iry && pip install -r src/xwr_raw_ros/requirements.txt
  1. Build node.
cd ~/catkin_ws && catkin build
  1. Source overlay.
source devel/setup.bash
  1. (Optional) Copy udev rule files under udev to /etc/udev/rules.d and run
sudo udevadm control --reload-rules
sudo usermod -a -G dialout $USER

Make sure to logout and log back in so usermod takes effect.

  1. Connect radar + DCA1000EVM to the host (see Hardware Setup). Set host + DCA1000EVM IPs and ports accordingly.

  2. Edit and launch a .launch file e.g.

roslaunch xwr_raw_ros radar_visra.launch

Make sure the parameters (e.g. IP addresses and ports, serial ports, radar config) in the .launch file are correct. You should see an output similar to example.mp4 if using xWR1843.

Hardware Setup

xWR1843

Connect the wires + set pins and switches on the board as follows.

  • Config port: /dev/tty1843_00
  • Data port: /dev/tty1843_03

Notes

  1. Make sure SOP switches set to functional mode on EVM.
  2. Power the DCA1000EVM through the EVM by pass-through.

xWR6843ISK

Connect the wires + set pins and switches on the board as follows.

  • Config port: /dev/ttyISK_00
  • Data port: /dev/ttyISK_01

Notes

  1. Make sure SOP switches set to functional mode on EVM.
  2. Power the DCA1000EVM using barrel connector directly.

xWR6843ISK-ODS

  • Config port: /dev/ttyISK_00
  • Data port: /dev/ttyISK_01

Notes

  1. Make sure SOP switches set to functional mode on EVM.
  2. Power the DCA1000EVM using barrel connector directly.

xWR2944

Connect the wires + set pins and switches on the board as follows.

Notes

  1. You need a 12V 2.5A barrel connector to power the radar AND a normal 5V barrel connector to power the DCA1000EVM.
  2. Ensure SOP1 jumper is removed before powering the radar EVM.
  3. You must first power the radar EVM and make sure the XDS ports show as connected, and only then turn on the DCA1000EVM.
    • Best way to do this is to only flip on the DCA1000EVM power switch after powering the radar.

xWR1843AOP

Connect the wires + set pins and switches on the board as follows.

  • Config port: /dev/ttyISK_00
  • Data port: /dev/ttyISK_01

Notes

xWR6843AOP

Connect the wires + set pins and switches on the board as follows.

  • Config port: /dev/ttyISK_00
  • Data port: /dev/ttyISK_01

Notes

Citation

If you found this repository useful, please cite the following:

@inproceedings{sie2023batmobility,
    author = {Emerson Sie and Zikun Liu and Deepak Vasisht},
    title = {BatMobility: Towards Flying Without Seeing for Autonomous Drones},
    booktitle = {The 29th Annual International Conference on Mobile Computing and Networking (ACM MobiCom '23)},
    year = {2023},
    doi = {10.1145/3570361.3592532},
    isbn = {978-1-4503-9990-6/23/10},
}
@inproceedings{sie2024radarize,
    author = {Sie, Emerson and Wu, Xinyu and Guo, Heyu and Vasisht, Deepak},
    title = {Radarize: Enhancing Radar SLAM with Generalizable Doppler-Based Odometry},
    booktitle = {The 22nd ACM International Conference on Mobile Systems, Applications, and Services (ACM MobiSys '24)}
    year = {2024},
    doi = {10.1145/3643832.3661871},
}

Acknowledgements

We would like to thank to OpenRadar and iwr_raw_rosnode for providing useful help + code snippets.

About

ROS node for capturing raw ADC I/Q samples from Texas Instruments (TI) mmWave radars (xWR1843, xWR6843, xWR2944, xWR1843AOP, xWR6843AOP)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published