Ubuntu22.04 + ROS2 Humble 安装部署 PCT Planner 一、项目介绍基于PCT Planner的多楼层3D全局路径规划技术创新性地解决了多楼层3D导航的难题整个工作流程主要分为环境预处理和路径规划两部分。1. 整体工作流概览规划的核心思想是利用点云生成一系列2D“断层扫描图像Tomogram”作为多楼层导航的基础地图。整个工作流程可以分为线下和线上两个阶段线下预处理 (Tomography)输入原始3D点云地图通过GPU加速的断层扫描算法生成一张2.5D的可通行性代价地图Tomogram格式为.pickle文件。线上规划 (Planning)在RViz2中交互式选择起点和终点规划器会在这张预处理好的地图上进行A*搜索得到一条平滑的3D路径并实时避开悬空障碍物。2. 可通行区域判断从3D点云到2.5D代价图判断“哪里能走”的本质是通过层析技术将复杂的3D空间降维成易于计算的2.5D地图具体包含以下核心步骤生成层析切片 (Tomogram Slices)算法沿Z轴以固定分辨率扫描点云在每个垂直区间内计算出局部地面高度和天花板高度将包含楼板、斜坡等不同高度的物理结构编码为多个2D切片。评估机器人运动能力在每个切片上算法会综合考量机器人的尺寸和通过性计算出每个位置的可通行性代价值。可通行性代价值intensity物理尺寸确保有足够的最小垂直净空如0.50米和碰撞安全半径如0.40米。台阶与坡度评估机器人能否跨过最大台阶高度step_max如0.17米或爬上最大坡度slope_max如23°的区域。安全性边际除了硬性的障碍物还会设置渐变的成本区域inflation让路径规划更自然地与障碍物保持距离。3. 上下楼路径规划在层析切片间无缝探索这是PCT Planner的关键创新之一。它通过以下方式实现了上下楼的连续规划跨越切片的通用搜索规划器将不同楼层的层析切片视为一个统一的图Graph进行搜索搜索逻辑在物理上天然支持跨楼层。以3D点连接不同楼层楼梯或坡道在3D点云中表现为连续的斜面。算法在每个高度切片上检测到这些过渡区域并通过搜索算法将其平滑地连接起来从而在生成的最终3D路径中自动包含从起点楼层到终点楼层的完整上下楼轨迹。二、部署指南1.环境准备安装ROS2 Humble、CUDA 12.x以及cmake、gcc、eigen3等系统工具。1硬件与软件环境建议先确认以下基础条件操作系统Ubuntu 22.04 LTSROS2 发行版Humble Hawksbill桌面完整版CUDA11.5系统预装通过nvidia-smi确认驱动支持的 CUDA 版本Python3.102检查 CUDA 和驱动打开终端输入nvidia-smi查看驱动最高支持的CUDA版本打开终端输入nvcc --version查看实际安装的CUDA Toolkit版本注意如果nvcc显示CUDA 11.x则必须安装cupy-cuda11x若显示CUDA 12.x则使用cupy-cuda12x。2. 获取源码并安装系统依赖1创建工作空间并克隆仓库打开终端输入mkdir -p ~/d7lros2/PCT_wscd ~/d7lros2/PCT_ws克隆仓库git clone https://github.com/rvxfahim/PCT_planner.gitcd PCT_planner2安装依赖更新源sudo apt update安装依赖sudo apt install -y libeigen3-dev libboost-all-dev cmake build-essential3设置 Python 虚拟环境为避免依赖冲突使用 Python 虚拟环境。创建虚拟环境python3 -m venv ~/pct_venv激活虚拟环境source ~/pct_venv/bin/activate注意每次使用前都需要重新激活虚拟环境。升级 pippip install --upgrade pip4安装 Python 依赖安装基础依赖pip install numpy1.24.3 pip install scipy1.10.1 pip install open3d0.17.0 pip install scikit-learn1.2.25安装 CuPy根据nvcc --version显示的 CUDA 版本选择如果是CUDA 11.x输入pip install cupy-cuda11x13.6.0如果是CUDA 12.x输入pip install cupy-cuda12x13.6.0验证安装python3 -c import cupy as cp; print(fCuPy version: {cp.__version__}); print(fCUDA available: {cp.cuda.is_available()})3. 编译 C 依赖库GTSAM OSQP打开终端输入cd ~/d7lros2/PCT_ws/PCT_planner/planner编译第三方库约 5–10 分钟bash build_thirdparty.sh编译pybind11模块bash build.sh编译完成后会在planner/lib/目录下生成.so文件。三、测试验证1. 准备点云数据1使用示例点云Building 场景打开终端输入cd ~/d7lros2/PCT_ws/PCT_planner解压缩点云文件unzip rsc/pcd/pcd_files.zip -d rsc/pcd/2使用自定义点云可选将自定义的.pcd文件复制到rsc/pcd/例如cp /path/to/your_cloud.pcd rsc/pcd/clinic.pcd2. 生成断层扫描地图Tomogram1为 Building 场景生成打开终端输入cd ~/d7lros2/PCT_ws/PCT_planner/tomography/scripts激活环境source ~/pct_venv/bin/activate场景生成python3 run_standalone.py --scene Building成功输出示例[INFO] Loading PCD: .../building2_9.pcd [INFO] PCD points: 853227 [INFO] Map center: [-0.37, 1.37] [INFO] Dim_x: 285, Dim_y: 150 [INFO] Num slices init: 30 → simplified: 8 [INFO] Tomogram exported: .../rsc/tomogram/building2_9.pickle2为自定义场景如 clinic生成需先在tomography/config/下创建scene_clinic.py配置文件可参考scene_building.py然后运行python3 run_standalone.py --scene Clinic3. 运行路径规划无 ROS 测试可选先验证整个流程是否正常不依赖 ROS。打开终端输入cd ~/d7lros2/PCT_ws/PCT_planner/planner/scripts激活环境source ~/pct_venv/bin/activate运行路径规划python3 plan_standalone.py --scene Building如果成功会输出路径规划信息和保存的轨迹文件。4. 启动 ROS2 交互式规划1准备符号链接使节点能找到点云和 tomogram节点默认寻找rsc/pcd/clinic.pcd和rsc/tomogram/clinic.pickle。我们可以用Building的数据建立链接cd ~/d7lros2/PCT_ws/PCT_plannerln -sf rsc/pcd/building2_9.pcd rsc/pcd/clinic.pcd ln -sf rsc/tomogram/building2_9.pickle rsc/tomogram/clinic.pickle2启动 RViz2 可视化打开一个终端激活虚拟环境并 source ROS2source ~/pct_venv/bin/activate source /opt/ros/humble/setup.bash到你的工作目录cd ~/d7lros2/PCT_ws/PCT_planner启动RVIZrviz2 -d rsc/rviz/pct_ros2.rviz3启动 ROS2 规划节点打开另一个终端激活虚拟环境并 source ROS2source ~/pct_venv/bin/activate source /opt/ros/humble/setup.bash到你的工作目录cd ~/d7lros2/PCT_ws/PCT_planner运行路径规划python3 run_ros2_interactive.py --skip-tomo参数--skip-tomo表示使用已有的tomogram文件不再重新生成。5. 在 RViz2 中交互式规划1设置 Fixed Frame在 RViz 左侧Global Options中设置Fixed Frame为map2显示点云和 tomogram在Displays面板中确保Raw Point Cloud和Tomogram都已勾选。对于每个PointCloud2显示项设置Style:Points或SquaresSize:0.05~0.1Color Transformer:Intensitytomogram或AxisColor调试6. 选择起点和终点1切换为Orbit左下角选择Orbit可以发现右边不再是俯视图2选择起点点击工具栏的Publish Point按钮在点云地图上单击设置起点绿色球体出现3选择终点在另一处单击设置终点红色球体出现规划器自动运行成功后显示绿色路径线/pct_path。一常见问题及解决方法汇总问题现象原因解决方案ModuleNotFoundError: No module named cupy未安装 CuPy根据nvcc --version安装对应版本cupy-cuda11x或cupy-cuda12xImportError: numpy.core.multiarray failed to importNumPy 版本与 CuPy 不兼容固定 NumPy 版本pip install numpy1.24.3OSError: libnvrtc.so.12: cannot open shared object fileCuPy 版本与系统 CUDA 不匹配系统 CUDA 11.5 却安装了cupy-cuda12x改用cupy-cuda11xValueError: zero-size array在 ROS2 节点启动时找不到.pcd文件创建符号链接指向存在的点云或检查路径RViz 中显示Showing [0] pointsFrame_id 不匹配或 QoS 问题将 Global Options 的 Fixed Frame 设置为map或清空重启节点RViz 中看不到任何点云视图未对准将 Views 类型改为Orbit点击 Reset然后缩放/旋转找到点云Tomography 运行后生成的文件名不是clinic.pickle脚本默认使用场景名创建符号链接或修改run_ros2_interactive.py中的文件名二参数调优参考如需调整机器人尺寸、步高、坡度等修改tomography/config/scene_clinic.py中的参数然后重新生成 tomogram。详细说明见项目中的PARAMETERS.md。关键参数示例map.resolution栅格分辨率默认 0.10 mtrav.safe_margin碰撞半径默认 0.4 mtrav.step_max最大可跨越台阶高度默认 0.17 mtrav.slope_max最大可爬坡度默认 0.40 rad ≈ 23°三完整部署检查清单Ubuntu 22.04 ROS2 HumbleNVIDIA 驱动正常nvidia-smi运行无误nvcc显示 CUDA 版本11.x 或 12.x克隆仓库并安装系统依赖创建 Python 虚拟环境并激活安装 NumPy 1.24.3、SciPy、Open3D、scikit-learn安装与 CUDA 版本匹配的 CuPy编译 GTSAM 和 OSQPbuild_thirdparty.sh编译 pybind11 模块build.sh解压示例点云或准备自定义点云生成 tomogramrun_standalone.py --scene Building测试无 ROS 规划plan_standalone.py创建符号链接使 ROS2 节点能加载数据启动 ROS2 节点run_ros2_interactive.py --skip-tomo启动 RViz2调整 Fixed Frame 和视图在 RViz 中点击起点和终点成功生成路径