ROS 层自 v1.0 起仅支持 ROS 2,ROS 1(Melodic/Noetic)需切到 v0.1 tag;从源码编译 C++ 核心需自行安装 PCL、Boost、Eigen;ROS 2 节点默认订阅 ~/input,需用 input_topic 指定自己的雷达话题。
TRAVEL
url-kaistGPL-3.0更新放缓基于 3D LiDAR 扫描的图表示,把地面和地面上可通行区域与障碍物分割开,用于机器人导航中的可通行性判断。
[RA-L] Traversable ground and above-ground object segmentation using graph representation of 3D LiDAR scans
pip install travel-segREADME 未说明显存或 GPU 要求;算法核心只需 PCL + Boost,可在 Ubuntu 20.04+、macOS 13+ 上编译运行,ROS 2 层在 Humble/Jazzy 上验证。
用图表示对 3D LiDAR 扫描做可通行地面与地上物体分割的 RA-L 开源实现
基于 3D LiDAR 扫描的图表示,把地面和地面上可通行区域与障碍物分割开,用于机器人导航中的可通行性判断。
核心能力
- 用图表示组织 LiDAR 扫描并做图搜索分割
- 分离可通行地面点与地上物体点云
- 提供纯 C++ header-only 核心库,不依赖 ROS
- 提供 pip 可装的 Python 绑定 travel-seg
- 附带 ROS 2 节点,发布 ground/nonground/labeled 话题
容易踩的坑
- 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.
- v0.1v.0.1.02026-05-07 · 2026-05-07 18:08 UTC
查看更新说明
Archieve ROS1 version TRAVEL code
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
: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 tagv0.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
- Include
travel/tgs.hppandtravel/aos.hppfrom thecpp/travel/coreinclude path. - Initialize
travel::TravelGroundSeg<PointT>andtravel::ObjectCluster<PointT>. - Use
setParams()on each class to configure. - Use
TravelGroundSeg::estimateGround()for traversable ground segmentation. - Use
ObjectCluster::segmentObjects()for above-ground object segmentation. - Logging in the core is routed through
TRAVEL_LOG_*macros (intravel/logging.hpp). DefineTRAVEL_USE_ROS_LOGGINGat compile time to dispatch to ROS_INFO/WARN/ERROR; otherwise output goes to stdout/stderr.
:link: Related
pip install travel-segis now supported viapython/. Seepython/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}
}