当前位置:   article > 正文

ROS利用单雷达A1进行cartography建图_ros cartography

ros cartography

一、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文件

  1. <launch>
  2. <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
  3. <!-- Frame names -->
  4. <param name="pub_map_odom_transform" value="true"/>
  5. <param name="map_frame" value="map" />
  6. <param name="base_frame" value="base_link" />
  7. <param name="odom_frame" value="base_link" />
  8. <!-- Tf use -->
  9. <param name="use_tf_scan_transformation" value="true"/>
  10. <param name="use_tf_pose_start_estimate" value="false"/>
  11. <!-- Map size / start point -->
  12. <param name="map_resolution" value="0.05"/>
  13. <param name="map_size" value="2048"/>
  14. <param name="map_start_x" value="0.5"/>
  15. <param name="map_start_y" value="0.5" />
  16. <param name="laser_z_min_value" value = "-1.0" />
  17. <param name="laser_z_max_value" value = "1.0" />
  18. <param name="map_multi_res_levels" value="2" />
  19. <param name="map_pub_period" value="2" />
  20. <param name="laser_min_dist" value="0.4" />
  21. <param name="laser_max_dist" value="5.5" />
  22. <param name="output_timing" value="false" />
  23. <param name="pub_map_scanmatch_transform" value="true" />
  24. <!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->
  25. <!-- Map update parameters -->
  26. <param name="update_factor_free" value="0.4"/>
  27. <param name="update_factor_occupied" value="0.7" />
  28. <param name="map_update_distance_thresh" value="0.2"/>
  29. <param name="map_update_angle_thresh" value="0.06" />
  30. <!-- Advertising config -->
  31. <param name="advertise_map_service" value="true"/>
  32. <param name="scan_subscriber_queue_size" value="5"/>
  33. <param name="scan_topic" value="scan"/>
  34. </node>
  35. <node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>
  36. <node pkg="rviz" type="rviz" name="rviz"
  37. args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
  38. </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..

------------------------------------------------------------------------------

按照官网的教程进行改进,上面直接跳过

  1. mkdir cartographer_ws
  2. cd cartographer_ws
  3. wstool init src

而在src下我们依然需要添加依赖包

  1. cd src
  2. git clone https://github.com/googlecartographer/cartographer_ros.git
  3. git clone https://github.com/googlecartographer/cartographer.git
  4. 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库,我们可以查看一下,但是可以不用搬运进来

  1. rosdep update
  2. rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
  3. 安装abseil-cpp库
  4. src/cartographer/scripts/install_abseil.sh
  5. 编译与安装
  6. catkin_make_isolated --install --use-ninja

建立完自己的工作空间后就可以进行文件(launch lua)的配置

(2)文件的配置

launch文件夹下的demo_revo_lds.launch是二维建图的demo launch文件

 核心代码如下,我们可以复制一份回工作空间进行使用

  1. <launch>
  2. <param name="/use_sim_time" value="false" />
  3. <!-- 启动关键的建图节点,这是我们主要要更改的地方,更改下面的configuration_directory和configuration_basename的路径 -->
  4. <node name="cartographer_node" pkg="cartographer_ros"
  5. type="cartographer_node" args="
  6. -configuration_directory $(find cartographer_ros)/configuration_files
  7. -configuration_basename revo_lds.lua"
  8. output="screen">
  9. <!-- 更改horizontal_laser_2d为我们的雷达话题 -->
  10. <remap from="scan" to="horizontal_laser_2d" />
  11. <!-- 更改odom为里程计话题 -->
  12. <remap from="odom" to="odom" />
  13. </node>
  14. <!-- 一般不更改,有个建图分辨率参数 -->
  15. <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
  16. type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
  17. <!-- 下面这两个一般直接注释掉,我们自己需要再启动就可以了 -->
  18. <node name="rviz" pkg="rviz" type="rviz" required="true"
  19. args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
  20. <node name="playbag" pkg="rosbag" type="play"
  21. args="--clock $(arg bag_filename)" />
  22. </launch>

这份launch文件只是启动了关键的carto建图节点,看上面这个launch文件默认的文件路径就知道它对应的默认配置文件是 revo_lds.lua 文件,同样,我们可以直接复制一份到我们的工作空间。

根据我们自己机器人的情况更改参数即可,注意要同时把上面launch文件的那两个路径更改成我们存放这个lua的位置(configuration_directory指定文件夹,configuration_basename指定文件名) 

revo_lds.lua这个参数配置文件主要要更改的东西可以参照下面的代码块:

  1. include "map_builder.lua"
  2. include "trajectory_builder.lua"
  3. options = {
  4. map_builder = MAP_BUILDER,
  5. trajectory_builder = TRAJECTORY_BUILDER,
  6. map_frame = "map",
  7. -- tracking_frame更改为我们机器人的基坐标tf,一般是base_link,
  8. tracking_frame = "horizontal_laser_link",
  9. -- 以下四个参数与里程计有关,在下面进行单独说明
  10. odom_frame = "odom",
  11. published_frame = "horizontal_laser_link",
  12. provide_odom_frame = false,
  13. use_odometry = true,
  14. publish_frame_projected_to_2d = false,
  15. use_pose_extrapolator = true,
  16. use_nav_sat = false,
  17. use_landmarks = false,
  18. num_laser_scans = 1,
  19. num_multi_echo_laser_scans = 0,
  20. num_subdivisions_per_laser_scan = 1,
  21. num_point_clouds = 0,
  22. lookup_transform_timeout_sec = 0.2,
  23. submap_publish_period_sec = 0.3,
  24. pose_publish_period_sec = 5e-3,
  25. trajectory_publish_period_sec = 30e-3,
  26. rangefinder_sampling_ratio = 1.,
  27. odometry_sampling_ratio = 1.,
  28. fixed_frame_pose_sampling_ratio = 1.,
  29. imu_sampling_ratio = 1.,
  30. landmarks_sampling_ratio = 1.,
  31. }
  32. MAP_BUILDER.use_trajectory_builder_2d = true
  33. TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
  34. TRAJECTORY_BUILDER_2D.min_range = 0.3
  35. TRAJECTORY_BUILDER_2D.max_range = 8.
  36. TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
  37. -- 决定是否使用imu数据
  38. TRAJECTORY_BUILDER_2D.use_imu_data = false
  39. TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
  40. TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
  41. TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
  42. TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
  43. POSE_GRAPH.optimization_problem.huber_scale = 1e2
  44. POSE_GRAPH.optimize_every_n_nodes = 35
  45. POSE_GRAPH.constraint_builder.min_score = 0.65
  46. return options

carto建图可以不需要里程计即只靠激光雷达建图

配置完后进行source 

source ./install/setup.bash

(在前面建立工作空间的时候可以直接和前面一样进行catkin_make)

___________________________________________________

-------未完待续

目前问题: 由于系统的包位于总计算机文件下,进行操作时无法直接移动这些包,需要调用功能,并且尝试时,编译有时成功再次尝试时会失败,并且出现  无法识别文件为一个launch文件的错误,等待后续尝试修改

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/557936
推荐阅读
相关标签
  

闽ICP备14008679号