- Dataset Description
- Dataset Parts
- Data Structure and File Organization
- Downloads
- Examples and Teasers
- Acknowledgement
The recorded dataset captures a forested area that contains fully grown and young trees, dense undergrowth, bumpy terrain and occasional rocks.
The dataset captures a forested area that contains both fully grown and young trees, dense undergrowth, bumpy terrain and occasional rocks. Clearpath Husky robot was teleoperated through the area in May and June 2024, each time driving roughly one hour while recording its onboard sensors: LiDAR, high-resolution 4D radar, GNSS, RGB camera, IMU and internal odometry. Thanks to the GNSS receiver and lidar data, reference lidar point cloud map and thus absolute positioning of the robot during the experiment are available. Moreover, to support 4D radar research in detetection and classification of obstacles in similar environments, the dataset provides labels (3D cuboids) for several classes (e.g., tree trunk, tree canopy, bush, ...) and ROS2 tools that use these cuboids to label arbitrary point clouds in the dataset (lidar, radar, accumulated versions of those, or sub-maps).
Using the Segments.ai online 3D labeling solution, the reference point cloud maps from two recording runs were manually labelled.
The data are provided as ROS bag files, both for ROS1 and ROS2, and the point-cloud-labeling tools are available for ROS2.
Since the labelled point clouds are published as standard PointCloud2 messages, it is possible to convert the labelled clouds back to ROS1 either by ROS bridge, or by converting bag files (e.g., by Rosbags library.)
A tool for point cloud accumulation is also provided. Based on the message count or distance travelled, denser point clouds are produced and optionally saved in .pcd format, allowing easy post-processing.
Provided ROS tools annotate the radar or lidar pointclouds, display used cuboids in Rviz.
- Short grass: May 2024 (4068s) Area of approx. 180x140m was captured by the Husky mobile robot in a "search pattern" fashion, resulting in dense coverage by all the onboard sensors. In the beginning of summer, the undergrowth is not yet fully developed, therefore the visibility conditions for the camera and lidar are good. Besides the raw data from the robot, a reference map is provided as well as raw GNSS data from a static and mobile receiver.
- Tall grass: June 2024 (3811s) The same area was visited again one month later in June, when the undergrowth became in some sections even higher than the robot itself. In these conditions, the comparison between camera, lidar and radar becomes interesting for the field robotics applications.
- ROS1 tools - helper launch files The ROS1 variant of the bag files is accompanied by a set of launch files allowing reprocessing of the Ouster lidar raw packets, adding additional TFs, and publishing the reference point cloud map for Rviz visualisation.
The tools are available in a separate repository: Radar Forest Dataset ROS1 Launchers - Anonymous Version
- ROS2 tools - point cloud labelling tools
The provided ROS2 tools allow online labeling of point clouds, either lidar or radar, based on the provided set of cuboids stored in a yaml file (included).
For convenience, a tool for accumulating a series of pointclouds, republishing them and also saving as
.pcdfiles is also provided. Similarly to ROS1, a launch file for publishing a reference point cloud map and Rviz config file are also available.
The tools are available in a separate repository: Point Cloud Labeling Tools - Anonymous Version
The dataset is split into two parts, ROS1 and ROS2, both of them containing basically the same data. The main difference is that ROS1 contains raw packets of the Ouster lidar, and the user is expected to run provided launch file to reconstruct all the topics the sensor provides. This saves space and speeds up the dataset download. Since it has shown to be problematic to run ROS2 Ouster driver with packets recorded in ROS1, the topics deemed most useful has been saved in the ROS2 bag files, instead of the raw packets. For convenience, de-skewed lidar point cloud has been saved in both versions.
Regarding the file organization, see the tree below:
βββ ros1_noetic
βΒ Β βββ calibration
βΒ Β βΒ Β βββ extrinsics
βΒ Β βΒ Β βΒ Β βββ extrinsics.txt # Transforms between sensor frames, also available in /tf
βΒ Β βΒ Β βΒ Β βββ frames.pdf # Output of rqt TF visualization
βΒ Β βΒ Β βββ intrinsics
βΒ Β βΒ Β βββ camera_calibration.txt # Output of the OpenCV camera calibration
βΒ Β βΒ Β βββ hugin_radar_startup_params.txt # The Hugin radar startup sequence, affects sensitivity and amount of points
βΒ Β βββ data
βΒ Β βββ 2024_05_short_grass_run # The short grass run
βΒ Β βΒ Β βββ bags # ROS1 bag files, play with "rosbag play --clock short_grass__ros1__*"
βΒ Β βΒ Β βΒ Β βββ short_grass__ros1__00.bag
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βΒ Β βββ short_grass__ros1__45.bag
βΒ Β βΒ Β βββ gps # Post-processed RTK solution and raw data. See Emlid documentation to recompute yourself
βΒ Β βΒ Β βΒ Β βββ filtered_RTK_solution.pos # Filtered == Only sections with approx >15 sattelites kept
βΒ Β βΒ Β βΒ Β βββ full_RTK_solution.pos # Original RTK solution, but in a forest, so sometimes quite bad
βΒ Β βΒ Β βΒ Β βββ ReachBaseSt_20240501125754
βΒ Β βΒ Β βΒ Β βββ ReachRoverO_20240501133817
βΒ Β βΒ Β βΒ Β βββ readme.txt
βΒ Β βΒ Β βββ reference_point_cloud_map # Reference point cloud map, created by using Norlab ICP mapper and HDL graph slam
βΒ Β βΒ Β βββ short_grass_map.pcd
βΒ Β βΒ Β βββ short_grass_map_subsampled.pcd
βΒ Β βΒ Β βββ short_grass_map_with_normals.vtk
βΒ Β βββ 2024_06_tall_grass_run # Tall grass run, same structure as in Short grass
βΒ Β βββ bags
βΒ Β βΒ Β βββ tall_grass__ros1__00.bag
βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ tall_grass__ros1__44.bag
βΒ Β βββ gps
βΒ Β βΒ Β βββ filered_RTK_solution.pos
βΒ Β βΒ Β βββ full_RTK_solution.pos
βΒ Β βΒ Β βββ ReachBaseSt_20240612080138
βΒ Β βΒ Β βββ ReachRoverO_20240612080516
βΒ Β βΒ Β βββ readme.txt
βΒ Β βββ reference_point_cloud_map
βΒ Β βββ readme.txt
βΒ Β βββ tall_grass_map.pcd
βΒ Β βββ tall_grass_map_subsampled.pcd
βΒ Β βββ tall_grass_map_with_normals.vtk
βββ ros2_jazzy
βββ calibration # Same contents as in ROS1
βββ cuboid_labels # Cuboid labels from Segments.ai labelling service.
βΒ Β βββ short_and_tall_grass_labels.json
βββ data
βββ 2024_05_short_grass_run
βΒ Β βββ bag # ROS2 bagfiles
βΒ Β βΒ Β βββ short_grass__ros2
βΒ Β βΒ Β βββ metadata.yaml
βΒ Β βΒ Β βββ short_grass__ros2_0.mcap
βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ short_grass__ros2_48.mcap
βΒ Β βββ gps # Same contents as in ROS1
βΒ Β βββ reference_point_cloud_map # Same contents as in ROS1
βββ 2024_06_tall_grass_run
βββ bag
βΒ Β βββ tall_grass__ros2
βΒ Β βββ metadata.yaml
βΒ Β βββ tall_grass__ros2_0.mcap
βΒ Β βββ ...
βΒ Β βββ tall_grass__ros2_49.mcap
βββ gps # Same contents as in ROS1
βββ reference_point_cloud_map # Same contents as in ROS1
The dataset sensor measurements from these sensors:
- Sensrad Hugin A3-Sample (solid-state 4D radar)
- Please note that the Hugin A3-Sample radar used in our dataset is an early demo model not with the same performance as the forthcoming production-ready model.
- Topic:
/hugin_raf_1/radar_data
- Ouster OS0-32 (3D lidar)
- Topics in ROS1:
/ouster/lidar_packets,/ouster/imu_packets,/point_cloud_deskewed- for convenience, already motion-corrected point cloud - Topics in ROS2:
/ouster/imu,/ouster/points,/ouster/range_image,/point_cloud_deskewed
- Topics in ROS1:
- IDS Imaging uEye camera (2056x1542px)
- Calibrated with checkerboard OpenCV camera calibration
- Topics:
/ids_camera/image_raw/camera_info,/ids_camera/image_raw/compressed
- Xsens MTi-30 (IMU)
- Topics:
/imu/data,/imu/mag,/imu/time_ref
- Topics:
- Emlid Reach RS2+ (RTK-GNSS receiver pair)
- Topics from the receiver (single receiver mode):
/emlid_gnss/fix,/emlid_gnss/nmea_sentence,/emlid_gnss/time_reference,/emlid_gnss/vel - Topics with post-processed RTK solution:
/rtklib/post_fix(complete solution, various quality - SINGLE, FLOAT, FIXED),/rtklib/post_fix_q1(only the best quality, FIXED)
- Topics from the receiver (single receiver mode):
- Husky odometry fused with the Xsens MTi-30 IMU
- Topic:
/husky_udp_bridge/cmd_vel(teleoperation commands),/husky_udp_bridge/odom(pure odom),/imu_odom(fused imu-odometry)
- Topic:
- Reference localization w.r.t. the provided reference point cloud maps
- Topic:
/icp_odom(expresses the pose of the /base_link in /map)
- Topic:
GNSS
The GNSS reference was recorded with a pair of Emlid Reach RS2+ receivers, one serving as a mobile station attached to the robot, the second served as a reference static station.
The RTK solution was obtained using RTKLIB, and the output was added back to the ROS bag files, synchronized with the saved NMEA messages (for each NMEA message carriying time and position, equivalent /rtklib/post_fix or /rtklib/post_fix_q1 was added).
Note that the system clock of the robot was not precisely synchronized with the GPS clock, therefore the ROS time stamps of the /rtklib/post_fix messages are to be considered w.r.t. to the rest of the recorder sensor messages.
Reference point cloud map
The pose of the robot saved in the ROS bag files is based on SLAM result of using Norlab's ICP Mapper as a front-end for the HDL Graph Slam graph optimization.
The high-quality /rtklib/post_fix_q1 fix messages were used as constrains, and the whole map frame is aligned with the Universal Transverse Mercator (UTM) frame. Unfortunatelly, the GNSS coverage under tree canopy is a hard problem, therefore the number of
precise GNSS measurements is limited. Each run has its own map, and when inspected the alignment after registration of these to maps to each other, we estimate the position uncertainty to +-30cm (large-scale deformations, locally consitent).
This accuracy is adequate to the intended purpose of the dataset, which is point cloud segmentation training/testing.
To use different reference, the bag files need to be filtered, removing the /icp_odom topic and the /map->/odom TF messages. Similarly, to test different odometry solutions, remove /odom->/base_link TF messages as well.
3D cuboid labels
The 3D cuboid labes are stored in the ros2_jazzy/cuboid_labels/short_and_tall_grass_labels.json for both recording sessions. See the format documentation here.
This file also contains definitions of the label classes:
- Ground/Grass/Plants not distinguishable in the lidar map (labelled implicitlty by the ROS2 tool, not present in the cuboid labels)
- Tree trunk
- Tree canopy
- Rock
- Bush or small tree
- Car
- Building or similar
- Lamp or sign
- Ignore
The cuboids were manually created based on the reference lidar maps, and as those maps do not perfectly align, the two sets of labels are adjusted for those differences. Moreover, the ROS2 point cloud labelling tool allows setting priority of the label classes, such that, e.g., tree trunk has priority over tree canopy. In the current implementation, each point can belong to only one class, and this priority system resolves situations where one point lies inside multiple cuboids.
Due to the lower spatial resolution of the 4D radar and the way it determines position of the reported targets, some valid radar points lie outside the cuboids drawn around the corresponding lidar-defined objects (e.g., tree trunks look thicker in the radar data than in the lidar data). The ROS2 labeling tool allows defining inflation of selected cuboid classes to compensate for this effect. Of course, it depends on the user's choice, how a radar point lying outside the sensed object, but clearly caused by that object, should be labeled.
Note to the reviewers: This location is temporary for maintaing anonymity. It was kindly provided by fellow researchers from field robotics. The final destination of the dataset files is the EU's Zenodo archive for assuring the FAIR principles. Following the archive FAIR requirements, the bag files will be provided together with separate files extracted from them.
The dataset can be downloaded from this repository Depending on your preferred ROS version, download only the ROS1 or ROS2 archive.
The dataset was compressed using 7z tool. For convenience, consider using provided ROS1 and ROS2 bash scripts, that download and decompress the archive at the location of running them. Each version of the dataset is approx. 200GB large, and for decompression, twice that space is required on your disk.
Recorded in June, the grass was tall enough to often obscure the robot sensors.
The robot was intentionally driven through bushes and over uneven terrain.
Removed for double-blind review
The camera stream in this dataset was anonymized using EgoBlur, and deface automated tools.
- Raina, N., Somasundaram, G., Zheng, K., Miglani, S., Saarinen, S., Meissner, J., Schwesinger, M., Pesqueira, L., Prasad, I., Miller, E., Gupta, P., Yan, M., Newcombe, R., Ren, C., & Parkhi, O. M. (2023). EgoBlur: Responsible Innovation in Aria. arXiv preprint arXiv:2308.13093.
- Optimization in Robotics and Biomechanics, Deface, (accessed 2025), GitHub repository, https://github.com/ORB-HD/deface
The dataset was labelled using the online tools from Segments.ai who generously provided us a free academic license.
- Segments.ai (2023). Segments.ai data labeling platform, https://segments.ai.
The reference map and localization was constructed using Norlab's ICP Mapper serving as a lidar odometry frontend for the HDL Graph Slam
- Pomerleau, F., Colas, F., Siegwart, R., & Magnenat, S. (2013). Comparing ICP Variants on Real-World Data Sets. Autonomous Robots, 34(3), 133β148.
- Kenji Koide, Jun Miura, and Emanuele Menegatti, (2019). A Portable 3D LIDAR-based System for Long-term and Wide-area People Behavior Measurement, Advanced Robotic Systems, link







