我是靠谱客的博主 火星上小熊猫,最近开发中收集的这篇文章主要介绍自学ROS完成智能小车路径规划(二)--完成建图,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

创建建图功能包

cd xunfei_path_planning/src		   //打开该路径终端

catkin_create_pkg gazebo_map      //功能包创建完毕

cd ..

catkin_make                                      //编译功能包

在这里插入图片描述

在gazebo_map文件夹下创建cfg,launch,map,rviz,srcipts五个文件

cd ~/xunfei_path_planning/src/gazebo_map/
mkdir cfg launch map rviz scripts

cfg文件夹--------存储传感器与算法配置文件
launch文件夹—存储节点启动文件
map---------------存储建图完成后的图片和配置文件(yaml)
rviz----------------存储rviz可视化模型
scripts----------- 存储小车运动导航工具文件

利用cartographer建图

安装cartographer

sudo apt-get install ros-melodic-cartographer-ros

在gazebo_map/launch中创建cartographer_demo.launch文件

<launch>
  <param name="/use_sim_time" value="true" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find gazebo_map)/cfg
          -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 gazebo_map)/cfg/demo.rviz" />

</launch>

在gazebo_map/cfg中创建lidar_info.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",                            --一般为“map”.用来发布submap的ROS帧ID.
  tracking_frame = "base_link",                 --SLAM算法要跟踪的ROS 帧ID
	published_frame = "base_link",                --用来发布pose的帧ID
  odom_frame = "odom",                          --只要当有里程计信息的时候才会使用。即provide_odom_frame=true
  provide_odom_frame = true,                    --如果为true,the local, non-loop-closed, continuous pose将会在map_frame里以odom_frame发布
  publish_frame_projected_to_2d = false,        --如果为true,则已经发布的pose将会被完全成2D的pose,没有roll,pitch或者z-offset
  use_odometry = true,                          --如果为true,需要提供里程计信息,并话题/odom会订阅nav_msgs/Odometry类型的消息,在SLAM过程中也会使用这个消息进行建图
  use_nav_sat = false,                          --如果为true,会在话题/fix上订阅sensor_msgs/NavSatFix类型的消息,并且在globalSLAM中会用到
  use_landmarks = false,                        --如果为true,会在话题/landmarks上订阅cartographer_ros_msgs/LandmarkList类型的消息,并且在SLAM过程中会用到
  num_laser_scans = 1,                          --SLAM可以输入的/scan话题数目的最大值
  num_multi_echo_laser_scans = 0,               --SLAM可以输入sensor_msgs/MultiEchoLaserScan话题数目的最大值
  num_subdivisions_per_laser_scan = 1,          --将每个接收到的(multi_echo)激光scan分割成的点云数。 细分scam可以在扫描仪移动时取消scanner获取的scan。 
                                                --有一个相应的trajectory builder option可将细分扫描累积到将用于scan_matching的点云中
  num_point_clouds = 0,                         --SLAM可以输入的sensor_msgs/PointCloud2话题数目的最大值
  lookup_transform_timeout_sec = 0.2,           --使用tf2查找transform的超时时间(秒)
  submap_publish_period_sec = 0.3,              --发布submap的时间间隔(秒)
  pose_publish_period_sec = 5e-3,               --发布pose的时间间隔,值为5e-3的时候为200HZ
  trajectory_publish_period_sec = 30e-3,        --发布trajectory markers(trajectory的节点)的时间间隔,值为30e-3为30ms
  rangefinder_sampling_ratio = 1.,              --测距仪的固定采样ratio
  odometry_sampling_ratio = 0.1,                --里程计的固定采样ratio
  fixed_frame_pose_sampling_ratio = 1.,         --****采样频率
  imu_sampling_ratio = 1.,                      --IMU message的固定采样ratio
  landmarks_sampling_ratio = 1.,                --landmarks message的固定采样ratio
}   

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

启动小车建图

roslaunch gazebo_pkg race.launch

roslaunch gazebo_map cartographer_demo.launch

执行第二条代码时若遇到cartographer包没有安装现象,执行命令

sudo apt-get install ros-melodic-cartographer*

等待安装完毕(若其中还遇到其他功能包缺失现象按照error提示安装即可),重新执行三条指令。
rviz启动后点击左下角add
在topic中选择laserscan, map
在display中选择robotmodel
添加完毕后,点击左上角file—>save config as 文件命名为demo.rviz存储在gazebo_map/rviz目录下

roslaunch gazebo_pkg race.launch

roslaunch gazebo_map cartographer_demo.launch

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

控制小车跑一圈地图,实现建图完成

保存地图

rosrun map_server map_saver -f race

若所建地图不够好,请自行调整阈值参数。–occ为无法通行的阈值,–free为可通行的阈值。

若–occ过高,则可能出现墙体边缘出现灰色未探索地块;若–occ过低,则无墙体部分可能会被凭空建墙。

若–free过高,则可能出现墙体被认为是自由区域;若–free过低,则自由区域可能出现灰色未探索地块。

以上情况皆可能影响定位效果,请选手们核对所建地图中墙体(黑)、自由区域(白)、未探索区域(灰)是否正确,若不正确,请自行调整阈值重新建图。

rosrun map_server map_saver --occ 70 --free 30 -f mapname

若无法执行则是map_server没有安装,执行

sudo apt-get install ros-melodic-map-server
source ~/.bashrc

重启终端,执行保存建图指令完成建图,保存的地图(xxx.pgm与xxx.yaml文件)一般是保存在根目录下,手动移动至gazebo_map/map目录下,完成建图操作。
建图如下
在这里插入图片描述

最后

以上就是火星上小熊猫为你收集整理的自学ROS完成智能小车路径规划(二)--完成建图的全部内容,希望文章能够帮你解决自学ROS完成智能小车路径规划(二)--完成建图所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部