You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2 Jazzy下使用RPLiDAR A1实现SLAM的问题求助

ROS2 Jazzy下RPLiDAR A1实现SLAM的排障与实操步骤

核心问题修正:TF变换错误

你当前发布的是world到laser的静态变换,这不符合SLAM节点的TF树要求——SLAM节点会负责维护world/map到base_link的变换,你只需要提供base_link到雷达的静态变换。

  1. 停止之前的静态TF发布命令,重新运行:

    ros2 run tf2_ros static_transform_publisher 0 0 0.1 0 0 0 base_link laser_link
    

    参数说明:前三个数是雷达相对于base_link的安装坐标(z轴给0.1是模拟笔记本放置的高度),后三个是姿态角(默认水平安装设为0),base_link是机器人基座坐标系,laser_link是雷达坐标系(与rplidar_ros默认发布的点云frame_id一致)。

  2. 验证TF树:

    ros2 run tf2_tools view_frames.py
    

    生成的frames.pdf中应包含base_link -> laser_link的连接,后续启动SLAM节点后会新增world/map -> base_link的变换。


方案一:slam_toolbox 同步建图实操

  1. 安装slam_toolbox:

    sudo apt install ros-jazzy-slam-toolbox
    
  2. 启动同步建图模式(适合无里程计的静态雷达场景):

    ros2 launch slam_toolbox online_sync_launch.py use_sim_time:=false
    

    必须设置use_sim_time:=false,否则节点会等待仿真时间,无法响应真实硬件数据。

  3. 启动雷达:

    ros2 launch rplidar_ros view_rplidar_a1_launch.py serial_port:=/dev/ttyUSB0
    
  4. 验证与建图:

    • 用ros2 topic echo /scan确认激光点云正常输出,frame_id为laser_link
    • 启动rviz2,添加Map组件,话题选择/map,Fixed Frame设为map
    • 缓慢移动笔记本,观察rviz中是否逐步生成地图

方案二:Cartographer 建图实操

  1. 安装Cartographer:

    sudo apt install ros-jazzy-cartographer ros-jazzy-cartographer-ros
    
  2. 创建RPLiDAR A1专属配置文件:
    在用户目录下新建cartographer_config文件夹,创建rplidar_a1.lua文件,内容如下:

    include "map_builder.lua"
    include "trajectory_builder.lua"
    
    options = {
      map_builder = MAP_BUILDER,
      trajectory_builder = TRAJECTORY_BUILDER,
      map_frame = "map",
      tracking_frame = "base_link",
      published_frame = "base_link",
      odom_frame = "odom",
      provide_odom_frame = false,
      publish_frame_projected_to_2d = false,
      use_odometry = false,
      use_nav_sat = false,
      use_landmarks = false,
      num_laser_scans = 1,
      num_multi_echo_laser_scans = 0,
      num_subdivisions_per_laser_scan = 1,
      num_point_clouds = 0,
      lookup_transform_timeout_sec = 0.2,
      submap_publish_period_sec = 0.3,
      pose_publish_period_sec = 5e-3,
      trajectory_publish_period_sec = 30e-3,
      rangefinder_sampling_ratio = 1.,
      odometry_sampling_ratio = 1.,
      fixed_frame_pose_sampling_ratio = 1.,
      imu_sampling_ratio = 1.,
      landmarks_sampling_ratio = 1.,
    }
    
    MAP_BUILDER.use_trajectory_builder_2d = true
    
    TRAJECTORY_BUILDER_2D.min_range = 0.15
    TRAJECTORY_BUILDER_2D.max_range = 12.0
    TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.0
    TRAJECTORY_BUILDER_2D.use_imu_data = false
    TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
    TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
    TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
    TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e1
    
  3. 启动Cartographer节点:

    ros2 launch cartographer_ros cartographer_node.launch.py use_sim_time:=false configuration_directory:=$HOME/cartographer_config configuration_basename:=rplidar_a1.lua
    
  4. 启动TF变换与雷达:
    先运行之前的静态TF命令,再启动雷达,最后用rviz2查看地图(配置同slam_toolbox)。


常见问题排查

  • TF变换异常:
    • 检查所有frame_id拼写是否一致,雷达点云的frame_id必须和静态TF的child frame一致
    • 用ros2 topic echo /tf查看变换数据,确认base_link到laser_link的变换存在
  • 未接收到地图:
    • 用ros2 node list确认SLAM节点正常运行
    • 用ros2 topic echo /map查看是否有地图数据输出
    • 移动速度不要过快,RPLiDAR A1扫描频率为10Hz,过快移动会导致点云匹配失败

内容的提问来源于stack exchange,提问作者Kostis Sarakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:45:17