• 控制实体小车cartographer建图


    cartographer建图

    跑通官方例程

    下载官方bag

    https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
    
    • 1

    运行bag

    roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/workspace/carto_ws/src/cartographer_paper_deutsches_museum.bag
    
    • 1

    添加map话题/map

    image-20231120172440456

    保存地图

    如果运行ERROR

    ERROR: Unable to load type [cartographer_ros_msgs/FinishTrajectory]. Have you typed 'make' in [cartographer_ros_msgs]?

    进入工作空间

    source ./install_isolated/setup.bash 
    
    • 1

    停止地图构建

    rosservice call /finish_trajectory 0
    
    • 1

    生成地图文件(后缀为.pbstream)

    rosservice call /write_state "{filename: '${HOME}/Downloads/carto_map.pbstream'}"
    
    • 1

    将地图文件转换为map和yaml文件

    rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/Downloads/carto_map -pbstream_filename=${HOME}/Downloads/carto_map.pbstream -resolution=0.05
    
    • 1

    map文件

    image-20231120173549879

    yaml文件

    image: /home/autobot/Downloads/carto_map.pgm
    resolution: 0.05
    origin: [-109.515, -75.0479, 0.0]
    negate: 0
    occupied_thresh: 0.65
    free_thresh: 0.196
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实体小车建图

    修改文件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 = "laser",
      published_frame = "laser",
      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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    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="rviz" pkg="rviz" type="rviz" required="true"
          args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />" 
    launch>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    启动雷达

     roslaunch delta_lidar delta_lidar.launch
    
    • 1

    运行与建图

    roslaunch cartographer_ros demo_revo_lds.launch 
    
    • 1

    键盘控制运动

     python3 keyboard_control.py 
    
    • 1

    保存地图

    参考上面

    image-20231120181556943

    image-20231120181919987
    参考文章手持雷达建立2D地图

  • 相关阅读:
    dubbo快速入门
    RapidSSL证书便宜吗?如何申请?
    9月1日,开学快乐!新的学期,新的开始!
    JavaWeb后端学习
    ES / Kibana 快速安装配置记录
    利用PaddleDetection 训练自定义COCO数据集进行目标检测
    编译原理期末复习
    python之计算市场技术指标
    12、Python -- if 分支 的讲解和使用
    JVM性能——垃圾回收器的优化策略
  • 原文地址:https://blog.csdn.net/weixin_51002159/article/details/134516384