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

ROS2 slam_toolbox 激光雷达建图教程

介绍在 Ubuntu 22.04 和 ROS2 Humble 环境下,使用 RPLidar A1 雷达配合 slam_toolbox 进行机器人建图的完整流程。内容涵盖软件包安装、udev 规则配置、雷达驱动启动、自定义 launch 文件编写、工作空间构建及 RViz2 可视化配置。最终实现地图保存与导航基础环境搭建。

独立开发者发布于 2026/4/5更新于 2026/7/2464 浏览

系统:Ubuntu 22.04

ROS2 版本:Humble

雷达设备:rplidar_a1

一、安装必要的软件包

# 更新系统
sudo apt update

# 安装 slam_toolbox
sudo apt install ros-humble-slam-toolbox

# 安装 RPLidar 驱动
sudo apt install ros-humble-rplidar-ros

# 安装导航相关包
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup

二、配置 RPLidar_A1

创建 udev 规则(让系统识别雷达)

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

# 重新加载 udev 规则
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

三、启动雷达

# 启动 RPLidar A1
ros2 launch rplidar_ros rplidar_a1_launch.py

# 在另一个终端检查激光数据
ros2 topic echo /scan --no-arr | head -5
# 这一步有报错很正常,因为我们只看前 5 行的数据

四、创建 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

# 创建 launch 目录
 -p ~/slam_ws/src/my_slam/launch


nano ~/slam_ws/src/my_slam/launch/slam_with_rplidar.launch.py
mkdir
# 创建启动文件

添加以下代码:

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,
    ])

添加依赖

cd ~/slam_ws/src/my_slam
nano CMakeLists.txt

将内容修改为:

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 dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(slam_toolbox REQUIRED)
find_package(nav2_msgs REQUIRED)

# 添加这行:安装 launch 目录
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # comment the line when a copyright and license is added to all source files
  set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # comment the line when this package is in a git repo and when
  # a copyright and license is added to all source files
  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 Option---->Fixed Frame:设置为 map

  2. 添加显示项(点击 Add 按钮)

    • LaserScan:
      • Topic : /scan
      • Size : 0.1
      • Color : 红色或绿色
    • Map:
      • Topic : /map
      • Color Scheme : costmap
      • Draw Behind : √
    • TF:
      • 显示坐标框架关系
  3. 保存 RViz 配置 file---->Save Config As ----> ~/slam_ws/slam_config.rviz

八、开始建图

  1. 缓慢移动雷达在环境中行走
  2. 观察 RViz 中的建图过程
  3. 确保覆盖所有区域

九、保存地图

建图完成后,保存地图:

ros2 run nav2_map_server map_saver_cli -f ~/my_first_map

目录

  1. 一、安装必要的软件包
  2. 更新系统
  3. 安装 slam_toolbox
  4. 安装 RPLidar 驱动
  5. 安装导航相关包
  6. 二、配置 RPLidar_A1
  7. 创建 udev 规则
  8. 重新加载 udev 规则
  9. 查看雷达是否被识别
  10. 应该看到类似:lrwxrwxrwx 1 root root 7 Nov 6 10:20 rplidar -> ttyUSB0
  11. 三、启动雷达
  12. 启动 RPLidar A1
  13. 在另一个终端检查激光数据
  14. 这一步有报错很正常,因为我们只看前 5 行的数据
  15. 四、创建 SLAM 启动文件
  16. 创建工作空间目录(如果还没有)
  17. 创建功能包(如果需要)
  18. 创建 launch 目录
  19. 创建启动文件
  20. find dependencies
  21. 添加这行:安装 launch 目录
  22. the following line skips the linter which checks for copyrights
  23. comment the line when a copyright and license is added to all source files
  24. the following line skips cpplint (only works in a git repo)
  25. comment the line when this package is in a git repo and when
  26. a copyright and license is added to all source files
  27. 五、构建工作空间
  28. 六、启动完整的 SLAM 系统
  29. 终端 1:启动 SLAM 和雷达
  30. 终端 2:启动 RViz2
  31. 七、配置 RViz2 显示建图过程
  32. 八、开始建图
  33. 九、保存地图
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • AI 时代大模型学习指南:技术原理与 Prompt 技巧总结
  • VSCode 精准禁用 Copilot 代码补全:按语言与场景配置
  • 微调模型成本太高,用RAG技术,低成本实现AI升级
  • JavaScript 中 window.location 对象详解与实战
  • 基于 Python 实现抖音私信自动回复功能
  • Python vs C++ 极简性能对比
  • Qwen2 开源大模型本地部署与 WebUI 对话机器人搭建
  • Ubuntu 22.04 下 libwebkit2gtk-4.1-0 安装避坑指南
  • Rocky Linux 安装教程
  • OpenClaw 环境搭建指南——Windows/macOS/Linux 三平台部署
  • Java 对象比较详解:基本类型与自定义类实现
  • Spring AI 快速上手与实战指南
  • Go 高并发微服务调优:Goroutine、Channel、Context 核心实践
  • Qt 前后端通信(QWebChannel Js / C++ 互操作):原理、示例、步骤解说
  • C++ 内存模型与内存区域详解
  • OpenClaw 智能体框架实战:从零搭建第一个 AI 员工
  • 用 Python 接入 TradingView Screener 做多维选股
  • ChatGPT 降低毕业论文 AIGC 重复率方法指南
  • USB-Blaster 驱动安装与 FPGA 下载排障
  • 通义万相 2.1 模型升级解析与应用调优实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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