ROS2机器人slam_toolbox建图零基础

系统: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

Read more

Qwen3-ASR-0.6B零基础入门:多方言自动识别WebUI快速上手教程

Qwen3-ASR-0.6B零基础入门:多方言自动识别WebUI快速上手教程 你是不是也遇到过这样的场景?开会录音需要整理成文字,但方言口音太重,通用工具识别不准;或者想给一段外语视频加字幕,手动听写效率太低。语音转文字的需求无处不在,但找到一个既准确、又支持方言、还简单好用的工具却不容易。 今天要介绍的Qwen3-ASR-0.6B,就是为解决这些问题而生的。它是一个轻量级但功能强大的语音识别模型,最吸引人的是它支持52种语言和方言,包括22种中文方言。更棒的是,它提供了一个直观的Web界面,让你不用写一行代码,就能轻松完成语音转文字。 这篇文章,我就带你从零开始,手把手学会怎么用这个工具。无论你是技术小白,还是有一定经验的开发者,都能在10分钟内上手。 1. 它能做什么?先看看效果 在讲具体操作之前,我们先看看Qwen3-ASR-0.6B到底能做什么。简单来说,它就是一个“耳朵”特别灵的语音识别工具。 核心能力有三点: 1. 听得懂多种语言和方言:除了英语、日语、韩语等30种主流语言,它还专门支持22种中文方言。这意味着,四川话、广东话、上海话、

前端已死?元编程时代:用AI Skills重构你的开发工作流

摘要:本文深入探讨了新兴的“AI Skills”概念,它远不止是简单的Prompt技巧,而是一种将最佳实践、团队规范和技术栈封装成可执行文件的结构化工程范式。文章将系统阐述AI Skills如何从前端开发的“辅助工具”升级为“核心生产力”,通过UI组件生成、API客户端编码、智能测试等具体场景,展示其对工作流的颠覆性重构。我们将深入其技术原理,提供可操作的实践路径,并展望在这一范式下,前端开发者如何从“代码劳工”转变为“规则制定者”和“智能工作流架构师”。 关键字:AI Skills、前端开发、工作流重构、低错误率、Prompt工程、元编程 引言:超越ChatGPT,迎接“可编程的智能体” 🚀 如果你还停留在用ChatGPT手动复制粘贴代码片段,偶尔还要为它生成的过时或错误代码“擦屁股”的阶段,那么你正在浪费AI 90%的潜力。前端开发的范式革命已然来临,其核心不再是“会不会用AI”,而是“如何系统化、

5分钟部署Qwen3Guard-Gen-WEB,轻松实现多语言内容审核

5分钟部署Qwen3Guard-Gen-WEB,轻松实现多语言内容审核 你是否遇到过这样的问题:刚上线的AI客服被用户用谐音、方言、混语种方式绕过关键词过滤,输出了违规内容?或者海外社交App因某条西班牙语评论未被识别而遭遇平台下架风险?又或者内容审核团队每天要人工复核上千条“疑似安全但解释不清”的中间态文本,效率瓶颈越来越明显? 这些问题背后,暴露的是传统规则引擎和轻量分类模型在语义理解、跨语言泛化、风险分级上的根本局限。而今天要介绍的这个镜像——Qwen3Guard-Gen-WEB,就是阿里开源团队针对这些真实痛点交出的一份工程化答卷。 它不是又一个需要调参、写API、搭服务的“半成品模型”,而是一个开箱即用、带完整网页界面、支持119种语言、自带三级风险判定逻辑的安全审核工具。从下载镜像到完成首次审核,全程不到5分钟,连Docker基础命令都不用记全。 更重要的是,它把“专业级安全能力”做成了“小白可操作”的形态:不用写代码、不配环境、不读文档——输入一段文字,点击发送,结果立刻呈现,连风险等级、判断理由、改写建议都一并生成。 下面我们就一起走一遍真实部署过程,看看这个

基于YOLO26/11/v8算法的Web目标检测系统,人脸表情识别系统,Django+Vue3 的前后端分离,实现摄像头实时识别,YOLO26/YOLO11/v8 + LLM大模型智能分析,科研必备

基于YOLO26/11/v8算法的Web目标检测系统,人脸表情识别系统,Django+Vue3 的前后端分离,实现摄像头实时识别,YOLO26/YOLO11/v8 + LLM大模型智能分析,科研必备

✨ 更新日志 * ✔️ 2026/3/3,2.0 版本,前端导航栏改为侧边栏系统,视频流采用websocket框架延迟更低, YOLO26/YOLO11/YOLOv8 视频流更稳定,在之前的系统增加 LLM 大模型智能分析,是科研必备,支持 YOLO26/11/v8 分类模型、目标检测、分割、obb、关键点检测任务,还支持双模型联合检测与识别,如人脸表情识别、人脸识别等一些识别任务需要检测模型与分类模型共同完成,在人脸表情识别中,单独使用检测模型去识别人脸表情也不是不可以,但有一个问题数据集如果全是头部照片的话,当模型预测的照片是全身照片时,模型识别准确率就没有这么高了, 那么这时候可以用检测模型识别人脸,把人脸信息输入到表情分类模型进行分类即可,反正这是一个通用的系统,更换自己模型即可,大家懂得都懂的,更多功能看下文即可。 摘要 在人工智能迈向通用化(AGI)的今天,“视觉感知 + 语言理解”的多模态联合是未来的趋势。单纯的检测画框已经无法满足复杂的业务需求,如何让系统“看懂”