This repository contains a Python-based Robust SLAM for Arboreal environments, combining 3D point cloud slicing and 2D Hausdorff scan-to-map matching for reliable navigation using only LiDAR data. The system consumes point clouds from a horizontally oriented Velodyne VLP-16 and produces accurate pose estimations, along with a 3D map, without relying on IMU or GNSS measurements.
The algorithm was tested with:
Operating System: Ubuntu 18.04 LTS
Architecture: x86_64
ROS Distribution: ROS Melodic
System & ROS Dependencies
| Component | Version / Notes |
|---|---|
| ROS | Melodic |
| roscpp | ROS Melodic default |
| rospy | ROS Melodic default |
| tf / tf2 | ROS Melodic default |
| sensor_msgs | ROS Melodic default |
| geometry_msgs | ROS Melodic default |
Python Dependencies
| Package | Version |
|---|---|
| Python | 3.8.3 |
| fonttools | 4.44.0 |
| ipython | 8.12.3 |
| jupyter_client | 8.6.0 |
| jupyter_core | 5.5.0 |
| matplotlib | 3.7.3 |
| matplotlib-inline | 0.1.6 |
| numba | 0.58.1 |
| numpy | 1.24.4 |
| open3d | 0.18.0 |
| opencv-python | 4.8.1.78 |
| rosbag | 1.14.13 |
| rospy | 1.14.13 |
| scikit-learn | 1.3.2 |
| scipy | 1.10.1 |
Prerequisites:
- Ubuntu 18.04 LTS
- ROS Melodic (desktop-full) or melodic-ros-base with pcl_ros and pcl_conversions
Clone the repository and catkin_make:
git clone https://github.com/RAL-UC/RoSA_SLAM.git
cd RoSA_SLAM/
cp -r path_publisher ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash├── data/ # Input dataset
├── path_publisher/ # ROS package
│ ├── launch/ # Launch files
│ ├── rviz/ # RViz configuration
│ └── src/ # Source code
├── pictures/ # imagens of readme
├── pullally_example/ # Python code
│ ├── EKF/ # EKF and robot model functions
│ ├── hausdorff/ # Trajectory matching
│ ├── utils/ # Screen and variable utilities
│ └── example_pullally.ipynb # Main example with output files and figures
├── results_evaluation.ipynb # Output files and figures of some datasets
└── README.md
To run the Python code, use:
example_pullally.ipynb
Download the dataset from Rosbag data_pullally_example.bag of Pullally Dataset and store it in YOUR_DATASET_FOLDER.
roscore
roslaunch path_publisher cloud_pose_mapper.launch
rosbag play data_pullally_example.bagPrerequisites:
- Docker (v20+ recommended)
Dowload the Docker Image from Docker_RoSA, and load it on the destination computer:
Terminal 1:
docker load < ros-melodic-18_RoSA.tarAfter loading the Docker image, start the container using the commands below.
-
Replace <PATH_ROSBAG_IN_YOUR_PC> with the absolute path to the directory on your machine that contains the rosbag files. For example: /home/dataset_pullally.
-
Execute the following commands:
xhost +local:docker
docker run -it \
--env DISPLAY=$DISPLAY \
--env QT_X11_NO_MITSHM=1 \
--volume /tmp/.X11-unix:/tmp/.X11-unix:rw \
--net=host \
-v /<PATH_ROSBAG_IN_YOUR_PC>:/data/rosbags:ro \
ros-melodic:18.04
roscoreThe rosbag directory will be mounted inside the container at /data/rosbags in read-only mode.
Terminal 2:
Identify the running container:
docker ps-
Replace <YOUR_CONTAINER> with the id in your machine. For example: 0f59b1840653.
-
Source the ROS environment and launch the application:
docker exec -it <YOUR_CONTAINER> /bin/bash
source /opt/ros/melodic/setup.bash
roslaunch path_publisher cloud_pose_mapper.launchTerminal 3:
- Attach to the same container and play the rosbag file:
docker exec -it <YOUR_CONTAINER> /bin/bash
rosbag play data_pullally_example.bagNazate-Burgos, P., Torres-Torriti, M., Huang, S., & Auat Cheein, F. (2026). **Consistent lidar-only SLAM for legged agricultural robots in arboreal environments via robust dimensionality reduction. Computers and Electronics in Agriculture, vol. 247, 111687, ISSN 0168-1699, https://doi.org/10.1016/j.compag.2026.
@article{RoSA_SLAM_2026,
title = {Consistent lidar-only SLAM for legged agricultural robots in arboreal environments via robust dimensionality reduction},
journal = {Computers and Electronics in Agriculture},
volume = {247},
pages = {111687},
year = {2026},
issn = {0168-1699},
doi = {https://doi.org/10.1016/j.compag.2026.111687},
url = {https://www.sciencedirect.com/science/article/pii/S0168169926002826},
author = {Paola Nazate-Burgos and Miguel Torres-Torriti and Shoudong Huang and Fernando {Auat Cheein}},
}
