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

本文详细介绍了如何使用ROS中的RPLIDAR SRC包结合Cartographer进行激光雷达建图。首先从思岚官网、Github和ROS-wiki获取雷达SRC,并进行编译与使用。然后在Cartographer中修改lidar的launch文件和lua配置文件,确保frame_id、topic和参数正确。最后赋予雷达USB口权限,启动相关launch文件,实现建图。整个过程涉及ROS节点配置、权限管理以及Cartographer的参数调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值