Skip to content

RandiRodz/LiDAR-Scout-Rover-Distributed-ROS-2-Navigation-Mapping-and-Sensing-System

Repository files navigation

LiDAR-Scout-Rover-Distributed-ROS-2-Navigation-Mapping-and-Sensing-System

Software repository for a distributed ROS 2 rover system built around Unitree LiDAR L1, gas sensing, and autonomous navigation. This repository focuses on the rover software stack only:

  • Arduino Mega motor and gas sensor code
  • Raspberry Pi 5 bridge and sensor-side scripts
  • ROS 2 Jazzy workstation navigation, mapping, and visualization stack

Here is the main repository link Lidar Scout Rover

Overview

LiDAR Scout Rover is a multi-computer robotics system designed to:

  • drive a tank-style rover with ROS 2 velocity commands
  • estimate motion with LiDAR-inertial odometry
  • build a live map of the environment
  • avoid obstacles while navigating to goals
  • publish gas sensor readings from the embedded layer

The software is split across three compute layers:

  • Arduino Mega low-level motor control and gas sensor sampling
  • Raspberry Pi 5 LiDAR publishing, IMU publishing, serial bridge to the Arduino, Cammera publishing
  • Workstation / Intel NUC / laptop Point-LIO, Nav2, obstacle processing, RViz, and the main autonomy stack

DEMO Videos

YouTube

POINT-LIO UHCL BAYOU

ezgif com-video-to-gif-converter(1)

POINT-LIO UHCL DELTA

ezgif com-video-to-gif-converter(2)

NAV2 V2

ezgif com-video-to-gif-converter(3)

NAV2 V3

ezgif com-video-to-gif-converter(5)

GAS SENSORS

ezgif com-video-to-gif-converter(4)

Current Working Version

The current working version in this repository is NAV 2 Version 3

Version 3 uses:

  • native Point-LIO local odometry behavior
  • slam_toolbox map correction during live operation
  • a 360-degree point-cloud obstacle pipeline for Nav2
  • tank-drive tuned Nav2 control parameters

This is the version that tested best as a complete software path in the rover project.

Software Architecture

lidar_scout_rover_software_pipeline

Embedded layer

  • Arduino receives motor commands over serial
  • Arduino controls two DC motors through the motor driver shield
  • Arduino reads gas sensor raw values and sends them back to the Pi

Robot-side compute layer

  • Pi 5 runs the Unitree LiDAR driver
  • Pi publishes:
    • /unilidar/cloud
    • /unilidar/imu
  • Pi bridges /cmd_vel to the Arduino motor serial protocol
  • Pi runs the Camera node
  • Pi publishes:
    • /image_raw

Workstation autonomy layer

  • Point-LIO provides the local motion estimate
  • custom bridges normalize odometry and TF for Nav2
  • point-cloud processing nodes generate:
    • filtered obstacle views
    • a 360 obstacle cloud for Nav2
    • safety / proximity responses
  • Nav2 performs path planning and local control
  • RViz is used for live visualization and operator interaction

Main ROS 2 Components

  • ROS 2 Jazzy
  • Point-LIO
  • Nav2
  • slam_toolbox
  • pointcloud_to_laserscan
  • PCL
  • RViz2

Repository Layout

  • MEGA/ Arduino Mega motor and gas sensor code
  • PI 5/ Raspberry Pi bridge and robot-side scripts
  • DOCS/ diagrams, defense notes, tuning guides, papers, and architecture writeups
  • DOCS/metrics_logs/cpu_comparison_report.md cpu_comparison_report.md

Main V3 Files

The Version 3 stack is centered around these files:

  • /ws_lsr_nav2_v3/src/lsr_nav2/launch/rover_nav2_v3.launch.py
  • /ws_lsr_nav2_v3/src/lsr_nav2/config/nav2_v3_params.yaml
  • /ws_lsr_nav2_v3/src/lsr_nav2/config/slam_toolbox_v3_online_async.yaml
  • /ws_lsr_nav2_v3/src/lsr_nav2/rviz/rover_nav2_v3_view.rviz

Important supporting files:

  • /ws_lsr_nav2_v3/src/lsr_nav2/src/nav2_obstacle_cloud.cpp
  • /ws_lsr_nav2_v3/src/lsr_nav2/src/advanced_proximity_guard.cpp
  • /ws_lsr_nav2_v3/src/lsr_nav2/src/cmd_vel_mux.cpp
  • /ws_lsr_nav2_v3/src/lsr_nav2/src/odom_retimestamp_bridge.cpp
  • /ws_lsr_nav2_v3/src/lsr_nav2/src/lidar_retimestamp_bridge.cpp

How To Run The Current Working V3 Stack

rover_nav2_v3_flow

1. Start the LiDAR driver on the Pi

source /opt/ros/jazzy/setup.bash
ros2 launch unitree_lidar_ros2 launch.py

2. Start Point-LIO

cd ws_pointlio
source ~/ws_pointlio/install/setup.bash
ros2 launch point_lio mapping_unilidar_l1.launch.py rviz:=false

3. Start the workstation autonomy stack

source /opt/ros/jazzy/setup.bash
source /home/ros2/ws_pointlio/install/setup.bash
source /home/ros2/ws_lsr_nav2_v3/install/setup.bash
ros2 launch point_cloud_processing rover_nav2_v3.launch.py

4. Optional keyboard teleop

source /opt/ros/jazzy/setup.bash
source /home/ros2/ws_lsr_nav2_v3/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/cmd_vel_teleop

5. Optional Camera

ros2 run v4l2_camera v4l2_camera_node --ros-args \
-p video_device:="/dev/video0" \
-p image_size:="[640,480]" \
-p output_encoding:="rgb8"

What V3 Improves

rover_nav2_all_versions_flow

Compared with earlier rover software branches, V3 improves:

  • obstacle awareness around the full rover body
  • long-run map consistency
  • local control tuning for a tank-drive platform
  • separation between raw LiDAR data, filtered obstacle data, and navigation control

Odometry Drifting

Odometry drift is the gradual accumulation of error in a robot’s estimated position and orientation over time. In mobile robotics, this causes the reported pose to slowly diverge from the rover’s true position, even when the system appears to be functioning normally. ezgif com-crop

The GIF above shows version 2 with odometry drifting when Stationary. ezgif com-crop(1)

The GIF above shows version 2 with odometry drifting when Moving.

Screenshot from 2026-05-12 23-54-44 The figure above shows IMU orientation data from the /unilidar/imu topic visualized in PlotJuggler.(Moving) Screenshot from 2026-05-12 23-54-53 Even while the rover was stationary, the signals showed high-frequency oscillations and slow drift over time.(Stationary)

This behavior is consistent with vibration coupling from the spinning LiDAR assembly into the built-in IMU. Because the LiDAR physically rotates during operation, mechanical vibration from the internal motor can be transferred directly into the IMU measurements. This produces high-frequency oscillations that appear as pitch and roll jitter even when the rover is not moving. Since the IMU is integrated inside the LiDAR unit, small imbalances in the rotating mechanism may also introduce a persistent bias. Over time, that bias can be interpreted by the odometry or state-estimation pipeline as slow motion or rotation, which contributes to yaw drift and instability in the estimated pose.

As a result, the rover may appear to “shiver” in RViz through /odom or /tf despite remaining physically stationary. To reduce the long-term impact of this effect, map-based correction was integrated in Version 3 so that localization could be periodically realigned against the environment rather than relying only on odometry.

Potential Fixes

Mechanical damping: Use rubber vibration isolators between the LiDAR mount and the rover chassis to reduce the transmission of motor-induced vibration into the frame and IMU.

Zero-velocity updates: Configure the state-estimation system to detect when the rover is stationary so that IMU drift can be suppressed or weighted less heavily while the wheels are not moving.

Additional filtering or tuning: Tune the odometry or sensor-fusion pipeline to better reject the dominant vibration frequency and reduce the effect of IMU noise on /odom.

Current Status

This repository reflects the rover software as developed and tested during the project.

The main working autonomy path is the live V3 navigation and mapping configuration. Some experimental follow-on work, such as saved-map localization refinements, is still under development and should be treated as secondary to the main V3 flow above.

Author

Randy Rodriguez
LiDAR Scout Rover software architecture, ROS 2 integration, navigation, mapping, sensing, and system bringup DELTA OUTSIDE POINT LIO

About

Software repository for a distributed ROS 2 rover system built around Unitree LiDAR L1, gas sensing, and autonomous navigation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors