Online Database of Driving Maneuvers of two Automobiles
Remark We will not answer any question about the recorded data. All information is included in the following lists.
Dataset Description
Presented are the target lists of a total of 8718 measurement frames produced by three (3) radar
sensors, matched together with the IMU+GNSS-RTK solution for position and motion of two (2) automobiles.
The sensors are synced in respect to their measurement times, but operate independently. Their
modulation is offset by a certain frequency, to ensure mono-static evaluation. This allows for a
cooperative evaluation of measurements.
The sensor positions are static. The two automobiles are driving maneuvers in from of the three
radar sensors, including following, overtaking, driving alongside, and driving towards each other.
The data set is available in three different CFAR threshold variants.
Included is a description of the setup and radar modulation parameters, the data structure, as well
as a minimum working example of how to work with the data.
Licensing and Citing
This document, the data provided here, as well as the accompanying images and source code files are distributed under the CC BY 4.0 license.
Citation Authors:
- Johannes Schlichenmaier (Ulm University, Ulm, Germany, ORCID: 0000-0002-9275-6635)
- Maximilian Steiner (Ulm University, Ulm, Germany, ORCID: 0000-0002-7000-7465)
- Timo Grebner (Ulm University, Ulm, Germany, ORCID: 0000-0001-6605-5811)
- Christian Waldschmidt (Ulm University, Ulm, Germany, ORCID: 0000-0003-2090-6136)
If you use this information or data in a publication, please cite us accordingly, e.g. by using one of the following citation styles (or any other style your publication requires):
IEEE:
Johannes Schlichenmaier, Maximilian Steiner, Timo Grebner, Christian Waldschmidt, August 8, 2022, "Radar Measurements of Two Vehicles with Three Cooperative Imaging Sensors", IEEE Dataport, doi: dx.doi.org/10.21227/wwt7-w739.
BibTeX:
@data{wwt7-w739-22,
doi = {10.21227/wwt7-w739},
url = {https://dx.doi.org/10.21227/wwt7-w739},
author = {Schlichenmaier, Johannes and Steiner, Maximilian and Grebner, Timo and Waldschmidt, Christian},
publisher = {IEEE Dataport},
title = {Radar Measurements of Two Vehicles with Three Cooperative Imaging Sensors},
year = {2022} }
Measurement Setup
The three radar sensors are assigned the IDs = {5,7,8}, which will be referred through the rest of
the data set, although no other radar sensors were in use during the measurements. In the associated
publications, the sensor IDs are mapped as: 1 -> 5, 2 -> 7, 3 -> 8.
The layout of the three sensors is as follows:
(5) |-- 0.65m --| (7) |-- 0.69m --| (8)
The sensors are working in a SIMO configuration with one tx and four rx channels each, running a
chirp sequence FMCW modulation [1] with the following modulation parameters:
Parameter | Value |
---|---|
Center frequency f_c | 76.77 GHz |
Bandwidth B | 2 GHz |
Number of chirps L | 128 |
Chirp duration T_c | 192 µs |
Chirp repetition time T_r | 256 µs |
Frame rate f_meas | 8 Hz |
Max range r_max | 47.925 m |
Range resolution ∆r | 7.5 cm |
Max velocity v_max | ±3.81 m/s |
Velocity resolution ∆v | 5.96 cm/s |
Network frequency offset ∆f_net | 40 MHz |
The three sensors are triggered by an AWG delivering a trigger signal to each sensor of f_meas=8Hz
for a set number of consecutive measurement frames. The sensors then sends the raw beat signal s(t)
data for each frame to to a measurement PC, that stores the data. To avoid inter-sensor
interference, each sensor center frequency is offset by n*∆f_net, n={0,1,2}.
The two automobiles used for target objects are equipped with RTK-GNSS systems and have the
following dimensions:
Dimension | Car1 | Car2 |
---|---|---|
Length rear axle to back | 1.153m | 1.029m |
Length rear axle to front | 3.780m | 3.670m |
Width (w/o mirrors) | 1.852m | 1.826m |
Measurements Processing Variants
Three variants of raw data to target list processing are available (separated into their respective
folders). Those differ by the CFAR threshold (CFAR-TH) in dB used for target extraction. However,
as sensor 5 suffered from especially noisy data, its CFAR threshold was always set 2dB above the
threshold of the two other sensors, which is why, in each folder name, two CFAR values are given:
the lower one for sensor ID 7 and 8, the higher one for sensor ID 5.
The three variants are:
- cfar_9_11_pe: CFAR-TH sensor 5: 11dB, CFAR-TH sensor 7/8: 9dB
- cfar_10_12_pe: CFAR-TH sensor 5: 12dB, CFAR-TH sensor 7/8: 10dB
- cfar_11_13_pe: CFAR-TH sensor 5: 13dB, CFAR-TH sensor 7/8: 11dB
In the associated publication, only the processing variant cfar_10_12_pe was used. The other two are
only included for posterities sake.
Measurement Files
In each folder, one finds 18 measurement files, each containing a consecutive set of a maximum of
500 measurement frames in the form of a MATLAB MAT file.
Each measurement file contains the following variables:
data
: the measurement data of all sensors matched with the ground truth of both target objectsraw_data_conversion_cfg
: the raw data conversion parameters for each sensors (usually not needed
for evaluation)sensor_ids
: the used sensor IDs (in this data set always 5,7, and 8)sensor_meta
: meta information used for the sensor raw data conversion (see below)
Post Processing
The presented data is the result of a post processing chain [2]. The relevant parameters for the
FFT, CFAR, and angle estimator can be found in the respective cell of the sensor in the
raw_data_conversion_cfg
variable, but are usually not needed for further evaluation of the data
set.
The subsequent peak search for values over the CFAR-TH was done separate, as to preserve the full
amount of over-CFAR-values (unfiltered data), but still allowing the option to only select peak
values later on.
Afterwards the radar and ground truth data was matched using the GPS timestamps. Then, the
skew of each sensor was determined using calibration targets in the scene. The result of this
calibration is found in sensor_meta.doa_offset_deg
. As the sensors were all installed upside
down for installation purposes, the angular information is mirrored, which results in the -1 entries
in sensor_meta.doa_sign
.
The angular information in the data
variable is therefore:
doa-value = doa-sign * raw-doa-value + doa-offset
This doa_value
combined with the Cartesian offsets in sensor_meta.cart_offset
results in the
following x/y coordinates:
x = r*cos(doa-value) + x-offset
y = r*sin(doa-value) + y-offset
Notes:
- The DoA values are always in sensor coordinates, although already de-skewed.
- The Cartesian values are already in a common coordinate system.
- Contrary to many other automotive reference systems, the y-axis is the “forward” axis away from
the sensors. - The DoA values point along the x axis for a 0 value.
Data Table
The data
variable contains the actual measurement data together with the ground truth in form of a
MATLAB table. Let’s go over the table fields:
frame_id
: a running ID number of the frame. Due to the nature of the measurements, it starts
with 2.evaluated
: can be set to 1, if this row was already evaluated.target_list
: a table of target points for each sensor (in separate cells), contains unfiltered
data.te_peak_ids
: a set of target point IDs, that are the peak values for set of target points.
Again separated by sensor.timestamp
: an Unix time stamp of the measurement.date_time_utc
: an UTC time stamp of the measurement.ground_truth
: a table of ground truth information of the two automobiles at the same time as
the measurement frame.
Target List Table
The target_list
variable for each sensor and measurement frame is a table and is built as follows:
amplitude
: the linear amplitude value of the target pointrcs_dB
: a point target RCS calculation based on the amplitude and the range (-Inf for range=0)range
: range of the target point in mvelocity
: radial velocity of the target point in m/sdoa_deg
: angle of the target point in degreedoa_rad
: angle of the target point in radianx
: Cartesian x coordinate of the target point (common coordinate system)y
: Cartesian y coordinate of the target point (common coordinate system)snr_db
: signal to noise ratio in dB (based on the calculated noise value of the CFAR algorithm
Ground Truth Table
The ground_truth
variable for each measurement frame is a table with one row per object (in this
case always two rows) and is built as follows:
match
: Indicates, that the ground truth is matched to the frame (should be 1)ref_point
: an (x,y,z) reference point of the ground truth (where the IMU of the RTK-GNSS is
referencing to, here the middle of the rear axle)polyshape
: a polygon describing the object (as a rectangle)width
: width of the object (constant)area
: area of the object (constant)yaw_angle_deg
: yaw angle of the object in degreeyaw_angle_rad
: yaw angle of the object in radianvel
: (v_x, v_y, v_z) values, describing the instantaneous velocity of the object in m/saccel
: (a_x, a_y, a_z) values, describing the instantaneous acceleration of the object2yaw_rate_deg
: the yaw rate of the object in degreeyaw_rate_rad
: the yaw rate of the object in radianstatus
: unused
Notes:
- The acceleration values for object #1 are in m/s^2 and an output of the IMU+RTK EKF algorithm
- The acceleration values for object #2 are in multiples of g and a raw reading of the IMU chip
Working with the Data
The data is provided in the form of MAT files containing simple data types and tables (supported by
MATLAB versions >= 2013b).
The following code example loads the data from a single MAT file and plots a full set of measurement
frames at around 10 Hz.
It is important to remember, that the target lists include all target points, whether or not they
are a peak point. Only in combination of the sensor and frame specific peak IDs, the peak values can
be extracted.
% load measurement file
tl_content = load(['cfar_10_12_pe' filesep '20200624_Car2_Kreise_1.mat']);
% prepare figure
hfig = figure();
haxes = axes(hfig);
plot_tl_s5 = scatter(nan,nan, 'r', 'filled');
hold(haxes, 'on');
plot_tl_s7 = scatter(nan,nan, 'b', 'filled');
plot_tl_s8 = scatter(nan,nan, 'g', 'filled');
plot_gt_1 = plot(nan, nan, 'k', 'LineWidth', 1.5);
plot_gt_2 = plot(nan, nan, 'k', 'LineWidth', 1.5);
hold(haxes, 'off');
haxes.DataAspectRatio = [1,1,1];
xlim(haxes, [-50,50]);
ylim(haxes, [0,50]);
% plot measurement
num_frames = size(tl_content.data,1);
for i_frame = 1:num_frames
% plot peak target points of sensor 5
peak_ids_s5 = tl_content.data.te_peak_ids{i_frame,5};
plot_tl_s5.XData = tl_content.data.target_list{i_frame,5}.x(peak_ids_s5);
plot_tl_s5.YData = tl_content.data.target_list{i_frame,5}.y(peak_ids_s5);
% plot peak target points of sensor 7
peak_ids_s7 = tl_content.data.te_peak_ids{i_frame,7};
plot_tl_s7.XData = tl_content.data.target_list{i_frame,7}.x(peak_ids_s7);
plot_tl_s7.YData = tl_content.data.target_list{i_frame,7}.y(peak_ids_s7);
% plot peak target points of sensor 8
peak_ids_s8 = tl_content.data.te_peak_ids{i_frame,8};
plot_tl_s8.XData = tl_content.data.target_list{i_frame,8}.x(peak_ids_s8);
plot_tl_s8.YData = tl_content.data.target_list{i_frame,8}.y(peak_ids_s8);
% plot ground truth OBB of object 1
gt_1_points = [tl_content.data.ground_truth{i_frame}.polyshape(1).Vertices;
tl_content.data.ground_truth{i_frame}.polyshape(1).Vertices(1,:)];
plot_gt_1.XData = gt_1_points(:,1);
plot_gt_1.YData = gt_1_points(:,2);
% plot ground truth OBB of object 2
gt_2_points = [tl_content.data.ground_truth{i_frame}.polyshape(2).Vertices;
tl_content.data.ground_truth{i_frame}.polyshape(2).Vertices(1,:)];
plot_gt_2.XData = gt_2_points(:,1);
plot_gt_2.YData = gt_2_points(:,2);
pause(0.1);
end
References:
V. Winkler, Range Doppler Detection for Automotive FMCW Radars, in European Radar Conference, Oct. 2007, pp. 166–169., DOI: 10.1109/EURAD.2007.4404963 ↩
C. Vasanelli, F. Roos, A. Dürr, J. Schlichenmaier, P. Hügler, B. Meinecke, M. Steiner, and C. Waldschmidt, Calibration and Direction-of-Arrival Estimation of Millimeter-Wave Radars: A Practical Introduction, IEEE Antennas and Propagation Magazine, pp. 34–45, 2020, DOI: 10.1109/MAP.2020.2988528 ↩