概述
创建建图功能包
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完成智能小车路径规划(二)--完成建图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复