T-Bot Mecanum Wheel Platform Autonomy Stack

repository·jazzy·Indexed 43 days ago

https://github.com/jizhang-cmu/autonomy_stack_mecanum_wheel_platform

An autonomy stack for the T-Bot Mecanum wheel platform featuring SLAM, route planning, exploration, and base navigation with collision avoidance and waypoint following. Supports real-robot deployment and Unity-based simulation on Ubuntu 24.04 with ROS2 Jazzy. Includes integration for Mid-360 lidar, motor controllers, and support for ARM architecture (Jetson) via or-tools.

Tokens
174.3K
Snippets
447
Records
698
Agent score
56%

What's inside T-Bot Autonomy Stack

  1. Overview of Ceres Solver

    jazzy

    Ceres Solver is an open-source C++ library designed for modeling and solving large, complex optimization problems. It is a mature, high-performance library used in production by Google. It is capable of solving two primary types of optimization problems:

    1. Non-linear Least Squares problems with bounds constraints.
    2. General unconstrained optimization problems.
  2. Use GeographicLib Java for geodesic algorithms

    jazzy

    This library provides a Java implementation of the geodesic algorithms described by C. F. F. Karney (2013). It is used for calculating geodesic paths and related geographic computations.

    For full API documentation, refer to the official GeographicLib Java documentation at: https://geographiclib.sourceforge.io/html/java/

  3. Understand the Unity environment model files

    jazzy

    The Unity environment model in the vehicle simulator generates several files at runtime that describe the physical and semantic properties of the simulated space. These files are essential for understanding the environment's geometry, object locations, and traversability.

    Asset and Semantic Data

    • AssetList.csv: Contains all assets in the environment model, including their poses and semantic rendering colors. This file is generated at runtime.
    • Dimensions.csv: Contains dimension information for the environment assets.
    • Categories.csv: Contains the mapping for asset categories.

    Geometry and Mapping

    • map.ply: A binary format point cloud representing the environment.
    • traversable_area.ply: A point cloud specifically defining the areas where the robot can move.
    • map.jpg: A screenshot of the segmented point cloud.
    • render.jpg: A visual image render of the environment.

    Object Metadata

    • object_list.txt: A text file containing a list of objects, their bounding boxes, and labels. Each row follows this schema: object_id, x (m), y (m), z (m), length (m), width (m), height (m), orientatoin_of_length_edge (rad), label (string)
  4. Requirements for a domain_bridge implementation

    jazzy

    A functional domain_bridge must satisfy several key requirements:

    • Entity Support: Must bridge ROS topics, services, and actions.
    • Type Agnostic: Should work with any ROS interface type (.msg, .srv, .action, or .idl) without requiring explicit code dependencies on those types, ideally by handling serialized data.
    • QoS Fidelity: Must accurately map Quality of Service (QoS) settings (e.g., reliability policies) from the source domain to the destination domain.
    • Remapping: Must support remapping names (e.g., mapping /foo in domain 1 to /bar in domain 2).
    • Configurability: Must allow configuration of domain IDs, topic/service/action names and types, QoS policies (history and depth), and remappings via an API or external files (YAML/XML) without code changes.
    • Security Compatibility: Must work alongside SROS 2 without subverting security mechanisms, though users should be aware that bridging a secure topic into an unsecured domain creates a vulnerability.
  5. Use the Sophus Python API

    jazzy

    The sophus Python package provides bindings for Lie group and Lie algebra operations. It is organized into several modules based on the mathematical structure being manipulated. You can use these modules to perform transformations, rotations, and geometric computations required for SLAM and robotics tasks.

    Available modules include:

    • sophus.matrix: Matrix operations.
    • sophus.complex: Complex number operations.
    • sophus.quaternion: Quaternion-based rotations.
    • sophus.so2: Special Orthogonal group in 2D (rotations in 2D).
    • sophus.so3: Special Orthogonal group in 3D (rotations in 3D).
    • sophus.se2: Special Euclidean group in 2D (rigid body motions in 2D).
    • sophus.se3: Special Euclidean group in 3D (rigid body motions in 3D).
  6. SuiteSparse package overview

    jazzy

    SuiteSparse is a collection of software packages for sparse matrix operations. The following packages utilize SuiteSparse_config for their build configuration:

    PackageDescription
    AMDapproximate minimum degree ordering
    CAMDconstrained AMD
    COLAMDcolumn approximate minimum degree ordering
    CCOLAMDconstrained approximate minimum degree ordering
    UMFPACKsparse LU factorization, with the BLAS
    CXSparseint/long/real/complex version of CSparse
    CHOLMODsparse Cholesky factorization, update/downdate
    KLUsparse LU factorization, BLAS-free
    BTFpermutation to block triangular form
    LDLconcise sparse LDL'
    LPDASALP Dual Active Set Algorithm
    RBioread/write files in Rutherford/Boeing format
    SPQRsparse QR factorization (SuiteSparseQR)

    Note: The following packages do not require SuiteSparse_config:

    • CSparse: A Concise Sparse matrix package.
    • MATLAB_Tools: Toolboxes for use in MATLAB.
    • GraphBLAS: Graph algorithms in the language of linear algebra.
  7. Explore the geographiclib API modules

    jazzy

    The geographiclib Python package is organized into several specialized modules for geodesic computations:

    • geographiclib.geodesic: Handles geodesic calculations on an ellipsoid.
    • geographiclib.geodesicline: Provides functionality related to geodesic lines.
    • geographiclib.polygonarea: Used for calculating the area of geographic polygons.
    • geographiclib.constants: Contains physical and mathematical constants used by the library.
  8. Explore GTSAM example categories

    jazzy

    GTSAM provides various examples categorized by application domain. Use these as templates for your own factor graph implementations:

    Structure from Motion (SFM) & Visual SLAM

    • SimpleRotation: Optimizing a single rotation against a prior.
    • CameraResectioning: Resecting a camera from known points.
    • SFMExample: Basic structure from motion.
    • SFMExample_bal: SFM using data from a BAL file.
    • SelfCalibrationExample: SFM with simultaneous calibration optimization.
    • vSFMexample: Visual SLAM for SFM.
    • vISAMexample: Visual SLAM using ISAM for incremental updates.

    Stereo Visual Odometry (VO)

    • StereoVOExample: Basic stereo VO.
    • StereoVOExample_large: Stereo VO using KITTI data snippets.

    Kalman Filter (Factor Graph based)

    • elaboratePoint2KalmanFilter: Linear Kalman filter on a 2D point using factor graphs.
    • easyPoint2KalmanFilter: Uses the generic templated Kalman filter class.
    • fullStateKalmanFilter: 1D example with a full-state filter.
    • errorStateKalmanFilter: 1D example of a moving target with accelerometer measurements and drift-rate bias.

    2D Pose SLAM

    • LocalizationExample.cpp: Modeling robot motion.
    • Pose2SLAMExample: Uses predefined typedefs in gtsam/slam/pose2SLAM.h.
    • Pose2SLAMExample_advanced: Uses an Optimizer object.
    • Pose2SLAMwSPCG: Solves a 3x3 grid problem using the SPCG interface.

    Planar SLAM

    • PlanarSLAMExample: Robotics example using the pre-built planar SLAM domain.
    • PlanarSLAMExample_selfcontained: Planar SLAM with internal typedefs.
  9. Overview of Sophus Lie Groups

    jazzy

    Sophus is a C++ implementation of Lie groups designed for 2D and 3D geometric problems in Computer Vision and Robotics. It provides mathematical representations for:

    • Rotations: Using the special orthogonal groups SO(2) (2D) and SO(3) (3D).
    • Rigid Body Transformations (Rotations and Translations): Using the special Euclidean groups SE(2) (2D) and SE(3) (3D).

    For detailed API documentation, visit: https://strasdat.github.io/Sophus/

  10. What is pybind11 and how does it work?

    jazzy

    pybind11 is a lightweight, header-only C++ library designed to create seamless Python bindings for existing C++ code. It uses compile-time introspection to infer type information, which minimizes the boilerplate code typically required for traditional extension modules.

    Key characteristics:

    • Header-only: No need to link against additional libraries; everything is contained in a few header files.
    • Lightweight: It is a compact alternative to Boost.Python, specifically leveraging C++11 features like tuples, lambda functions, and variadic templates.
    • Dependencies: Requires Python (3.6+ or PyPy) and the C++ standard library.
    • Performance: Uses C++11 move constructors/assignment for efficient data transfer and constexpr for precomputing function signatures at compile time, resulting in smaller binaries.