一、Hector_slam使用
(1)hector 是一种结合了鲁棒性较好的扫描匹方法2D_SLAM方法和使用惯性传感系统的导航技术。传感器的要求较高,高更新频率小测量噪声的激光扫描仪,不需要里程计。
简单的来说,使用hector来建图需要你的雷达高级一点,(使用A1思LAN)雷达,在手持建图的情况下很容易出现漂移现象
(2)首先连上我们的雷达,这时候需要进行串口配对
sudo dkms remove cp210x/3.0 -k $(uname -r) && sudo dkms install cp210x/3.0 -k $(uname -r) && sudo modprobe cp210x
接着启动雷达的节点
$ roslaunch rplidar_ros rplidar.launch
再来编写slam建图的launch文件
然后运行编写的launch文件就可以了
roslaunch rplidar_ros hector_slam.launch
在launch文件里需要使用的hector_mapping我们存在外面opt文件里
二、cartgrapher建图
cartographer 功能包
cartographer 功能包已经与ROS集成,但是还没有提供二进制安装包,所以需要采用源码编译的方式进行安装。为了不与已有功能包冲突,最好为 cartographer专门创建一个工作空间,这里我们新创建了一个工作空间catkin_google_ws,然后使用如下步骤下载源码并完成编译,安装参考https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html。
安装工具
wstool是用于管理ROS工作空间的工具,它通过.rosinstall文件规定工作空间的配置。
cartographer建图需要我们新建自己的工作空间
(1)新建工作空间
mkdir -p demo01_ws/src
在demo01下进行初始化 catkin_make
如果初始化出错了
pip install catkin_make-pkg==0.4.23
接着要在src的文件下创建功能包
cartographer_ws ,在加上依赖的包 rospy..
------------------------------------------------------------------------------
按照官网的教程进行改进,上面直接跳过
mkdir cartographer_ws
cd cartographer_ws
wstool init src
而在src下我们依然需要添加依赖包
cd src
git clone https://github.com/googlecartographer/cartographer_ros.git
git clone https://github.com/googlecartographer/cartographer.git
git clone https://github.com/ceres-solver/ceres-solver.git
上面的是 cartographer_ros cartographer ceres-solver的包,我们可以直接从opt/ros/noteic上面找到复制下来
ros2go里面已经安装好依赖包,我们可以查看一下 依然在 opt/ros/noteic/下面进行查找(因为直接我们就可以跑到了 官方所给的数据包)
里面包括 abseil-cpp protobuf库,我们可以查看一下,但是可以不用搬运进来
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
安装abseil-cpp库
src/cartographer/scripts/install_abseil.sh
编译与安装
catkin_make_isolated --install --use-ninja
建立完自己的工作空间后就可以进行文件(launch lua)的配置
(2)文件的配置
launch文件夹下的demo_revo_lds.launch
是二维建图的demo launch文件
核心代码如下,我们可以复制一份回工作空间进行使用
这份launch文件只是启动了关键的carto建图节点,看上面这个launch文件默认的文件路径就知道它对应的默认配置文件是 revo_lds.lua
文件,同样,我们可以直接复制一份到我们的工作空间。
根据我们自己机器人的情况更改参数即可,注意要同时把上面launch文件的那两个路径更改成我们存放这个lua的位置(configuration_directory
指定文件夹,configuration_basename
指定文件名)
revo_lds.lua
这个参数配置文件主要要更改的东西可以参照下面的代码块:
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
-- tracking_frame更改为我们机器人的基坐标tf,一般是base_link,
tracking_frame = "horizontal_laser_link",
-- 以下四个参数与里程计有关,在下面进行单独说明
odom_frame = "odom",
published_frame = "horizontal_laser_link",
provide_odom_frame = false,
use_odometry = true,
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.
-- 决定是否使用imu数据
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
carto建图可以不需要里程计即只靠激光雷达建图
配置完后进行source
source ./install/setup.bash
(在前面建立工作空间的时候可以直接和前面一样进行catkin_make)
___________________________________________________
-------未完待续
目前问题: 由于系统的包位于总计算机文件下,进行操作时无法直接移动这些包,需要调用功能,并且尝试时,编译有时成功再次尝试时会失败,并且出现 无法识别文件为一个launch文件的错误,等待后续尝试修改