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

ROS2机器人slam_toolbox建图零基础

> 系统:Ubuntu22.04 > > ROS2版本:Humble > > 雷达设备:rplidar\_a1 一、安装必要的软件包 二、配置RPLidar\_A1 创建udev规则(让系统识别雷达) 重新插拔雷达USB线 测试雷达连接 三、启动雷达 四、创建SLAM启动文件 创建启动文件 添加以下代码: 添加依赖 将内容修改为: 这一步主要添加了launch目录: install(DIRECTO…

编程诗人发布于 2026/4/7更新于 2026/7/741K 浏览

系统:Ubuntu22.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 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()

这一步主要添加了launch目录:

install(DIRECTORY launch

    DESTINATION share/${PROJECT_NAME}        

)

五、构建工作空间

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. 更新系统 sudo apt update
  3. 安装slam_toolbox sudo apt install ros-humble-slam-toolbox
  4. 安装RPLidar驱动 sudo apt install ros-humble-rplidar-ros
  5. 安装导航相关包 sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup
  6. 二、配置RPLidar\_A1
  7. 创建udev规则 echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout", SYMLINK+="rplidar"' | sudo tee /etc/udev/rules.d/rplidar.rules
  8. 重新加载udev规则 sudo udevadm control --reload-rules sudo udevadm trigger
  9. 查看雷达是否被识别 ls -l /dev | grep ttyUSB # 应该看到类似:lrwxrwxrwx 1 root root 7 Nov 6 10:20 rplidar -> ttyUSB0
  10. 三、启动雷达
  11. 启动RPLidar A1 ros2 launch rplidarros rplidara1_launch.py
  12. 在另一个终端检查激光数据 ros2 topic echo /scan --no-arr | head -5 #这一步有报错很正常,因为我们只看前5行的数据
  13. 四、创建SLAM启动文件
  14. 创建工作空间目录(如果还没有) mkdir -p ~/slamws/src cd ~/slamws/src
  15. 创建功能包(如果需要) ros2 pkg create myslam --build-type amentcmake --dependencies rclcpp slamtoolbox nav2msgs
  16. 创建launch目录 mkdir -p ~/slamws/src/myslam/launch
  17. 五、构建工作空间
  18. 六、启动完整的SLAM系统
  19. 终端1:启动SLAM和雷达 ros2 launch myslam slamwith_rplidar.launch.py # 终端2:启动RViz2 ros2 run rviz2 rviz2
  20. 七、配置RViz2显示建图过程
  21. 八、开始建图
  22. 九、保存地图
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 使用 LLaMA-Factory 训练和微调 LLaMA3 模型指南
  • Flutter 三方库 groq_sdk 的鸿蒙化适配指南
  • 零成本部署阿里开源 CoPaw:打造你的 AI 个人助理
  • DocxFactory:基于 C++ 的 Word 文档处理开源库
  • 文心一言 4.5 开源模型本地化部署与测试分析
  • 程序员进入大厂的关键步骤与面试准备指南
  • 国内热门 AI 绘画工具盘点(上)
  • 灵感画廊 AI 绘画工具体验:比 Midjourney 更简单
  • Java 异常处理:捕获规则与自定义异常
  • 双足机器人 2-RSS-1U 并联踝关节运动学分析与实现
  • GitHub 上寻找神经网络学术图表 Draw.io 模板指南
  • 算法实战:模幂、构造、背包、贪心及堆维护六题精析
  • Chatwoot 私有化部署与网页集成实操
  • 开发环境搭建指南:PHP + Node.js + MongoDB + Python 安装配置
  • 从零构建 gRPC 跨语言通信:C++ 服务端与 C# 客户端
  • Liferay 主题开发核心知识点与自定义路径配置
  • Python 测试工程师使用 Faker 库生成测试数据
  • 图寻路算法详解:基于深度优先搜索 (DFS) 的 Java 实现
  • OpenClaw Self-Improving 技能解析:从 SKILL.md 看 AI 自我进化逻辑
  • DeepSeek 各版本说明与优缺点分析

相关免费在线工具

  • curl 转代码

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

  • Base64 字符串编码/解码

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

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online