运行cartographer进行建图

本文介绍如何使用RPLIDAR与Cartographer构建机器人二维地图。首先通过配置launch文件和lua参数文件启动Cartographer,然后运行RPLIDAR节点与Cartographer节点,最后保存并转换地图文件为图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行cartographer进行建图

运行条件:已通过其他节点发布机器人的base_link,且有激光发布节点,否则cartographer无法运行。

1.使用rplidar运行cartographer

修改cartographer_ros/cartographer_ros/launch/demo_revo_lds.launch(也可以自己创建一个)

<launch>
  <param name="/use_sim_time" value="true" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename revo_lds.lua"
      output="screen">
    <remap from="scan" to="scan" />
  </node>

  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
</launch>

修改cartographer_ros/cartographer_ros–configuration_files–revo_lds.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 = true,
  publish_frame_projected_to_2d = false,
  use_pose_extrapolator = true,
  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.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
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 = 1e-1

POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65

return options

最后命令行中运行rplidar的Node和launch文件

roslaunch rplidar_ros rplidar.launch

新终端输入

roslaunch cartographer_ros demo_revo_lds.launch

2.生成离线地图

rosservice call /write_state /home/ybg/Desktop/carto_map.pbstream

将生成的pbstream文件转为图片,利用cartographer_pbstream_to_ros_map节点:

先运行roscore,再运行

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/ybg/Desktop/ros_map -pbstream_filename=/home/ybg/Desktop/carto_map.pbstream -resolution=0.05

即可完成建图。

### Cartographer 3D 教程与配置 #### 配置文件设置 对于三维Cartographer 提供了一系列预定义的参数来优化地过程。这些参数位于 `configuration` 文件夹内,可以通过修改 `.lua` 脚本来调整传感器输入和其他选项[^1]。 ```lua -- Example of a Lua script snippet for configuring 3D SLAM parameters. 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", use_odometry = true, provide_odom_frame = false, publish_frame_projected_to_2d = false, use_laser_scan = false, use_multi_echo_laser_scan = false, num_point_clouds = 1, lookup_transform_timeout_sec = 0.2, submaps = { num_range_data = 90, }, } ``` 此脚本片段展示了如何启用或禁用特定类型的传感器数据处理以及设定子的数量等重要参数。 #### 安装指南 为了能够运行 Cartographer 的 3D 功能模块,议按照官方文档中的说明进行源码编译安装。这通常涉及克隆 GitHub 上的相关项目并执行 CMake 构命令[^2]: ```bash git clone https://github.com/googlecartographer/cartographer.git cd cartographer mkdir build && cd build cmake .. make -j$(nproc) sudo make install ``` 完成上述步骤后还需要单独获取 ROS 接口库 (即 `cartographer_ros`) 和依赖项如 `ceres-solver` 来支持完整的功能集[^3]. #### 运行实例 启动节点前需确保已加载正确的 launch 文件,该文件指定了要使用的配置路径及其他必要的初始化参数: ```xml <launch> <!-- Load the robot description --> <param name="robot_description" command="$(find xacro)/xacro '$(find my_robot_model)/urdf/my_robot.urdf.xacro'" /> <!-- Start cartographer node with specified config file --> <node pkg="cartographer_ros" type="cartographer_node" name="cartographer_node"> <remap from="/scan" to="/my_scanner/points"/> <rosparam command="load" file="$(find my_package)/config/carto_3d.lua" /> </node> </launch> ``` 这段 XML 片段展示了一个典型的 launch 文件结构,其中包含了机器人模型描述和指向自定义配置文件 (`carto_3d.lua`) 的指令.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值