草庐IT

四、Cargrapher单激光雷达建图(通用)

旧势力底层学习者 2023-12-29 原文

目录

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 结果

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

有关四、Cargrapher单激光雷达建图(通用)的更多相关文章

  1. ruby-on-rails - 在 rails 4 中实现通用搜索 - 2

    我有一个带有多个模型和View页面的Rails4应用程序。我的应用程序的应用程序布局包含一个搜索栏。但它目前处于非事件状态。搜索栏的目的是让用户在所有模型中搜索输入的关键字,基本上使其成为全局搜索。有没有通用搜索的gem?或者它必须通过sql查询手动完成?我可以看到在其View页面上实现对特定模型的搜索的方法。但我希望它一次搜索所有模型。我该怎么办? 最佳答案 我认为在您的情况下最好的方法是使用ElasticSearch。提供了一个简洁的集成gemhere.该页面上提供了指向文档的链接。

  2. ruby-on-rails - Ruby 通用文件系统库 - 2

    我正在寻找用于ruby​​的“虚拟文件系统”类型库。我希望能够拥有一个完全通用的文件系统,我可以轻松地在使用本地文件和使用S3或使用FTP或类似的东西之间切换。(等同于Java的VFS)有没有人为ruby​​使用过任何类型的通用文件系统(我只需要它来支持本地文件和AmazonS3)如有任何指点,我们将不胜感激。 最佳答案 看看Vfs(虚拟文件系统)——它通过本地文件系统、AWSS3、SFTP提供简单而统一的接口(interface)。概览:http://alexeypetrushin.github.com/vfsS3样本:http:

  3. 相机内参标定,相机和激光雷达联合标定 - 2

    相机内参标定,相机和激光雷达联合标定一、相机标定原理1.1成像过程1.2标定详解二、相机和激光雷达联合标定2.1标定方法汇总2.2Autoware的安装与运行2.2.1安装方式2.2.2安装Autoware的依赖(Ubuntu16.04/kinetic)2.2.3编译Autoware1.创造工作空间2.下载Autoware源码3.其他依赖4.编译5.效果2.3Autoware标定激光雷达和相机的外参过程一、相机标定原理1.1成像过程现实物体在相机中的成像过程离不开世界坐标系、相机坐标系、图像坐标系以及像素坐标系,只有理解了这些才能对获取的图像进行准确的分析。成像过程:四个坐标系如下图所示:世界

  4. ruby - Ruby 中的通用换行符支持,包括\r (CR) 行尾 - 2

    在Rails应用程序中,我正在接受和解析CSV文件,这些文件可能使用以下三种可能的行终止字符中的任何一种进行格式化:\n(LF)、\r\n(CR+LF),或\r(CR)。Ruby的File和CSV库似乎可以很好地处理前两种情况,但最后一种情况(“Macclassic”\r行结尾)不作为换行符处理。能够接受这种格式以及其他格式很重要,因为MicrosoftExcelforMac(在OSX上运行)似乎在导出为“逗号分隔值”时使用它(尽管导出为“Windows逗号分隔”更容易-处理\r\n).Python具有“通用换行支持”,可以毫无问题地处理这三种格式中的任何一种。Ruby中是否有类似的东

  5. ruby - Ruby 通用定界输入的优缺点是什么? (百分比语法) - 2

    我不明白为什么有些人在ruby​​中大量使用百分比语法。例如,我正在阅读rubypluginguide它使用如下代码:%w{modelscontrollers}.eachdo|dir|path=File.join(File.dirname(__FILE__),'app',dir)$LOAD_PATH每次看到这样的东西,我都得去查找百分比语法引用,因为我不记得%w是什么意思。这种语法真的比["models","controllers"].each...更可取吗?我认为在后一种情况下,我定义了一个字符串数组更清楚,但在前一种情况下——尤其是对于学习ruby​​的人来说——似乎不太清楚,至少

  6. 【Element UI通用后台管理系统】(一)项目搭建 - 2

    一、使用Yarn作为项目的包管理工具1、Yarn是什么?“Yarn是由Facebook、Google、Exponent和Tilde联合推出了一个新的JS包管理工具,正如官方文档中写的,Yarn是为了弥补npm的一些缺陷而出现的。”这句话让我想起了使用npm时的坑:npminstall的时候非常慢,特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表的含义不同。 "5.0.3"   表示:安装指定的5.0.3版本"~5.0.3"  表示:安

  7. 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码) - 2

    博主的合并代码git@github.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1SDK+ROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm=1001.2014.3001.55011.2相机标定参数1、相机内参通过rostopic的camera/info获取header:标准消息头seq:序列ID,连续递增的ID号stamp:两个时间戳frame_id:与此数据相关联的帧IDheight:图像尺

  8. ruby-on-rails - 将在多个模型中找到的通用代码放在哪里? - 2

    我有两个包含相同方法的模型:deffoo#dosomethingend我应该把它放在哪里?我知道常用代码位于Rails应用程序的lib目录。但是如果我把它放在lib中一个名为“Foo”的新类中,我需要将它的功能添加到我的两个ActiveRecord模型,我是这样做的吗:classA然后A和B都将包含foo方法,就好像我在每个方法中都定义了它一样? 最佳答案 创建一个模块,你可以把它放在lib目录下:moduleFoodeffoo#dosomethingendend然后您可以在每个模型类中包含该模块:classAA和B模型现在将定义一

  9. ruby - 获取通用 Rack 应用程序中中间件的有序列表? - 2

    除了通用Rack应用程序之外,我正在寻找的功能类似于Rails中的rake中间件命令。 最佳答案 $rakemiddlewareuseActionDispatch::StaticuseRack::Lockuse#useRack::RuntimeuseRack::MethodOverrideuseActionDispatch::RequestIduseRails::Rack::LoggeruseActionDispatch::ShowExceptionsuseActionDispatch::DebugExceptionsuseActi

  10. javascript - 使用 XMLHttpRequest 和通用处理程序通过 FTP 下载 PDF 文件 - 2

    我正在尝试使用JqueryAjax请求从FTP服务器下载PDF文件。我提到了http://www.dave-bond.com/blog/2010/01/JQuery-ajax-progress-HMTL5/.我的Jqueryajax调用如下所示$.ajax({xhr:function(){varxhr=newwindow.XMLHttpRequest();//Downloadprogressxhr.addEventListener("progress",function(evt){console.log("Event:"+evt.lengthComputable);if(evt.len

随机推荐