ROS进阶学习(八)-- 谷歌Cartographer建图导航实战(收尾)

实验平台 :ubuntu 16.04

ros版本: ROS kinetic

所需安装包:ceres solvercartographer,cartographer_ros

实验范围:大约1000平楼层

根据前面的文章安装好依赖项,以及需要的安装包就可以使用cartographer建图了,建图之后通过goole自带的保存命令,就可以保存地图。

简单说下原理:就是用Grid(2D/3D)的形式建地图;局部匹配直接建模成一个非线性优化问题,利用IMU提供一个比较靠谱的初值;后端用Graph来优化,用分支定界算法来加速;2D和3D的问题统一在一个框架下解决。(引用知乎--邵天兰

由于cartographer的局部匹配算法,以及优化算法效果惊人,所以尽管在只使用激光的前提下都能得出不错的效果,以下配置加入了里程计信息,IMU信息也是可以作为一个可选项加入。

这里只需要创建三个文件:

1、在cartographer_ros/launch下新建 backpack_rplidar.launch文件

<launch>
  <param name="robot_description"
    textfile="$(find cartographer_ros)/urdf/backpack_2d.urdf" />

  <node name="robot_state_publisher" pkg="robot_state_publisher"
    type="robot_state_publisher" />

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

backpack_2d.urdf:主要存储了imu,以及水平雷达,竖直型雷达一些配置信息,默认就可以
robot_state_publisher:主要用来处理各种坐标的包,不做更改
<remap from="echoes" to="horizontal_laser_2d" /> 是把 /echoes 的话题重映射到 /horizontal_laser_2d

2、在 cartographer_ros/configuration_files下新建backpack_2d_rplidar.lua

include "map_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  map_frame = "map",
  tracking_frame = "base_link",
  published_frame = "base_link",
  odom_frame = "odom",
  provide_odom_frame = true,
  use_odometry_data = false,
  use_constant_odometry_variance = false,
  constant_odometry_translational_variance = 0.,
  constant_odometry_rotational_variance = 0.,
  use_horizontal_laser = true,
  use_horizontal_multi_echo_laser = false,
  horizontal_laser_min_range = 0.3,
  horizontal_laser_max_range = 8.,
  horizontal_laser_missing_echo_ray_length = 0.,
  num_lasers_3d = 0,
  lookup_transform_timeout_sec = 0.2,
  submap_publish_period_sec = 0.3,
  pose_publish_period_sec = 5e-3,
}

MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
SPARSE_POSE_GRAPH.optimization_problem.huber_scale = 1e2
return options

这里主要包含了机器人上使用到的传感器信息,以及扫描的距离信息等,可以根据自己的机器人进行配置

3、cartographer_ros/launch下新建demo_rplidar_2d.launch

<launch>  
  <param name="/use_sim_time" value="false" /> <!-- 不用模拟时间 -->  
  <node name="cartographer_node" pkg="cartographer_ros"  
      type="cartographer_node" args="  
          -configuration_directory $(find cartographer_ros)/configuration_files  
          -configuration_basename backpack_2d_rplidar.lua"  
      output="screen">  
   <!-- <remap from="scan" to="horizontal_laser_2d" /> -->  
  </node>  
  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"  
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />   
</launch>  

重新编译工作空间,至此goole建图的配置信息基本完成


二、建图:

1、启动小车 
2、启动雷达
3、启动键盘
4、启动Google建图 roslaunch cartographer_ros backpack_rpidar_2d.launch
5、保存地图  rosservice call /finish_trajectory "map" 此处会报错,可能是因为官方自带API进行了更改,但是并不影响保存地图,地图会保存在.ros的
   隐藏文件下。可以在输入rosservice call /finish_trajectory后按TAB键根据提示输入地图名称


这是对大约1000平的楼层进行建图的效果,由于建图速度较快,每个位置只走一次,所以有的地方会出现了一些歪曲。

下面是建图过程以及使用cartographer进行导航的视频  点击打开链接

  • 13
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 46
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值