Doppler Radar Sensor implementation

Hi,

I want to start a discussion on implementing a Doppler radar sensor so that we can raise a feature request together, or better start implementing it.

Desired Behavior

A new sensor plugin that provides measurements in PointCloud2. A radar point could look like this:

struct RadarPoint
{
  // 3D point coordinates
  float x;  
  float y;
  float z;
  float radial_speed;  // radial speed of the point in m/s
  float RCS;  // radar cross-section
  float snr;  // signal to noise ratio
  float power;  // received signal power
  float noise;  // received signal noise
}

Parameters

The plugin should have the following parameters:

  • Range min/max
  • Range accuracy
  • Azimuth angle min/max
  • Azimuth angle accuracy
  • Azimuth angle separation
  • Elevation angle min/max
  • Elevation angle accuracy
  • Elevation angle separation
  • Radial speed min/max
  • Radial speed accuracy
  • Radial speed separation
  • Number of cloud points (maximum)

Implementation suggestion

From my side beam shape and modulation is not relevant, therefore I was considering using preexisting plugins, and building on top of these, rather than starting from the bottom with building a radio wave plugin.

Initially, I was thinking of using the GPULidar sensor to deliver XYZ, but I do not know about the physics implementation and the possibility of modulating the frequency on the ray cast.

The other idea was to use the features of the logical camera to get information about the environment and derive information such as XYZ, but also radial speed, and RCS from the detected model itself.

Additional context

I have seen this feature request for a Doppler Velocity Log sensor (Add Doppler Velocity Log (DVL) sensor · Issue #236 · gazebosim/gz-sensors · GitHub)

Discussion

Please let us discuss the requirements for such a sensor. (Do we need more or fewer measurements, or parameters?)

How can we implement a Doppler radar sensor?

What are the next steps?

Looking forward to a lively discussion,
Christian

It sounds like the DopplerVelocityLog you pointed to is a good starting point.

The main thing to change is the beam pattern here : https://github.com/osrf/lrauv/blob/31b2b905cd3feca86e62af16c4e59c88febcbbb1/lrauv_gazebo_plugins/src/DopplerVelocityLog.cc#L1021

TBH if you ask me we should make it easier to provide Ray Tracing capabilities (since that’s what most sensors care about).

Great, thanks for your reply.

How should we proceed with this?