雷达型号:robosens helios(32线)
系统平台:Linux18.04+ros
新手思路仅供参考。

由于手头只有一个激光雷达,前期在选择建图算法的时候使用的是hector-slam,见连接:学习笔记, 对办公室进行了建图和保存,下面使用amcl进行定位。

amcl(adaptiveMonteCarloLocalization)自适应的蒙特卡洛定位,是用于2D移动机器人的概率定位系统。它实现了自适应(或KLD采样)蒙特卡洛定位方法,该方法使用粒子过滤器根据已知地图跟踪机器人的姿态。
调用只需要通过ros安装navigation包即可(如果没记错的话navigation里面包含amcl,只需要安装navigation就行)。

sudo apt-get install ros-melodic-navigation

安装后在自己的工作空间创建启动的launch文件。

<launch>
<arg name="map_file" default="/home/test/map_files/mymap_office0.yaml"/><!--加载地图-->
<node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" /><!--amcl start-->
<node pkg="amcl" type="amcl" name="amcl" output="screen"><!-- Publish scans from best pose at a max of 10 Hz --><param name="odom_model_type" value="diff"/><param name="odom_alpha5" value="0.1"/><param name="transform_tolerance" value="0.2" /><param name="gui_publish_rate" value="10.0"/><param name="laser_max_beams" value="30"/><param name="min_particles" value="500"/><param name="max_particles" value="5000"/><param name="kld_err" value="0.05"/><param name="kld_z" value="0.99"/><param name="odom_alpha1" value="0.2"/><param name="odom_alpha2" value="0.2"/><!-- translation std dev, m --><param name="odom_alpha3" value="0.8"/><param name="odom_alpha4" value="0.2"/><param name="laser_z_hit" value="0.5"/><param name="laser_z_short" value="0.05"/><param name="laser_z_max" value="0.05"/><param name="laser_z_rand" value="0.5"/><param name="laser_sigma_hit" value="0.2"/><param name="laser_lambda_short" value="0.1"/><param name="laser_lambda_short" value="0.1"/><param name="laser_model_type" value="likelihood_field"/><!-- <param name="laser_model_type" value="beam"/> --><param name="laser_likelihood_max_dist" value="2.0"/><param name="update_min_d" value="0.2"/><param name="update_min_a" value="0.5"/><param name="odom_frame_id" value="odom"/><param name="resample_interval" value="1"/><param name="transform_tolerance" value="0.1"/><param name="recovery_alpha_slow" value="0.0"/><param name="recovery_alpha_fast" value="0.0"/>
</node>
</launch>

launch文件主要干两件事,一个是加载地图,一个是启动amcl节点(同时也给以amcl中的部分参数进行定义)。
这里有个坑就是因为进行定位需要激光雷达和惯导同时进行的,由于手头只有激光雷达,在启动激光雷达、启动转换二维点(amcl使用的是二维匹配)、启动amcl节点后,会发现激光雷达和地图尺寸不匹配、相对位置也不对,并且无法给定初始点。

此处需要增加一个插件laser_scan_matcher,它是利用激光消息/scan来估计位姿,从而发布/odom,可以理解为模拟了惯导。
首先安装:

sudo apt-get install ros-melodic-laser-scan-matcher

或者安装scan-tools也可以,这个里面包含了laser_scan_matcher。

sudo apt-get install ros-melodic-scan-tools

然后写launch文件(文章中的launch可以尝试结合起来,这样不用一个一个启动,但是需要搞清楚先后顺序)。

<launch><!--  set up data playback from bag or not--><param name="/use_sim_time" value="false"/><!--publish an example base_link -> laser transform --><node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /rslidar 10" /><!--start the laser scan_matcher --><node pkg="laser_scan_matcher" type="laser_scan_matcher_node" name="laser_scan_matcher_node" output="screen"><param name="use_imu" value="false"/><param name="use_odom" value="false"/><param name="use_cloud_input" value="false"/><param name="fixed_frame" value = "odom"/><param name="max_iterations" value="10"/></node>
</launch>

然后需要通过激光雷达、三维转二维点云、laser_scan_matcher、amcl节点即可将激光雷达和地图匹配显示在rviz中,可以通过在rviz中通过2D-Pose-Estimate可实现手动发布初始位姿,PoseArray可显示粒子情况。需要注意的是,需要在fixed frame :map下进行初始位姿的发布。此时貌似就能够通过前后左右自主定位,但是由于初始粒子聚在一起定位过程十分缓慢(不知道我的理解对不对)。

后续想要相对便捷的自主定位,让初始的粒子分布整个地图,以便计算位姿,可以通过前后左右移动激光雷达进行自主定位,我这里是加在了amcl的launch包里,在amcl节点启动后面加上如下命令。

  <param name="initial_cov_xx" value="4"/><param name="initial_cov_yy" value="4"/><param name="initial_cov_aa" value="4"/>

激光雷达自主定位

不过这种方法比较慢,尤其是对于有重复相似场景的地方容易定位出现问题,可以手动给一个大概的初始位置然后再让其自主定位,这样会快很多。
如果出现定位出错的时候,可以在终端在终端可以调用ros里面的global_localization服务:

rosservice call /global_localization "{}"

重新调用后粒子会重新铺满整个地图。

激光雷达建图后基于amcl实现自动定位相关推荐

  1. 激光雷达建图(基于ROS)及定位数据获取步骤

    去年7月,思岚科技推出了业内首款激光建图雷达SLAMTEC Mapper,赢得了市场的高度肯定,它与传统的激光雷达有所不同,内置了SLAM实时地图构建和定位功能,在手持情况下,可直接对外输出高品质地图 ...

  2. ROS2+cartorgrapher+激光雷达建图并保存

    目录 写在前面 修改记录 安装cartographer 查看cartographer包名字并安装 cartographer初了解 激光雷达底层驱动 编译 编译驱动时遇到的bug 编译完后文件树 配置文 ...

  3. SLAM实操入门(五):无里程计仅使用激光雷达建图(GMapping算法)

    文章目录 前言 1 Gmapping算法 2 laser_scan_matcher库 2.1 安装laser_scan_matcher库 2.2 修改demo_gmapping.launch文件 3 ...

  4. 谷歌cartographer+EAI的YDLIDAR-X4激光雷达建图实现(二)

    这几天在做谷歌cartographer算法实现,前两天实现了谷歌cartographer室内建图的实现,不过所建之图是基于谷歌提供的博物馆的数据,我们只是将数据包下载之后复现而已,并不是我们自己实验室 ...

  5. gazebo中机器人搭载16线激光雷达建图导航

    gazebo中机器人搭载16线激光雷达建图导航 如果用过古月的教程大家就会知道,古月教程中的机器人采用的是单线激光雷达,但有的时候仿真需要多线激光雷达,这里就教一下怎么搭载16线激光雷达建图导航. 首 ...

  6. ROS机器人应用(6)—— 激光雷达建图和导航

    文章目录 一.激光雷达建图 二.建图算法切换及其优缺点 三.自主导航 四.多点导航 一.激光雷达建图 小车开机,连接WIFI,密码:dongguan. 启动激光建图(服务端) ssh -Y wheel ...

  7. ndtmapping建图_自动驾驶系列:激光雷达建图和定位(NDT)

    该系列主要为对前期工作进行梳理,以后所进行的工作也会部分在此记录. 使用NDT(正态分布变换)进行点云建图和定位 前言 定位模块是自动驾驶最核心的模块之一,定位又包括全局定位和局部定位,对于自动驾驶, ...

  8. 相机模拟激光雷达 建图

    RGBD摄像头实验 除了使用激光雷达进行建图,我们也可以使用深度摄像头模拟激光雷达进行建图. Xtion虚拟激光扫描的角度相对较窄,Xtion一般在57°左右,而一般的激光雷达的扫描范围能达到240° ...

  9. [STM32]手持建图仪--基于STM32F103+思岚A1激光雷达的扫描仪

    前言 一个朋友在做服务机器人项目,用到思岚的激光雷达,于是便把淘汰的A1M8雷达送我一个,本着拿到啥就玩啥的态度,必须整一波.其实激光雷达还是搭配ROS才能发挥最大的作用,奈何资源有限,实力不足,只能 ...

最新文章

  1. HTTP访问服务的相关解释
  2. 9 大主题卷积神经网络(CNN)的 PyTorch 实现
  3. Php如何发出请求,PHP中如何发送HTTP请求?
  4. Android之 AndroidManifest xml 文件解析
  5. MySQL主从复制延时方法
  6. 云ERP系统如何进行流程设计
  7. I/O Permission Bit Map in Task State Segment(TSS)
  8. C++认识容器的迭代器
  9. python小白从哪来开始-国外大牛解析:小白如何从零基础开始学习python编程语言...
  10. 德裔美国Delphi程序员霍尔格-弗里克博士访谈
  11. 怎样背英语单词才高效?
  12. centos+docker+jitsimeet视频服务器搭建
  13. iPhone6分辨率与适配
  14. 长沙县:红红火火过大年 文化惠民暖人心
  15. MySQL 之union all 与 order by 同时出现问题
  16. 深入理解MySQL核心技术
  17. 数字图像处理_Matlab——车牌识别分析
  18. cn2an:中文数字转阿拉伯数字
  19. python 发送get 请求
  20. 初露锋芒 MeeGo系统进入智能电视发展领域

热门文章

  1. [寻春记事》闲笔记事集]2011-2-3
  2. Android APK打包加固 以及上传审核流程和APP上线10多家开发者平台地址
  3. 创造性平面设计思维是如何养成的
  4. pandas读取excel-xlrd相关
  5. android自制拨号器
  6. 从底层原理到花式技巧,用图文和代码讲透C语言指针
  7. IPGUARD卸载客户端方法
  8. 为什么iPhone拍照更好看
  9. Python Numpy练习(一)
  10. ant design vue表格列表时间戳转时间