2022-07-04

urtlebot2在ROS kinetic中使用cartographer进行仿真建图

1.硬件

本文所使用的是虚拟机环境下,ubuntu16.04,后续会在TX2为主办的TB2中进行实际地图构建

2.安装cartographer、cartographer_ros、cartographer_turtlebot和ceres

安装cartographer以及cartographer_ros主要是参考了这个博主的方法:https://www.icode9.com/content-3-1269792.html


cartographer_turtlebot的安装主要参考创客智造的方法:https://www.ncnynl.com/archives/201702/1369.html

这里要注意的是版本的匹配问题!!!

3.编译后需要测试,可以使用官方数据集进行测试:


roslaunch  cartographer_turtlebot  demo_lidar_2d.launch bag_filename:=${HOME}/XX/cartographer_turtlebot_demo.bag


测试结果如下:

4.turtlebot2使用cartographer完成对仿真环境的构建

完成以上配置后,我们使用turtlebot2构建仿真环境的2D地图。这里需要对一些参数进行修改:

(1)修改 cartographer_ros/cartographer_ros/configuration_files文件夹中的 revo_lds_.lua文件

修改后的代码如下:


-- Copyright 2016 The Cartographer Authors

-- Licensed under the Apache License, Version 2.0 (the "License");

-- you may not use this file except in compliance with the License.

-- You may obtain a copy of the License at

--      http://www.apache.org/licenses/LICENSE-2.0

-- Unless required by applicable law or agreed to in writing, software

-- distributed under the License is distributed on an "AS IS" BASIS,

-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-- See the License for the specific language governing permissions and

-- limitations under the License.

include "map_builder.lua"

include "trajectory_builder.lua"

options = {

  map_builder = MAP_BUILDER,

  trajectory_builder = TRAJECTORY_BUILDER,

  map_frame = "map",

  tracking_frame = "base_link",  #该处将horizontal_laser_link修改为base_link

  published_frame = "base_link",  #该处将horizontal_laser_link修改为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


主要修改这两处内容:  tracking_frame = "base_link",  #该处将horizontal_laser_link修改为base_link

                                      published_frame = "base_link",  #该处将horizontal_laser_link修改为base_link

有的博客将此处修改为laser,经测试无法完成TF树!此处应为base_link

(2) 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>


记得将rosbag节点删除,因为我们是要对仿真环境进行地图构建,此时话题的输入来自于仿真环境下机器人的输出,所以不用rosbag节点。

(3)启动仿真环境


roslaunch turtlebot_gazebo turtlebot_world.launch


(4)启动键盘控制节点


roslaunch turtlebot_teleop keyboard_teleop.launch


(5)启动cartographer建图


roslaunch cartographer_ros demo_revo_lds.launch


建图结果:



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容