ROS2 Jazzy下使用RPLiDAR A1实现SLAM的问题求助
ROS2 Jazzy下RPLiDAR A1实现SLAM的排障与实操步骤
核心问题修正:TF变换错误
你当前发布的是world到laser的静态变换,这不符合SLAM节点的TF树要求——SLAM节点会负责维护world/map到base_link的变换,你只需要提供base_link到雷达的静态变换。
停止之前的静态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一致)。验证TF树:
ros2 run tf2_tools view_frames.py生成的
frames.pdf中应包含base_link -> laser_link的连接,后续启动SLAM节点后会新增world/map -> base_link的变换。
方案一:slam_toolbox 同步建图实操
安装slam_toolbox:
sudo apt install ros-jazzy-slam-toolbox启动同步建图模式(适合无里程计的静态雷达场景):
ros2 launch slam_toolbox online_sync_launch.py use_sim_time:=false必须设置
use_sim_time:=false,否则节点会等待仿真时间,无法响应真实硬件数据。启动雷达:
ros2 launch rplidar_ros view_rplidar_a1_launch.py serial_port:=/dev/ttyUSB0验证与建图:
- 用
ros2 topic echo /scan确认激光点云正常输出,frame_id为laser_link - 启动
rviz2,添加Map组件,话题选择/map,Fixed Frame设为map - 缓慢移动笔记本,观察rviz中是否逐步生成地图
- 用
方案二:Cartographer 建图实操
安装Cartographer:
sudo apt install ros-jazzy-cartographer ros-jazzy-cartographer-ros创建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启动Cartographer节点:
ros2 launch cartographer_ros cartographer_node.launch.py use_sim_time:=false configuration_directory:=$HOME/cartographer_config configuration_basename:=rplidar_a1.lua启动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
相关产品推荐
相关产品推荐

