跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

ROS2 Humble 下基于 slam_toolbox 与 RPLidar 建图实战

Ubuntu 22.04 配合 ROS2 Humble 版本,通过配置 RPLidar A1 驱动及 slam_toolbox 节点实现机器人自主建图。涵盖环境安装、udev 权限设置、自定义 launch 文件编写、工作空间构建及 RViz 可视化调试全流程。重点解析激光雷达参数映射与地图分辨率设定,提供从硬件连接到地图保存的完整操作指南。

Ne0发布于 2026/4/7更新于 2026/5/2311 浏览

ROS2 Humble 下基于 slam_toolbox 与 RPLidar 建图实战

本文基于 Ubuntu 22.04 系统,使用 ROS2 Humble 版本配合 RPLidar A1 雷达,演示如何利用 slam_toolbox 完成机器人自主建图。整个过程涵盖环境搭建、硬件驱动配置、自定义启动文件编写以及 RViz 可视化调试。

环境准备与依赖安装

首先确保系统更新,然后安装必要的 ROS2 功能包。这里需要用到 slam_toolbox 进行建图,以及 rplidar_ros 驱动雷达,同时为了后续导航扩展,建议一并安装 navigation2 相关包。

sudo apt update
sudo apt install ros-humble-slam-toolbox
sudo apt install ros-humble-rplidar-ros
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup

硬件连接与权限配置

RPLidar A1 通过 USB 连接后,系统默认可能无法直接访问设备节点,需要配置 udev 规则赋予权限。这步很关键,否则后续节点会报错无权限。

创建规则文件:

echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout", SYMLINK+="rplidar"' | sudo tee /etc/udev/rules.d/rplidar.rules

重载规则并重新插拔 USB 线:

sudo udevadm control --reload-rules
sudo udevadm trigger
ls -l /dev | grep ttyUSB

确认输出中包含类似 lrwxrwxrwx ... rplidar -> ttyUSB0 的链接,说明识别成功。

启动雷达与验证数据

在终端中启动雷达节点,并在另一个终端查看激光扫描话题是否正常发布。

# 终端 1
ros2 launch rplidar_ros rplidar_a1_launch.py

# 终端 2
ros2 topic echo /scan --no-arr | head -5

如果能看到点云数据(即使有少量报错也属正常),说明驱动工作正常。

构建自定义 SLAM 启动文件

虽然可以直接调用现成 launch 文件,但为了灵活控制参数(如 TF 变换、帧 ID 等),建议在工作空间中创建自定义启动文件。

创建工作空间结构:

mkdir -p ~/slam_ws/src
cd ~/slam_ws/src
ros2 pkg create my_slam --build-type ament_cmake --dependencies rclcpp slam_toolbox nav2_msgs
mkdir -p ~/slam_ws/src/my_slam/launch

编辑 slam_with_rplidar.launch.py,核心在于定义雷达节点、SLAM 节点以及静态 TF 变换。注意 frame_id 和 base_frame 必须与你的机器人模型一致。

import launch
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration

def generate_launch_description():
    use_sim_time = LaunchConfiguration('use_sim_time', default='false')

    # RPLidar A1 节点
    rplidar_node = Node(
        package='rplidar_ros',
        executable='rplidar_node',
        name='rplidar_node',
        parameters=[{
            'serial_port': '/dev/rplidar',
            'serial_baudrate': 115200,
            'frame_id': 'laser',
            'inverted': False,
            'angle_compensate': True,
            'scan_mode': 'Standard'
        }],
        output='screen'
    )

    # slam_toolbox 节点
    slam_toolbox_node = Node(
        package='slam_toolbox',
        executable='async_slam_toolbox_node',
        name='slam_toolbox',
        output='screen',
        parameters=[{
            'use_sim_time': use_sim_time,
            'map_frame': 'map',
            'odom_frame': 'odom',
            'base_frame': 'base_link',
            'scan_topic': '/scan',
            'mode': 'mapping',
            'resolution': 0.05,
            'max_laser_range': 12.0
        }]
    )

    # 静态 TF 发布:雷达相对于底盘的位置
    static_tf_laser = Node(
        package='tf2_ros',
        executable='static_transform_publisher',
        name='static_transform_publisher_laser',
        arguments=['0', '0', '0.1', '0', '0', '0', 'base_link', 'laser']
    )

    # 静态 TF 发布:初始位姿
    static_tf_odom = Node(
        package='tf2_ros',
        executable='static_transform_publisher',
        name='static_transform_publisher_odom',
        arguments=['0', '0', '0', '0', '0', '0', 'odom', 'base_link']
    )

    return launch.LaunchDescription([
        DeclareLaunchArgument('use_sim_time', default_value='false'),
        rplidar_node,
        static_tf_laser,
        static_tf_odom,
        slam_toolbox_node,
    ])

修改 CMakeLists.txt 确保 launch 目录被正确安装:

install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})

编译工作空间:

cd ~/slam_ws
colcon build
source install/setup.bash

可视化与地图保存

启动系统后,打开 RViz2 观察建图效果。Fixed Frame 需设置为 map,添加 LaserScan 显示 /scan 数据,Map 显示 /map 话题,并开启 TF 坐标轴显示。

# 终端 1
ros2 launch my_slam slam_with_rplidar.launch.py

# 终端 2
ros2 run rviz2 rviz2

在 RViz 中手动移动雷达覆盖整个区域,待地图完整后,使用以下命令保存地图:

ros2 run nav2_map_server map_saver_cli -f ~/my_first_map

生成的 .pgm 和 .yaml 文件即为最终地图资源。

目录

  1. ROS2 Humble 下基于 slam_toolbox 与 RPLidar 建图实战
  2. 环境准备与依赖安装
  3. 硬件连接与权限配置
  4. 启动雷达与验证数据
  5. 终端 1
  6. 终端 2
  7. 构建自定义 SLAM 启动文件
  8. 可视化与地图保存
  9. 终端 1
  10. 终端 2
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Ollama Windows 安装与使用指南:本地运行 Llama、DeepSeek 等大模型
  • Python PyQt 上位机开发:温控系统实时监控实例
  • JavaScript 实现 HTTPS SSE 连接
  • 使用 Rust 与 GLM-5 构建高性能 AI 翻译 CLI 工具
  • 网络安全零基础入门指南:学习误区、路线与自学利弊分析
  • Apache Shiro JSP 标签库详解
  • AR 眼镜光学镜头设计实例与核心技巧解析
  • Python 模块详解:创建、导入与管理实战
  • Linux 新手入门:软件安装、Vim 操作与 GCC 编译基础工具链
  • Java 生成 1 到 1000 范围内的 900 个不重复随机数
  • 基于 Spring Boot 的会议室管理系统设计与实现
  • 25 个降低 AI 检测率的提示词技巧与方法
  • Qwen-Image 结合 ComfyUI 的 AI 绘画入门指南
  • FMC 与 FMC+ 接口标准详解
  • GitHub Copilot 提示词工程实战:从入门到精通
  • 大模型高效部署方法对比:以 LLaMA2 为例
  • 基于 Hugging Face 与 TRL 微调大语言模型实战
  • OpenClaw 单实例配置多 Agent、多 QQ 及飞书机器人
  • Yolo11 基于 DroneVehicle 数据集的无人机视角下车辆目标检测
  • 锐龙 AI 7 H 350 与锐龙 7 H255 对比评测

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online