赞
踩
官方教程Compiling Cartographer ROS — Cartographer ROS documentation
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
~/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>
~/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
~/cartographer_ros/configuration_files
cd ~/shell/easy ./2-test_rplidar.sh
catkin_make_isolated --install --use-ninja source install_isolated/setup.bash roslaunch cartographer_ros ${.launch}
必须先启动激光雷达再启动cartographer否则会报错
激光雷达必须始终处于启动状态
# 先停止建图: 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
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
要先正确停止再保存
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。