2D激光雷达运行cartographer建图
时间: 2025-06-12 20:50:09 浏览: 30
### 使用2D激光雷达与Cartographer进行SLAM建图配置
#### 启动环境准备
为了确保能够顺利运行基于2D激光雷达的Cartographer SLAM程序,在Ubuntu 20.04以及ROS Noetic环境中安装必要的依赖项。这包括但不限于设置好ROS工作空间,安装Cartographer及其对应的ROS包。
```bash
sudo apt-get update && sudo apt-get install ros-noetic-cartographer-ros \
ros-noetic-cartographer-ros-msgs
```
#### 配置文件调整
针对RPLidar X3或其他类型的2D激光雷达设备,需创建或修改相应的launch文件来适配具体的硬件接口参数。通常情况下,这些配置会被放置于`/path_to_ws/src/cartographer_ros/configuration_files/rplidar.lua`这样的路径下[^1]。
对于仅利用激光雷达而不借助IMU或里程计的情况,重点在于简化输入源并优化算法处理流程:
```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 = "odom",
odom_frame = "", -- 不使用里程计,则留空此项
provide_odom_frame = false, -- 关闭提供里程计帧选项
use_pose_extrapolator = false,
num_laser_scans = 1,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
num_point_clouds = 0,
}
MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.min_range = 0.12
TRAJECTORY_BUILDER_2D.max_range = 10.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 5.
TRAJECTORY_BUILDER_2D.use_imu_data = false -- 明确关闭IMU数据读取
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1
POSE_GRAPH.optimization_problem.huber_scale = 5e2
POSE_GRAPH.optimize_every_n_nodes = 90
POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.global_sampling_ratio = 0.003
POSE_GRAPH.max_num_final_iterations = 200
```
上述Lua脚本定义了一系列关键参数,特别是去除了对IMU的支持,并且强调了只接收来自单一2D激光扫描仪的数据流作为主要感知手段。
#### Launch 文件编写
接下来就是设计一个适合此场景使用的Launch文件,它负责启动所有必需的服务节点并将它们连接起来形成完整的系统架构。下面是一个简单的例子,假设已经正确设置了之前提到过的配置文件路径:
```xml
<launch>
<!-- 启动 RPLIDAR 节点 -->
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="frame_id" value="laser"/>
<param name="angle_compensate" value="true"/>
<param name="scan_mode" value="Sensitivity"/>
</node>
<!-- 启动 cartographer_node 并加载自定义配置 -->
<node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args="
-configuration_directory $(find my_robot_carto)/config/
-configuration_basename rplidar.lua"/>
<!-- 发布 TF 变换关系 (从 base_link 到 laser) -->
<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster"
args="0 0 0 0 0 0 /base_link /laser 100"/>
</launch>
```
这段XML代码片段展示了如何组合不同组件以实现预期功能——即通过指定的配置文件初始化Cartographer实例,并同时激活RPLidar驱动程序以便获取实时测距信息;另外还包含了静态变换发布器用于建立固定的空间关联。
---
阅读全文
相关推荐


















