cartographer环境配置+建图+地图保存

cartographer环境配置+建图+地图保存

0.网上教程

参考知乎Cartographer建图实操 - 知乎

官方教程Compiling Cartographer ROS — Cartographer ROS documentation

1.安装cartographer

sudo apt-get update
sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow
mkdir catkin_ws
cd catkin_ws
wstool init src
wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
​
# rosdepc能下载
sudo pip install rosdepc
#如果显示没有pip可以试试pip3。
sudo pip3 install rosdepc
#如果还没有pip3,则
sudo apt-get install python3-pip
sudo pip install rosdepc
​
sudo rosdepc init
src/cartographer/scripts/install_abseil.sh
​
#Cartographer uses the abseil-cpp library that needs to be manually installed using this script:
sudo apt-get remove ros-${ROS_DISTRO}-abseil-cpp
​
catkin_make_isolated --install --use-ninja
sudo apt-get install build-ninja
sudo apt-get install stow
chmod +x ~/carto_ws/src/cartographer/scripts/abseil_install.sh
cd ~/carto_ws/src/cartographer/scripts
./abseil_install.sh
cd ~/carto_ws
catkin_make_isolated --install --use-ninja

# 记得每开一个终端每次编译之后都要source!
​
source install_isolated/setup.bash

2.配置.launch文件+.lua文件+.rviz文件

2.1 .launch文件

~/cartographer_ros/launch

<launch>
 <param name="/use_sim_time" value="true" />
​
 <node name="cartographer_node" pkg="cartographer_ros"
   type="cartographer_node" args="
                                  
<--! directory要自己改成lua文件的文件夹的绝对路径 ->
     -configuration_directory /home/nvidia/carto2_ws/src/cartographer_ros/cartographer_ros/configuration_files
                                  
<--! lua文件名要改成自己的 ->
     -configuration_basename rplidar_revo_lds.lua"
       
   output="screen">
     
<--! to后面要改成自己雷达订阅的话题 
     查阅话题名称方法:rostopic list          ->
  <remap from="scan" to="scan" />
    
 </node>
​
 <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
   type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
     
<--! args部分改成rviz文件的绝对路径   ->
 <node name="rviz" pkg="rviz" type="rviz" required="true"
   args="-d /home/nvidia/carto2_ws/src/cartographer_ros/cartographer_ros/configuration_files/demo_2d.rviz" />
</launch>

2.2 .lua文件

~/cartographer_ros/configuration_files

-- 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",
   # 改成自己雷达的frame类型
 tracking_frame = "base_link",
    
    # 这四个是里程计的相关数据,可以不开  use_odometry控制
 published_frame = "base_link",
 odom_frame = "odom",
 provide_odom_frame = true,
 use_odometry = false,
    
 publish_frame_projected_to_2d = false,
 use_pose_extrapolator = true,
 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

2.3 .rviz

~/cartographer_ros/configuration_files

3.启动!

3.1 启动激光雷达

cd ~/shell/easy
./2-test_rplidar.sh

3.2 启动cartographer

catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
roslaunch cartographer_ros ${.launch}

3.3 注意

  1. 必须先启动激光雷达再启动cartographer否则会报错

  2. 激光雷达必须始终处于启动状态

4.存图

4.1 命令

# 先停止建图:
rosservice call /finish_trajectory 0
​
# 然后保存成pbstream,自己更改保存路径,注意不能写相对路径,测试过不行
rosservice call /write_state "{filename: '${HOME}/Downloads/mymap.pbstream'}"
​
#导出成一般导航使用的yaml+pgm
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/Downloads/mymap -pbstream_filename=${HOME}/Downloads/mymap.pbstream -resolution=0.05

4.2 报错及解决

IsVersionSupported(header_) Unsupported serialization format "2"
​
#未解决(看机器心情)
ERROR: unable to connect to service: remote error reported: client wants service /write_state to have md5sum 701ed54905b621b74c47cfc92a733a5e, but it has 96db93844e1eb87ed5b1526b3e48e3bb. Dropping connection.
​
#跳步了
Failed to open proto stream '/home/nvidia/carto2_ws/cartographer_ros/cartographer_ros/maps/map2.pbstream'.
​
#路径可能错误(可能是因为路径太长)
Check failed: cairo_image_surface_get_format(surface.get()) == kCairoFormat (-1 vs. 0)
​
#运行范围过少或时间过短,达不到存储的最小预期
/write_state is not available
​
#roscore关闭(可能是把雷达关了)
查看方法:rosservice list

4.3 注意事项

  1. 要先正确停止再保存

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值