Skip to content

Conversation

@ErikCald
Copy link
Contributor

Created an efk profile and a lidar_2dslam.launch.py which will launch all the regular autonomy stuff as normal, except it will launch the ouster lidar and use a different efk profile that just replaces the gps odom with a pose from slam_toolbox. That way the system operates very closely to how it will with proper gps, and we can performance test the elevation mapping pipeline without worrying about the ouster potentially interfering with it (which other solutions might have that problem).

JIRA: https://jira.engsoc.net/browse/ROVER-673

Copliot summary

This pull request introduces a new EKF (Extended Kalman Filter) profile for lidar-based 2D SLAM localization and adds configuration support for it throughout the launch and configuration files. Additionally, it provides a tailored parameter file for slam_toolbox to optimize SLAM performance with lidar data. The main changes are grouped below:

EKF profile support for lidar-based 2D SLAM:

  • Added new configuration files lidar_2dslam_ekf_local.yaml and lidar_2dslam_ekf_global.yaml for local and global EKF settings specific to lidar-based 2D SLAM. These files include sensor topics, frame settings, and covariance parameters optimized for lidar and IMU integration. [1] [2]
  • Updated ekf.launch.py to support selection of the new lidar_2dslam profile, including changes to profile constants, default handling, and error messages. [1] [2]

Launch file integration for EKF profile selection:

  • Modified localization.launch.py to propagate the ekf_profile argument, allowing users to select between gps and lidar_2dslam EKF profiles at launch time. This includes argument declaration, passing, and default handling. [1] [2] [3] [4]

SLAM toolbox configuration for lidar mapping:

  • Added a new parameter file slam_toolbox_params.yaml with settings tuned for lidar-based online mapping, including solver configuration, scan matching, keyframe creation, loop closure, and penalty parameters. These changes are designed to improve mapping accuracy and robustness for lidar-based SLAM.

@ErikCald ErikCald requested a review from ConnorNeed November 14, 2025 07:50
@ErikCald ErikCald self-assigned this Nov 14, 2025
@ErikCald ErikCald added the enhancement New feature or request label Nov 14, 2025
# Pointcloud to LaserScan conversion
ComposableNode(
package="pointcloud_to_laserscan",
plugin="pointcloud_to_laserscan::PointCloudToLaserScanNode",
Copy link
Contributor Author

@ErikCald ErikCald Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I maybe did something weird by converting the 3d pointcloud from the ouster into a laser scan instead of just giving the laser scan from the ouster to the slam toolbox. This does let me configure a bit more about what ranges points to accept and min/max threshold, but now that I think about it there must exist a laser scan trimming package that is better than doing this.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds a new EKF profile for lidar-based 2D SLAM localization to enable indoor autonomy testing without GPS. The implementation integrates the Ouster lidar with SLAM Toolbox to generate pose estimates that replace GPS odometry in the EKF, allowing performance testing of the elevation mapping pipeline in GPS-denied environments.

Key changes:

  • Added lidar_2dslam EKF profile with dedicated local and global configuration files
  • Created new launch file lidar_2dslam.launch.py that orchestrates SLAM components with composable nodes
  • Added SLAM Toolbox parameter configuration optimized for the Ouster lidar sensor

Reviewed Changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
package.xml Added dependencies for pointcloud_to_laserscan and slam_toolbox packages
ouster_composable.launch.py Added target_container argument for flexible container assignment and improved documentation
lidar_2dslam.launch.py New launch file that sets up SLAM container with pointcloud conversion and SLAM nodes
slam_toolbox_params.yaml New parameter file with tuned settings for lidar-based online SLAM mapping
localization.launch.py Added ekf_profile argument to support profile selection
ekf.launch.py Updated to support lidar_2dslam profile with improved constant naming and default handling
lidar_2dslam_ekf_local.yaml New local EKF configuration using SLAM pose instead of GPS
lidar_2dslam_ekf_global.yaml New global EKF configuration using SLAM pose instead of GPS
Comments suppressed due to low confidence (2)

src/Nav/navigation/launch/lidar_2dslam.launch.py:2

  • Import of 'Path' is not used.
from pathlib import Path

src/Nav/navigation/launch/lidar_2dslam.launch.py:9

  • Import of 'IfCondition' is not used.
from launch.conditions import IfCondition

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@ConnorNeed
Copy link
Member

A few general concerns:

  1. Is slam toolbox so good that it can completely replace the ZED odom suite. Maybe so but I think that's probably asking too much. Can we incorporate something the the ~/odom topic from zed to give us some more data? This should also fix the need for initial odom publisher.
  2. I am not a huge fan of the inital odometry publisher. It feels like a hackier hack than necessary. Maybe it's the only way but I think we can find a better way.
  3. Nothing is being used for z position that I can see. This has hurt us in the past.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants