Cargrapher(2)单激光雷达建图(通用篇)

目录

1、雷达ROS-SRC包使用(以思岚为例)

        1.1 首先从官网/Github/Ros-wiki 中找到自己雷达所对应的SRC

        1.2 下载后

        1.3 编译与使用

2、cartographer结合lidar建图

2.1 lidar修改及需要确定的信息

2.2 cartographer需要修改的信息

2.3 结果


1、雷达ROS-SRC包使用(以思岚为例)

        Tips:2D激光雷达的SRC大同小异,你需要确认和你雷达对应和Ubuntu上能够使用它

        1.1 首先从官网/Github/Ros-wiki 中找到自己雷达所对应的SRC

        思岚官网:思岚科技(SLAMTEC)资源下载中心及技术支持联系方式

        Github:Slamtec/rplidar_ros (github.com)

        ROS-wiki:Sensors - ROS Wiki (需要自己找对应的Sensors Src)

        1.2 下载后

        对应的雷达SRC 基本遵循 ROS Workspace 的目录结构:

        1.3 编译与使用

        在编译和使用前,建议你首先仔细阅读 README.md 文件,一般的 SRC 中都提供了 README.md 用来对此 ROS Workspace 进行了详细的介绍和使用说明

         这里就很明显了,你需要读懂两个东西:        

// 1-cd 到 当前的 workspace 运行以下命令完成编译
catkin_make
// 2-启动当前雷达所对应的 SRC 
// 我所用的是 A2 即 (for RPLIDAR A1/A2) 的launch
roslaunch rplidar_ros rplidar.launch 

        如果catkin中出现了not found package什么什么的,请移步查看 

十一、SLAM常用小功能-第二点

        编译完成后不能直接启动 launch,否则你会遇到一个 ERROR ,not found data 或者其他,这是因为雷达所接的USB口并没有串口权限,此时进行赋权才可以读取,即:

//ttyUSB几需要自行判断,直接TAB补全也会出来
//如果接入设备除了雷达还有IMU等其他设备的话就不太适用了
sudo chmod 777 /dev/ttyUSB*

        赋权完成后直接启动既可以看到雷达 rviz 显示的数据了


2、cartographer结合lidar建图

2.1 lidar修改及需要确定的信息

        打开 lidar-src 找到 launch文件夹,找到对应的启动 launch 打开

         首先查看launch文件如下,需要明确的几个地方有,frame_id,topic:

<launch>
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">
  <param name="serial_port"         type="string" value="/dev/ttyUSB0"/>
  <param name="serial_baudrate"     type="int"    value="115200"/><!--A1/A2 -->
  <!--param name="serial_baudrate"     type="int"    value="256000"--><!--A3 -->
  <param name="frame_id"            type="string" value="laser"/>
  <param name="inverted"            type="bool"   value="false"/>
  <param name="angle_compensate"    type="bool"   value="true"/>
  </node>
</launch>

         其中我们可以直接看出此雷达:

         (1)frame_id 已经被配置为laser

         (2)端口映射为 /dev/ttyUSB0 即 1.3 中赋权端口名就是这个

         (3)查看雷达购买的型号,找到雷达的最小最大探测距离(此项自行寻找)

         下一个需要确定的就是lidar 的 topic,打开终端,运行雷达launch,运行完成后新开终端,运行以下命令

rostopic list

        此时列出来的是所有的正在运行的 topic 列表,在此列表中你可以找到自己的 lidar topic

        即 /scan

        总结一下:lidar_framed_id=laser          lidar_topic:/scan      lidar_min_range=0.2  

        lidar_max_range=12

2.2 cartographer需要修改的信息

        打开  Carto_ws/cartographer_ros/launch/demo_revo_lds.launch 按以下内容修改

<launch>
<!--实际建图 time 不需要生成-->
  <param name="/use_sim_time" value="flase" />

  <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">
<!--映射lidar 中 topic 到 carto 中的 scan -->
<!--时间比较久不太记得了,如果出现error可以把后面的“/”去掉改为“scan”-->
    <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 cartographer_ros)/configuration_files/demo_2d.rviz" />
<!--删除rosbag,由于添加注释会收到里面的两个横行干扰 干脆直接删除-->
</launch>

        修改完成后保存,看到这一段,打开revo_lds.lua文件,按以下内容修改

(Carto_ws/cartographer_ros/configuration_files/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 = "laser",           --修改为 lidar_framde_id
  published_frame = "laser",          --修改为 lidar_framde_id
  odom_frame = "odom",
  provide_odom_frame = true,
  publish_frame_projected_to_2d = false,
  use_pose_extrapolator = true,       --此项为姿态外推器,建议为true,flase也可以
  use_odometry = false,
  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.2           --修改为lidar_min_range
TRAJECTORY_BUILDER_2D.max_range = 12.           --修改为lidar_max_range
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

        修改完成后,重新编译,再依次启动 lidar的launch carto 的 launch 就可以了,遇到ERROR看是不是我提到过的问题及对应关系没有写对。

==================编译工作空间=======================
catkin_make_isolated --install --use-ninja

==================开发串口权限=======================
sudo chmod 777 /dev/ttyUSB*

==================运行雷达节点=======================
roslaunch rplidar_ros rplidar.launch 

==============运行cartographer建图===================
roslaunch cartographer_ros demo_revo_lds.launch 

2.3 结果

        懒得拿着到处跑了,移动起来即可完成建图

 


        不积跬步无以至千里,不积小流无以成江河  -------------------------------1:59

  • 12
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
【资源说明】 基于线激光雷达SLAM建图与路径规划c++实现源码+项目说明(SLAM建图、定位、路径规划).zip 线激光雷达SLAM建图与路径规划 使用的硬件:autolabor pro1小车、小觅双目相机(S1030标准版本)、IntelNUC迷你主机、显示器、2D激光雷达 Delta-1A 使用的软件:ubuntu 16.04 LTS、ROS-kinetic、小觅驱动、autolabor pro1小车驱动、Delta-1A驱动、VINS-Fusion算法、ROS-navigation导航包、gmapping建图算法、cartographer_ros建图算法 ## tf介绍 tf变换:map(地图坐标系)-->odom(里程计坐标系)——>base_link(小车基座坐标系)——>传感器坐标系(lidar、camera) ---- map-->odom 由建图算法提供 ---- odom --> base_link 由小车驱动提供 ---- base_link --> 传感器坐标系 根据传感器在小车上安装的位置确定,使用static_transform_publisher静态坐标转换来设置 所需传感器数据类型: sensor_msgs/LaserScan 使用Delta-1A驱动发布的雷达扫描话题,话题名:/scan 所需里程计信息数据类型:nav_msgs/Odometry 使用autolabor pro1发布的里程计,话题名:/wheel_odom ## 建图 采用gmapping与 cartographer_ros建图算法分别进行建图 ### gmapping建图:(雷达+小车) 打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunch autolabor_box_launch create_map_gmapping.launch ####打开小车urdf模型、驱动、键盘控制节点、打开雷达驱动、打开gmapping节点、打开rviz可视化节点 ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ####保存地图 map_name为保存地图的名称,运行结果,会生成2个文件,后缀名分别为 .pgm .yaml ### cartographer_ros建图:(雷达+小车) ##打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunch autolabor_box_launch create_map_cartographer.launch ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ### cartographer_ros建图:(雷达+小车+IMU) $ cd ~/catkin_ws_lidar_slam/ $ roslaunch autolabor_box_launch create_map_cartographer_imu.launch ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ## 定位与路径规划 分别使用gmapping建图算法与cartographer_ros建图算法建立的地图进行定位与路径规划 ### gmapping算法建立的地图进行定位与路径规划 打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunc 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值