用自己的機器人實現cartographer建圖測試與地圖保存應該這樣做

用自己的機器人實現cartographer建圖測試與地圖保存應該這樣做


親測可行。

1.安裝

#Install wstool and rosdep.

sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build

#Create a new workspace in ‘catkin_google_ws’.

mkdir catkin_google_ws
cd catkin_google_ws
wstool init src

#Merge the cartographer_ros.rosinstall file and fetch code for dependencies.

wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall

wstool update -t src

*在這一步可能會顯示無法下載cere-solver
*解決辦法:手動下載cere-solver 然後放到src中
*下載鏈接:https://ceres-solver.googlesource.com/ceres-solver.git/+/1.13.0點擊頁面中的tgz可以下載,下載後解壓到src中
*注意下載時需要FQ

#Install proto3.

src/cartographer/scripts/install_proto3.sh

#Install deb dependencies.
#The command ‘sudo rosdep init’ will print an error if you have already
#executed it since installing ROS. This error can be ignored.

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

*這裏要修改ROS_DISTRO爲自己的ros版本如kinetic或者indigo

#Build and install.

catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash

×(如果你用的是zsh不是bash上面的那句改爲下面這樣)
source install_isolated/setup.zsh

編譯會有幾分鐘完全可以去喝杯茶

2.測試

這裏部分代碼需要修改具體如下:

在/home/zhaoekexeu/catkin_google_ws/src/cartographer_ros/cartographer_ros/launch下修改 demo_revo_lds.launch

2.1 刪除運行bag的node節點,如下

<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" />
  <!--已經將運行bag的node刪掉-->
</launch>

2.2 修改frame 這個很重要

在/home/zhaoekexeu/catkin_google_ws/src/cartographer_ros/cartographer_ros/configuration_files下修改 revo_lds.lua

主要修改:

map_frame = “map”,
tracking_frame = “horizontal_laser_link”,
published_frame = “horizontal_laser_link”,
odom_frame = “odom”,

這裏需要查詢一下自己的tf_tree

 rosrun rqt_tf_tree rqt_tf_tree

顯示如下圖片(我這裏是運行正確之後的frames ,你可以根據錯誤的信息進行更改上面四行代碼)
在這裏插入圖片描述
修改後的代碼

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  map_frame = "map",
  tracking_frame = "base_footprint",
  published_frame = "base_footprint",
  odom_frame = "odom",
  provide_odom_frame = true,
  publish_frame_projected_to_2d = false,
  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

這樣就修改OK了。

開始準備測試
(這裏是按照我自己做的機器人進行描述的,可供參考)

  1. 首先在主機(這裏就是指自己的筆記本)啓動master
  roscore
  1. 主機端鏈接樹莓派(前提是你已經進行了分佈式配置)
  ssh [email protected]
  1. 機器人上電之後,樹莓派端打開端口權限,然後啓動機器人
  sudo chmod 666 /dev/ttyUSB0 
  sudo chmod 777 /dev/ttyACM0 
  roslaunch mbot_bringup mbot_with_laser.launch
  1. 主機端 開始準備執行cartographer的node
  cd catkin_google_ws
  catkin_make_isolated --install --use-ninja //編譯
  source install_isolated/setup.zsh //刷新環境 在此之前也可以重新編譯一下
  roslaunch cartographer_ros demo_revo_lds.launch //執行demo_revo_lds.launch
  1. 主機端運行鍵盤控制節點
  roslaunch mbot_bringup mbot_with_laser.launch //這樣就可以控制機器人進行建圖了。

3.保存地圖

方式1

1.當使用cartographer在線建圖時,cartographer不知道什麼時候結束,所以要先調用服務來關閉傳感器數據的接收。

rosservice call /finish_trajectory 0

2.將當前地圖信息的快照保存爲後綴名爲.pbstream。

# Ask Cartographer to serialize its current state.
# (press tab to quickly expand the parameter syntax)
rosservice call /write_state "{filename: '<絕對路徑存放地圖信息>/<地圖保存的名字>.pbstream', include_unfinished_submaps: 'true'}"

3.通過cartographer提供的ros包,將後綴名爲.pbstream的地圖信息,轉化成ros地圖信息。

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=<保存地圖的絕對路徑>/<地圖命名> -pbstream_filename=<存放pbstream地圖快照信息的絕對地址>/<filename>.pbstream -resolution=0.05

warning:上面的方法是網上各大博主的方法,我測試沒有通過,會報下面的錯誤,暫時沒有解決,如果您解決了,希望給我分享一下
在這裏插入圖片描述
方式2

這裏需要修改map_server

如果想將GMapping中生成的地圖保存下來,可以

rosrun map_server map_saver -f ~/robot_ws/map/gmapping

main函數中定義了一個MapGenerator類對象,該類初始化之後訂閱map話題。在訂閱的回調函數中,將訂閱得到的map按照一定格式保存到當地的.pgm文件,同時將地圖信息保存到對應的.yaml文件中。

需要注意的是,如果你是想保存Cartographer生成的地圖,是需要對源代碼做一些修改的。因爲Cartographer的map格式跟GMapping中的格式不太一樣。具體不一樣如下:
在這裏插入圖片描述
我按照這個不同對map_server包做了一些修改,詳情看github:https://github.com/HaoQChen/map_server 。如果覺得有用,記得star一下哦。

完成修改之後

可以使用如下格式的代碼進行地圖保存(根據自己的情況進行修改)

rosrun map_server map_saver map:=/<your map topic> -f <map_name>

局部參考:
https://blog.csdn.net/weixin_40712763/article/details/82292087
https://blog.csdn.net/m0_37672916/article/details/77198261
https://blog.csdn.net/u014493244/article/details/84101374
https://blog.csdn.net/SimileciWH/article/details/84846416
https://blog.csdn.net/u013834525/article/details/84622496

希望可以幫到您哦,水平有限,如果有錯誤之處,希望指正,謝謝。
在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章