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

ROS2 Humble 环境下 slam_toolbox 与 RPLidar 建图实战

基于 Ubuntu 22.04 和 ROS2 Humble 环境,演示了如何使用 slam_toolbox 配合 RPLidar A1 雷达完成机器人建图流程。涵盖软件包安装、udev 规则配置、功能包创建、Launch 文件编写及编译运行。通过 RViz2 实时观察激光扫描与地图构建效果,最终保存栅格地图。适合初学者快速上手 ROS2 SLAM 基础操作。

魔法巫师发布于 2026/4/8更新于 2026/7/2937 浏览

系统环境基于 Ubuntu 22.04,ROS2 版本选用 Humble,雷达设备为 RPLidar A1。下面直接开始配置流程。

安装必要的软件包

先更新系统并安装核心依赖。这里需要 slam_toolbox、RPLidar 驱动以及导航相关的基础包。

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
sudo udevadm control --reload-rules
sudo udevadm trigger

重新插拔雷达 USB 线后,检查设备节点是否生成:

ls -l /dev | grep ttyUSB
# 预期看到类似:lrwxrwxrwx 1 root root 7 Nov 6 10:20 rplidar -> ttyUSB0

启动雷达测试

单独启动雷达节点,确认激光数据正常输出。

ros2 launch rplidar_ros rplidar_a1_launch.py

新开一个终端查看 /scan 话题是否有数据:

ros2 topic echo /scan --no-arr | head -5

这一步偶尔报错很正常,主要是验证前几行数据格式即可。

创建 SLAM 功能包与启动文件

接下来创建工作空间并编写自定义的 Launch 文件,将雷达和 SLAM 节点整合在一起。

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:

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 发布 - 定义 base_link 到 odom 的初始位置
    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 目录被安装:

cmake_minimum_required(VERSION 3.8)
project(my_slam)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(slam_toolbox REQUIRED)
find_package(nav2_msgs REQUIRED)

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

if(BUILD_TESTING)
    find_package(ament_lint_auto REQUIRED)
    set(ament_cmake_copyright_FOUND TRUE)
    set(ament_cmake_cpplint_FOUND TRUE)
    ament_lint_auto_find_test_dependencies()
endif()

ament_package()

构建工作空间

编译之前记得清理一下旧缓存(可选),然后执行构建命令:

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

启动完整的 SLAM 系统

准备两个终端窗口:

终端 1: 启动 SLAM 和雷达

ros2 launch my_slam slam_with_rplidar.launch.py

终端 2: 打开 RViz2 可视化

ros2 run rviz2 rviz2

配置 RViz2 显示建图过程

在 RViz2 界面中进行以下设置,以便观察建图效果:

  1. Fixed Frame:在 Global Options 中将 Fixed Frame 设置为 map。
  2. 添加显示项:点击 Add 按钮依次添加:
    • LaserScan:Topic 设为 /scan,Size 设为 0.1,颜色选红色或绿色。
    • Map:Topic 设为 /map,Color Scheme 选 costmap,勾选 Draw Behind。
    • TF:用于显示坐标框架关系。
  3. 保存配置:File -> Save Config As -> ~/slam_ws/slam_config.rviz。

开始建图与保存地图

启动后,缓慢移动机器人覆盖整个环境区域,观察 RViz 中地图的实时构建情况。建图完成后,使用以下命令保存地图文件:

ros2 run nav2_map_server map_saver_cli -f ~/my_first_map

至此,基础的 ROS2 SLAM 建图流程就完成了。后续可以根据实际需求调整分辨率或最大扫描范围参数。

目录

  1. 安装必要的软件包
  2. 配置 RPLidar A1
  3. 预期看到类似:lrwxrwxrwx 1 root root 7 Nov 6 10:20 rplidar -> ttyUSB0
  4. 启动雷达测试
  5. 创建 SLAM 功能包与启动文件
  6. 构建工作空间
  7. 启动完整的 SLAM 系统
  8. 配置 RViz2 显示建图过程
  9. 开始建图与保存地图
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • ROS2 使用 slam_toolbox 进行激光雷达建图
  • Web Unlocker API 助力 AI 训练数据集获取方案
  • 基于 Webhook 的飞书机器人搭建与消息推送实战
  • ROS 2 自主导航机器人系统架构与 SLAM
  • ROS 2 机器人运行与 ros2 run 命令详解
  • Java 面试核心知识点汇总:基础、并发、框架等
  • Python 异步编程与协程实战指南
  • Docker 安装需 WSL 但下载慢的离线安装方案
  • FPGA 开发实战:Vivado IP 核调用与配置指南
  • 2026 AI 编程助手排行榜:文心快码、Copilot 与 Cursor 深度评测
  • 基于三维 Rényi 熵模型的多特征融合与量子混合算法用于阿尔茨海默病脑图像分割
  • Ribbon 在 Zuul 1.x 网关中的负载均衡应用
  • RexUniNLU 前端联动:Vue 组件封装 + Schema 可视化编辑器
  • VSCode 原生 Copilot 接入 DeepSeek 模型配置实战
  • 从冯诺依曼体系到操作系统:解析 Linux 底层核心逻辑
  • 使用 OLLAMA 国内镜像源加速本地大模型部署
  • FPGA 工程师岗位方向详解:职责、能力与选择建议
  • Cogito-v1-preview-llama-3B 混合推理模式延迟与质量权衡
  • 2026 AI 大模型排行榜:Google 综合领先,Anthropic 编程突出,OpenAI 文生图夺冠
  • 客户端负载均衡器详解:Spring Cloud LoadBalancer 与 Ribbon 对比

相关免费在线工具

  • 加密/解密文本

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

  • RSA密钥对生成器

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

  • Mermaid 预览与可视化编辑

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

  • 随机西班牙地址生成器

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

  • Gemini 图片去水印

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

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online