D435i + ROS2

针对 Ubuntu 24.04 的全新高精度 SLAM 教程

jetson部署:

https://blog.csdn.net/weixin_53776054/article/details/128552701

方案概述:

复制代码
硬件: Intel RealSense D435i
操作系统: Ubuntu 24.04 LTS
中间件: ROS 2 Jazzy Jalisco
核心算法: ORB-SLAM3 (通过社区支持的 ROS 2 封装)
可视化工具: RViz2

第一步:基础环境搭建 (ROS 2 版本)

1.1 安装 ROS 2 Jazzy Jalisco

在 Ubuntu 24.04 上,安装 ROS 2 非常直接。

调用鱼香一键脚本,安装jazzy

wget http://fishros.com/install -O fishros && . fishros

1.2 安装 Intel RealSense SDK 2.0 (与之前相同)

这个步骤基本不变,Intel 的官方源截至目前(20250705),没有支持apt install。

需要手动编译:

sudo apt update

sudo apt install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev libglfw3-dev libgl1-mesa-dev build-essential cmake

cd ~ # 回到主目录

git clone https://github.com/IntelRealSense/librealsense.git

cd librealsense

git checkout v2.56.3 #要切换到最新版本才能和jazzy对上

mkdir build && cd build

复制代码
# 运行 CMake 进行配置。
# -DBUILD_EXAMPLES=true 会同时编译 realsense-viewer 等工具
# -DCMAKE_BUILD_TYPE=Release 是为了获得优化后的高性能版本
cmake ../ -DBUILD_EXAMPLES=true -DCMAKE_BUILD_TYPE=Release

# 开始编译。-j 后面的数字是您CPU的核心数,可以加快编译速度。
# 如果不确定,可以用 `nproc` 命令查看核心数,例如 make -j$(nproc)
make -j4

# 将编译好的库和工具安装到系统中
sudo make install

1.3 安装 RealSense ROS 2 Wrapper

这是第一个重大变化。我们需要安装 ROS 2 版本的封装。

bash

1. 创建一个 ROS 2 工作空间 (colcon workspace)

mkdir -p ~/ros2_ws/src

cd ~/ros2_ws/src/

2. 克隆 realsense-ros 源码

git clone https://github.com/IntelRealSense/realsense-ros.git

3. 切换到 ROS 2 分支

cd realsense-ros/

git checkout ros2-development # 这是关键!切换到 ROS 2 分支,但是这个分支对LibrealSense要求过高

cd ~/ros2_ws/

4. 安装依赖并编译

rosdep 在 ROS 2 中用法相同

sudo rosdep init #sudo -E rosdep init 如果需要代理,要加-E使代理生效

rosdep update

rosdep install -i --from-path src --rosdistro jazzy -y

使用 colcon 编译,而不是 catkin_make

colcon build --symlink-install

5. 让环境生效

echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

source ~/.bashrc

第二步:编译安装 ORB-SLAM3 (ROS 2 版本)

官方的 ORB-SLAM3 不直接支持 ROS 2。幸运的是,有优秀的社区开发者维护了 ROS 2 的封装。

2.1 安装依赖 (与之前类似)

bash

sudo apt-get update

sudo apt-get install -y build-essential cmake git libgoogle-glog-dev libatlas-base-dev libeigen3-dev

Pangolin 的安装方式不变

cd ~

git clone --recursive https://github.com/stevenlovegrove/Pangolin.git

cd Pangolin

./scripts/install_prerequisites.sh recommended

cmake -B build

cmake --build build

sudo cmake --build build --target install

2.2 编译 ORB-SLAM3 及其 ROS 2 封装

我们将使用一个广受好评的社区版本。

bash

最终正确的启动命令

请使用下面这条最完整、最明确的命令:

bash

ros2 launch realsense2_camera rs_launch.py enable_imu:=true enable_gyro:=true enable_accel:=true unite_imu_method:=2

如果还想看点云

如果您还想同时启用点云,那么最终的"全功能"命令是:

bash

ros2 launch realsense2_camera rs_launch.py pointcloud.enable:=true enable_imu:=true enable_gyro:=true enable_accel:=true unite_imu_method:=2

最终方案推荐:Cartographer + AprilTags/ArUco 标记

对于您的需求,Cartographer 是最佳的底层 SLAM 系统,但它需要一个额外的"全局定位层"来满足您的第三个需求。

下面是这个方案的完整架构和原因。

方案架构

这个解决方案分为三个核心组件:

复制代码
车载 SLAM 系统 (Onboard SLAM System):运行在移动机器人上,负责实时定位和建立/更新局部环境地图。
全局定位与配准系统 (Global Localization & Registration System):利用天花板摄像头,将机器人的局部地图"锚定"到一个全局的、固定的世界坐标系中。
任务规划与执行系统 (Task Planning & Execution System):在全局坐标系下进行任务编排和路径规划。

组件一:车载 SLAM 系统 - 为什么选择 Cartographer?

对于您的前两个需求,Cartographer 是最合适的选择。

需求 1:定位精度

复制代码
Cartographer 的强项:Cartographer 的核心优势在于其极其鲁棒和精确的定位能力。它通过紧密耦合 IMU 数据和点云数据,并结合一个强大的后端位姿图优化器,能够提供非常平滑、精确且不易丢失的定位结果。对于需要精确执行任务的机器人来说,这种可靠性至关重要。

需求 2:适应动态变化

复制代码
Cartographer 的处理方式:我们之前讨论过,Cartographer 通过其子图(Submap)机制来处理动态变化。它不会"擦除"旧数据,而是通过不断创建包含最新环境信息的新子图,在最终生成占用栅格地图时,用新的、更一致的数据在概率上"压倒"旧数据。
实际效果:这意味着当您移动家具并持续在区域内操作机器人时,Cartographer 生成的用于导航的 2D 成本地图(Costmap)会逐渐更新,反映出家具的新位置和旧位置的空闲状态。这正是您所需要的"地图刷新"功能,它保证了机器人可以适应环境的渐进式变化。

组件二:全局定位与配准系统 - 如何与天花板摄像头配合?

这是您需求中最关键也最具挑战性的一环。单独的 Cartographer 无法知道它自己建立的 map 坐标系与天花板摄像头的坐标系之间的关系。我们需要一个"共同语言"来连接它们。

最佳实践:使用基准标记 (Fiducial Markers)

最可靠、最精确、最容易实现的方法是使用 AprilTags 或 ArUco 标记。

操作流程:

复制代码
物理部署:在室内场景中,选择几个位置,将 AprilTag 标记同时粘贴在机器人和天花板摄像头都能清晰看到的地方(例如,墙壁的中下部、固定的机器设备上)。

天花板摄像头节点:
    运行一个 ROS 2 节点,让天花板摄像头持续检测视野内的所有 AprilTag。
    这个节点会发布每个 Tag 相对于天花板摄像头坐标系 (ceiling_cam_frame) 的位姿。

机器人车载摄像头节点:
    您的 D435i 在移动过程中,也会看到这些 AprilTag。
    运行一个节点(例如 apriltag_ros),它会发布每个 Tag 相对于D435i 摄像头坐标系 (camera_color_frame) 的位姿。

创建"全局配准节点 (Global Registrar Node)":
    这是您需要自己编写的一个核心节点。它的逻辑非常清晰:
    订阅:同时订阅来自天花板摄像头和机器人摄像头的 AprilTag 检测结果。
    监听 TF:监听由 Cartographer 发布的从 map 到 camera_color_frame 的 TF 变换树。
    计算:当两个摄像头都看到同一个 ID 的 AprilTag 时,奇迹发生了。此时我们拥有了两条变换链:
        ceiling_cam_frame -> Tag_N
        map -> base_link -> camera_color_frame -> Tag_N
    通过这两条链,该节点就可以精确计算出从 ceiling_cam_frame 到 Cartographer 的 map frame 的变换关系 (tf_ceiling_to_map)。
    发布:这个节点的主要任务就是计算并持续发布 (broadcast) 这个 tf_ceiling_to_map 的 TF 变换。

最终效果:一旦这个配准节点运行起来,您的整个系统就有了一个统一的、全局的 TF 树。天花板摄像头坐标系成为了所有系统的"世界坐标系"。

组件三:任务规划与执行系统 - 如何实现?

有了统一的坐标系,任务编排就变得非常直观了。

复制代码
用户界面 (UI):您可以创建一个简单的 UI,显示天花板摄像头的实时视频流。
任务下发:当操作员在 UI 的视频流上点击一个点(例如,"去那个桌子旁边"),系统会记录下这个像素坐标 (u, v)。
坐标转换:利用天花板相机的内参,可以将这个像素坐标转换成在 ceiling_cam_frame 下的一个三维目标点。
目标发布:将这个在 ceiling_cam_frame 下的目标点,通过我们刚刚建立的 TF 树,转换到机器人导航系统(如 Nav2)所使用的 map 坐标系下。
路径规划与执行:将转换后的目标点作为导航目标发送给 Nav2。Nav2 会在 Cartographer 生成的(并已动态更新的)地图上规划路径,并控制机器人移动过去。

为什么不选 RTAB-Map 或 VINS-Fusion?

复制代码
RTAB-Map:是一个强有力的备选方案。它在三维建模和传感器支持方面非常出色。但是,对于需要长期、高可靠性定位的机器人任务,Cartographer 的后端优化和鲁棒性通常被认为略胜一筹。RTAB-Map 的内存管理机制虽然也能处理动态物体,但其核心是为大规模建图设计的,而 Cartographer 的机制更侧重于为定位服务。
VINS-Fusion:完全不适合这个场景。它是一个视觉-惯性里程计 (Odometry) 系统,而非一个完整的建图与定位 (SLAM) 系统。它的目标是提供极致精确的自身运动轨迹,但它生成的地图(稀疏点云)无法直接用于导航和路径规划。

总结

您的需求是一个典型的"全局定位下的机器人自主导航"问题。最佳方案是:

复制代码
使用 Cartographer 作为机器人的核心 SLAM 系统,因为它提供了无与伦比的定位精度和处理动态环境的鲁棒性。
部署 AprilTag/ArUco 标记作为物理"锚点",这是连接不同坐标系最可靠的方式。
开发一个全局配准节点,利用共享的 AprilTag 来计算并发布从全局(天花板)坐标系到机器人地图坐标系的变换。
在全局坐标系下进行任务规划,将目标点转换到机器人坐标系后,交由标准的导航框架(如 Nav2)执行。

这个架构将各个组件的优势发挥到了极致,是目前工业界和学

相关推荐
点云SLAM14 天前
PyTorch 中torch.clamp函数使用详解和实战示例
人工智能·pytorch·python·自动驾驶·slam·3d深度学习·张量操作
davidson147124 天前
gazebo仿真中对无人机集成的相机进行标定(VINS-Fusion)
ubuntu·无人机·slam·d435i·px4·gazebo·vins-fusion
听风吹雨yu24 天前
JY901-ROS2驱动代码
slam·ros2·humble·rviz·imu·foxy
火星机器人life1 个月前
ubuntu20使用自主探索算法explore_lite实现机器人自主探索导航建图
slam
Perishell1 个月前
无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程
无人机·slam·建图感知
xMathematics1 个月前
ORB-SLAM2学习笔记:ORBextractor::operator()函数的逐行解析
人工智能·计算机视觉·机器人·无人机·slam
大鹅同志1 个月前
ROS合集(七)SVIn2声呐模块分析
slam·sonar·rov·水下slam
清 澜1 个月前
《三维点如何映射到图像像素?——相机投影模型详解》
计算机视觉·机器人·自动驾驶·slam·三维重建·三维视觉·投影变换
点云SLAM2 个月前
PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)
计算机视觉·slam·点云配准·点云数据处理·pcl点云库·点云分割·点云识别