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

Java 大视界 -- Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用(433)

Java 大视界 -- Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用(433)

Java 大视界 -- Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用(433) * 引言: * 正文: * 一、智能家居能源管理的核心痛点与 Java 大数据的价值 * 1.1 行业核心痛点(基于《2024 中国智能家居行业白皮书》) * 1.2 Java 大数据的核心价值(实战验证适配性) * 二、技术架构设计实战(纵向架构图) * 2.1 核心技术栈选型(生产压测验证版) * 2.2 关键技术亮点(博主实战总结) * 三、核心场景实战(附完整可运行代码) * 3.1 场景一:能耗趋势预测(线性回归 + LSTM 融合模型) * 3.1.1 业务需求 * 3.1.

机器人导论 第六章 动力学(1)——牛顿欧拉法推导与详述

机器人导论 第六章 动力学(1)——牛顿欧拉法推导与详述

机器人动力学分析复习速通 机器人分析分为 牛顿欧拉法、拉格朗日法、高斯法、凯恩方法 matlab提供的逆动力学采用的是牛顿欧拉法:RNE——Recursive Newton-Euler 需要三个参数,第一个是给定最终的角度,第二个是速度,第三个是角加速度,返回各个关节所需要的力矩。 可选参数有重力加速度和负载fext 牛顿欧拉法 我们的目标是给定机器人的关节位置 q、速度 qd 和加速度 qdd,计算出为了产生这个运动状态,每个关节需要施加多大的驱动力矩 。 一上来看到有人问——我们不是用力域雅可比解决了每个关节应该分配多大力矩的问题了吗? 这是我初学的时候也弄混的问题。 “力域雅可比”解决的是一个不同的问题,属于静力学或外力映射范畴,他的目的是将作用在机器人末端执行器上的外力/力矩 映射到对应的关节空间力矩 。 区别就是一个是给定运动状态,计算每个关节为了达到这个运动状态需要多大力; 另一个则是给定末端的力,计算这个力分配在各个关节上是多大。 牛顿欧拉法的精髓在于正推和逆推,我们来看这个过程: * 正向递推(Forward Recursion):从基

Enterprise Architect 16 下载、安装与无限30天操作

Enterprise Architect 16 下载、安装与无限30天操作

文章目录 * Enterprise Architect 16 简介 * (一)支持多种建模语言和标准 * (二)强大的版本控制、协作和文档管理功能 * (三)增强的技术和用户体验 * (四)高级功能和扩展性 * 一,下载软件 * (一)官网 * (二)阿里云盘 * (三)百度网盘 * (四)迅雷 * 二,安装软件 * 三,无限30天设置 * (一)删除`fkey.dat`文件 * (二)删除注册表Kane文件夹 * (三)查看效果 Enterprise Architect 16 简介 Enterprise Architect 16是一款功能强大的企业级建模工具,它为企业和机构在系统设计、业务流程建模、数据建模以及软件开发等方面提供了全面的支持。以下是对Enterprise Architect 16的详细介绍:

AI绘画报错

提示输出验证失败:CheckpointLoaderSimple: - 值不在列表中:ckpt_name: 'v1-5-pruned-emaonly-fp16.safetensors' 不在 ['anything-v5-PrtRE.safetensors'] 中 模型文件夹里面没模型 这是官方链接:v1-5-pruned-emaonly.safetensors https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main 点击同一行的小下载箭头。然后把文件放在:models/checkpoints文件夹里 你还需要标准的VAE文件,也就是:vae-ft-mse-840000-ema-pruned.safetensors https://huggingface.co/stabilityai/sd-vae-ft-mse-original/tree/main 这个文件放在:models/vae文件夹里 现在你已经拥有运行所需的一切了。慢慢来。你最初生成的图片会很糟糕。但是继续尝试,很快你就能得到很棒的结果。