赞
踩
一、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>
-
- <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
- <!-- Frame names -->
- <param name="pub_map_odom_transform" value="true"/>
- <param name="map_frame" value="map" />
- <param name="base_frame" value="base_link" />
- <param name="odom_frame" value="base_link" />
-
- <!-- Tf use -->
- <param name="use_tf_scan_transformation" value="true"/>
- <param name="use_tf_pose_start_estimate" value="false"/>
-
- <!-- Map size / start point -->
- <param name="map_resolution" value="0.05"/>
- <param name="map_size" value="2048"/>
- <param name="map_start_x" value="0.5"/>
- <param name="map_start_y" value="0.5" />
- <param name="laser_z_min_value" value = "-1.0" />
- <param name="laser_z_max_value" value = "1.0" />
- <param name="map_multi_res_levels" value="2" />
-
- <param name="map_pub_period" value="2" />
- <param name="laser_min_dist" value="0.4" />
- <param name="laser_max_dist" value="5.5" />
- <param name="output_timing" value="false" />
- <param name="pub_map_scanmatch_transform" value="true" />
- <!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->
-
- <!-- Map update parameters -->
- <param name="update_factor_free" value="0.4"/>
- <param name="update_factor_occupied" value="0.7" />
- <param name="map_update_distance_thresh" value="0.2"/>
- <param name="map_update_angle_thresh" value="0.06" />
-
- <!-- Advertising config -->
- <param name="advertise_map_service" value="true"/>
- <param name="scan_subscriber_queue_size" value="5"/>
- <param name="scan_topic" value="scan"/>
- </node>
-
- <node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>
-
- <node pkg="rviz" type="rviz" name="rviz"
- args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
-
- </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>
- <param name="/use_sim_time" value="false" />
- <!-- 启动关键的建图节点,这是我们主要要更改的地方,更改下面的configuration_directory和configuration_basename的路径 -->
- <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">
- <!-- 更改horizontal_laser_2d为我们的雷达话题 -->
- <remap from="scan" to="horizontal_laser_2d" />
- <!-- 更改odom为里程计话题 -->
- <remap from="odom" to="odom" />
- </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" />
- <node name="playbag" pkg="rosbag" type="play"
- args="--clock $(arg bag_filename)" />
- </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文件的错误,等待后续尝试修改
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。