当前位置: 首页 > news >正文

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_Nmap -> 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)执行。

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

http://www.dtcms.com/a/267968.html

相关文章:

  • 利用selenium获取网页数据,脚本加载慢问题的解决办法
  • CentOS环境搭建-快速升级G++版本
  • 【CSS样式】有趣的滑块开关
  • 深入理解 classnames:React 动态类名管理的最佳实践
  • 20250706-6-Docker 快速入门(上)-镜像是什么?_笔记
  • TNNLS期刊接受后,最终版提交说明
  • QT - QCustomPlot
  • Next.js面试常问内容详解
  • 【网络安全基础】第八章---电子邮件安全
  • 5种高效解决Maven依赖冲突的方法
  • 基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战
  • 手机电工仿真软件更新了
  • Typecho主题开发指南:现代框架布局与SEO优化实践
  • 基于SSM和JSP开发的旅游系统
  • [论文阅读] 人工智能 + 软件工程 | 自然语言驱动结构代码搜索:突破DSL学习壁垒的创新方法
  • HRDNet: High-resolution Detection Network for Small Objects论文阅读
  • 7.6 hash | rust
  • 408第三季part2 - 计算机网络 - 传输层II
  • 前端开发问题:TypeError: records is not iterable
  • Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)
  • Spring Cloud Alibaba/Spring Boot整合华为云存储实例(REST API方式)
  • 记一次JVM问题排查
  • 字节二面:进程,线程,协程区别
  • K8s系列之:Kubernetes 的 OLM
  • 一些共识协议与算法
  • docker 无法拉取镜像解决方法
  • 【机器学习深度学习】混淆矩阵解读
  • 算法分析与设计实验1:实现两路合并排序和折半插入排序
  • PLC 智能设备 (I-Device):从原理到实战的 Profinet 通信进阶
  • SwiftUI 7(iOS 26 / iPadOS 26)中玻璃化标签页的全新玩法