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

ROS2 slam_toolbox 激光雷达建图配置指南

在 Ubuntu 22.04 环境下使用 ROS2 Humble 版本和 RPLidar A1 雷达进行 SLAM 建图的完整流程。内容包括安装必要的软件包(slam_toolbox、导航包等),配置 UDEV 规则识别雷达,创建自定义功能包及启动文件,构建工作空间,并在 RViz2 中配置显示与保存地图。通过该教程,用户可以快速搭建基于 slam_toolbox 的机器人建图系统。

涅槃凤凰发布于 2026/4/6更新于 2026/10/25129 浏览

系统: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 目录
mkdir -p ~/slam_ws/src/my_slam/launch

# 创建启动文件
nano ~/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,
    ])

添加依赖

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_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)
  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
      • 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. 添加这行:安装 launch 目录
  21. 五、构建工作空间
  22. 六、启动完整的 SLAM 系统
  23. 终端 1:启动 SLAM 和雷达
  24. 终端 2:启动 RViz2
  25. 七、配置 RViz2 显示建图过程
  26. 八、开始建图
  27. 九、保存地图

更多推荐文章

查看全部
  • 利用 DeepSeek 指令与工具降低论文 AIGC 检测率实战指南
  • Vivado 管脚分配实战:电气规则、XDC 约束与避坑指南
  • 基于 SpringBoot 的在线点餐系统设计与实现
  • 哈希表原理与实战应用
  • C 语言快速排序算法详解与优化实现
  • FARS 全自动科研系统:多智能体架构与工业化科研范式
  • Java 开发中常见的误导性错误及排查指南
  • ChatGPT 免费版与微软 Copilot 技术选型对比
  • C++ 计算三维单位球内任意单项式积分的精确值
  • 大疆无人机日志导出与解析实战指南
  • GitHub Copilot 复用 Claude Code 本地技能的自动化方案
  • 基于 Web 技术栈的 Rokid JSAR AR 开发实战指南
  • Python 属性描述符:原理与 ORM 实践详解
  • C++分布式调度系统瓶颈分析与底层优化策略
  • Llama-AVSR 论文精读:基于 LLM 的视听语音识别新框架
  • C++ string 常用函数详解(三)
  • 4G Cat.1模组赋能AI教育机器人:政策驱动下的算力与物联网机遇
  • 零代码体验 AI 绘画:Jimeng AI Studio 使用指南
  • 基于大模型的智能体开发:从入门到实战的思路与技巧
  • Clawdbot 飞书机器人配置与调试指南

相关免费在线工具

  • 加密/解密文本

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