Post

Radar based 3D-Simultaneous Localization and Mapping on quadrupped robot.

Radar based 3D-Simultaneous Localization and Mapping on quadrupped robot.

📡 Understanding Doppler Velocity in 4D Point Clouds

When talking about 4D radar point clouds, we are referring to the three standard spatial dimensions (X, Y, and Z) plus an incredibly useful fourth property for every single datapoint: the Doppler velocity.

By measuring the phase shift of the returning radar waves, we can calculate the radial velocity of each datapoint. But what does that actually mean in practice?

Because radar relies on the line-of-sight ray between the sensor and the target, it is blind to sideways motion. If a datapoint is lying directly in front of the sensor and the robot moves straight towards it, the Doppler velocity perfectly matches the robot’s forward speed. However, if a datapoint is located perfectly to the side of the sensor, the measured velocity is exactly zero! Radar can only detect if a point is moving directly towards or away from it.

To calculate the expected Doppler velocity of any given static point in 3D space, we can use a simple trigonometric formula:

\[v_{doppler} = -v_{robot} \cdot \cos(\alpha) \cdot \cos(\epsilon)\]

Here, $\alpha$ (azimuth) and $\epsilon$ (elevation) are the horizontal and vertical angles of the point relative to the robot’s direction of movement.

This exact formula is what you would use to generate the Doppler velocity in a simulation sandbox. In the real world, however, the Doppler velocity is what the radar actually measures. We can then simply compare our raw measured Doppler velocity to the mathematically expected Doppler velocity. If the two values differ significantly, we know immediately that we have either detected a dynamically moving object (like a walking person), or we have encountered a noisy multipath reflection!

⚙️ The Seesaw Effect: Why the Lever Arm Matters

There is a catch in the math above. What we broadly described as $v_{robot}$ actually refers to the physical velocity of the sensor itself.

We have to consider that the radar is rarely mounted dead-center inside the robot. It is usually mounted on the front or back with an offset from the robot’s center of rotation. This offset is known as the lever arm ($L$). If you mount multiple radars on a robot dog, each sensor has its own unique lever arm, and its true velocity must be calculated independently.

The total velocity of the sensor is a combination of the robot’s pure translation plus the velocity introduced by that offset during a rotation. For example, if the robot is walking forward but suddenly turns sideways (yawing), the sensor swings through the air on the end of its lever arm. This swinging motion adds a massive sideways velocity to the sensor, depending on the direction of the turn.

This effect is beautifully described by taking the cross product of the robot’s rotational velocity ($\omega_{rotation}$) and the lever arm ($L$):

\[\vec{v}_{sensor} = \vec{v}_{translation} + (\vec{\omega}_{rotation} \times \vec{L})\]

By feeding this true sensor velocity into our Doppler formula, we can figure out exactly how the robot is rolling, pitching, and yawing through the world based purely on the velocity of the walls around it!

The doppler velocity is a scaler value indicating how fast a target is moving away or towards our sensor. Now with this in mind, it is best to play around and test it yourself.

<!DOCTYPE html>

Interactive Radar Doppler Kinematics

Translation (m/s)

v_base = [vx, vy, vz]
1.0
0.0
0.0

Rotation (rad/s)

ω = [Roll, Pitch, Yaw]
0.0
0.0
0.0

Lever Arm (meters)

L = [Lx, Ly, Lz]
0.0
0.0
0.0


Tipp: Setze Y auf 90° für Gimbal Lock!

This post is licensed under CC BY 4.0 by the author.