TRAVEL

url-kaistGPL-3.0更新放缓

基于 3D LiDAR 扫描的图表示,把地面和地面上可通行区域与障碍物分割开,用于机器人导航中的可通行性判断。

[RA-L] Traversable ground and above-ground object segmentation using graph representation of 3D LiDAR scans

test-data-v1发布于 2026-05-08 15:18 UTC350star39fork同步于 2026-11-07 07:30 UTC

怎么上手

由 README 提炼,执行前请确认
pip install travel-seg
硬件要求按 README 说明

README 未说明显存或 GPU 要求;算法核心只需 PCL + Boost,可在 Ubuntu 20.04+、macOS 13+ 上编译运行,ROS 2 层在 Humble/Jazzy 上验证。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用图表示对 3D LiDAR 扫描做可通行地面与地上物体分割的 RA-L 开源实现

基于 3D LiDAR 扫描的图表示,把地面和地面上可通行区域与障碍物分割开,用于机器人导航中的可通行性判断。

核心能力

  • 用图表示组织 LiDAR 扫描并做图搜索分割
  • 分离可通行地面点与地上物体点云
  • 提供纯 C++ header-only 核心库,不依赖 ROS
  • 提供 pip 可装的 Python 绑定 travel-seg
  • 附带 ROS 2 节点,发布 ground/nonground/labeled 话题

容易踩的坑

ROS 层自 v1.0 起仅支持 ROS 2,ROS 1(Melodic/Noetic)需切到 v0.1 tag;从源码编译 C++ 核心需自行安装 PCL、Boost、Eigen;ROS 2 节点默认订阅 ~/input,需用 input_topic 指定自己的雷达话题。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

2 个版本test-data-v1
  1. test-data-v1Test Data v1 (KITTI sequence 00 frame 0)最新正式版2026-05-08 · 2026-05-08 15:18 UTC

    Static test fixtures used by the C++ regression harness in cpp/tests/regression_kitti.cpp.

    • kitti00_000000.bin: 124,668-point KITTI velodyne scan (sequence 00, frame 0). Float32 (N, 4) XYZI. Used by the GitHub Actions regression workflow as the canonical algorithm input.

    The companion gold dump (cpp/tests/data/kitti00_000000_gold.bin) is committed to the repo directly and is ~374 KB.

    This release is data-only; it does not represent a code release of TRAVEL.

  2. v0.1v.0.1.02026-05-07 · 2026-05-07 18:08 UTC
    查看更新说明

    Archieve ROS1 version TRAVEL code

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译


    :rocket: Overview

    Official page of "TRAVEL: Traversable Ground and Above-Ground Object Segmentation using Graph Representation for 3D LiDAR Scans", which is accepted by RA-L with IROS'22 option.

    Keywords

    Object segmentation, Traversable ground segmentation, Graph search, Autonomous navigation, LiDAR


    :open_file_folder: Repository Layout

    The repo is split so the algorithm core can be consumed without ROS or even without C++ tooling.

    TRAVEL/
    ├── cpp/
    │   ├── travel/        # Pure C++ core library (header-only). No ROS.
    │   │   ├── core/travel/{tgs,aos,point_types,save_labels,kitti_loader,logging}.hpp
    │   │   └── core/travel/3rdparty/nanoflann*.hpp
    │   └── examples/      # Standalone CLI demo (run_travel_kitti). No ROS.
    ├── python/            # pip-installable bindings (travel-seg).
    │   ├── pyproject.toml, CMakeLists.txt
    │   └── travel_seg/    # numpy-friendly Python API on top of the C++ core
    └── ros/               # ROS 2 (ament_cmake) wrapper that consumes cpp/travel/.
        └── src/travel_node.cpp, launch/, config/, rviz/
    

    ROS 2 only. As of v1.0, the ros/ layer is ROS 2 (ament_cmake). The previous catkin / ROS 1 wrapper lives on at tag v0.1. Pin to that tag for Melodic / Noetic.


    :test_tube: Test Env.

    • Algorithm core (cpp/): Ubuntu 20.04+, macOS 13+ (Apple Silicon / Intel) — needs only PCL + Boost.
    • ROS 2 wrapper (ros/): verified on Humble (Ubuntu 22.04) and Jazzy (Ubuntu 24.04).

    :hammer: How to Build

    Python (pip)

    pip install travel-seg
    

    Prebuilt wheels are published for Linux x86_64 (manylinux), macOS arm64 + x86_64, and Windows x86_64 for CPython 3.8–3.13 — no system PCL / Boost install required since v1.1.

    For development from a checkout:

    # Ubuntu deps:  sudo apt install build-essential cmake libeigen3-dev
    # macOS deps:   brew install cmake eigen
    # Windows deps: vcpkg install eigen3:x64-windows
    
    git clone https://github.com/url-kaist/TRAVEL.git
    cd TRAVEL
    pip install -e python/   # editable; rebuilds C++ on next import if changed
    

    Quick start:

    import numpy as np, travel_seg as ts
    points = np.fromfile("0000.bin", dtype=np.float32).reshape(-1, 4)
    result = ts.segment(points)            # SegmentResult
    ground_pts = points[result.ground_mask]
    

    See python/README.md for the full API.

    Core library + standalone example (no ROS)

    # Dependencies
    # Ubuntu:  sudo apt install cmake libeigen3-dev libboost-all-dev libpcl-dev
    # macOS:   brew install cmake eigen boost pcl
    
    cmake -S cpp/travel -B build -DTRAVEL_BUILD_EXAMPLES=ON
    cmake --build build -j
    
    # Run the demo on a KITTI sequence
    ./build/examples/run_travel_kitti /path/to/kitti/sequences/00 0 /tmp/travel_out
    

    ROS 2 wrapper

    # Dependencies (Humble / Ubuntu 22.04; Jazzy / 24.04 substitutes 'humble' below)
    sudo apt install build-essential cmake libeigen3-dev libpcl-dev \
                     libboost-system-dev libboost-filesystem-dev mpi-default-dev \
                     ros-humble-pcl-conversions
    
    mkdir -p ros2_ws/src
    cd ros2_ws/src
    git clone https://github.com/url-kaist/TRAVEL.git
    cd ..
    source /opt/ros/humble/setup.bash
    colcon build --packages-select travel_ros
    

    Verified in CI on Humble (Ubuntu 22.04) and Jazzy (Ubuntu 24.04) via the official ros:humble / ros:jazzy Docker images.


    :arrow_forward: How to Run TRAVEL

    source install/setup.bash
    ros2 launch travel_ros travel_run.launch.py input_topic:=/your_lidar_topic
    

    The node subscribes to ~/input (sensor_msgs/PointCloud2) and publishes ~/ground, ~/nonground, ~/labeled. All algorithm parameters are declared as ROS 2 node parameters; see ros/config/kitti_params.yaml.


    :wrench: On your setting

    1. Include travel/tgs.hpp and travel/aos.hpp from the cpp/travel/core include path.
    2. Initialize travel::TravelGroundSeg<PointT> and travel::ObjectCluster<PointT>.
    3. Use setParams() on each class to configure.
    4. Use TravelGroundSeg::estimateGround() for traversable ground segmentation.
    5. Use ObjectCluster::segmentObjects() for above-ground object segmentation.
    6. Logging in the core is routed through TRAVEL_LOG_* macros (in travel/logging.hpp). Define TRAVEL_USE_ROS_LOGGING at compile time to dispatch to ROS_INFO/WARN/ERROR; otherwise output goes to stdout/stderr.

    :link: Related

    • pip install travel-seg is now supported via python/. See python/README.md.
    • For the previous third-party Python wrapper, see https://github.com/darrenjkt/TRAVEL. Thank you Darren :)

    :page_facing_up: Citation

    If our research has been helpful, please cite the below papers:

    @ARTICLE{oh2022travel,  
        author={Oh, Minho and Jung, Euigon and Lim, Hyungtae and Song, Wonho and Hu, Sumin and Lee, Eungchang Mason and Park, Junghee and Kim, Jaekyung and Lee, Jangwoo and Myung, Hyun},  
        journal={IEEE Robotics and Automation Letters},   
        title={TRAVEL: Traversable Ground and Above-Ground Object Segmentation Using Graph Representation of 3D LiDAR Scans},   
        volume={7},  
        number={3},  
        pages={7255-7262},  
        year={2022},
        }
    
    @article{lim2021patchwork,
        title={Patchwork: Concentric Zone-based Region-wise Ground Segmentation with Ground Likelihood Estimation Using a 3D LiDAR Sensor},
        author={Lim, Hyungtae and Minho, Oh and Myung, Hyun},
        journal={IEEE Robot. Autom. Lett.},
        volume={6},
        number={4},
        pages={6458--6465},
        year={2021},
        }
    
    @article{lim2021erasor,
        title={ERASOR: Egocentric Ratio of Pseudo Occupancy-Based Dynamic Object Removal for Static 3D Point Cloud Map Building},
        author={Lim, Hyungtae and Hwang, Sungwon and Myung, Hyun},
        journal={IEEE Robotics and Automation Letters},
        volume={6},
        number={2},
        pages={2272--2279},
        year={2021},
        publisher={IEEE}
        }