激光雷达建图后基于amcl实现自动定位
雷达型号: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实现自动定位相关推荐
- 激光雷达建图(基于ROS)及定位数据获取步骤
去年7月,思岚科技推出了业内首款激光建图雷达SLAMTEC Mapper,赢得了市场的高度肯定,它与传统的激光雷达有所不同,内置了SLAM实时地图构建和定位功能,在手持情况下,可直接对外输出高品质地图 ...
- ROS2+cartorgrapher+激光雷达建图并保存
目录 写在前面 修改记录 安装cartographer 查看cartographer包名字并安装 cartographer初了解 激光雷达底层驱动 编译 编译驱动时遇到的bug 编译完后文件树 配置文 ...
- SLAM实操入门(五):无里程计仅使用激光雷达建图(GMapping算法)
文章目录 前言 1 Gmapping算法 2 laser_scan_matcher库 2.1 安装laser_scan_matcher库 2.2 修改demo_gmapping.launch文件 3 ...
- 谷歌cartographer+EAI的YDLIDAR-X4激光雷达建图实现(二)
这几天在做谷歌cartographer算法实现,前两天实现了谷歌cartographer室内建图的实现,不过所建之图是基于谷歌提供的博物馆的数据,我们只是将数据包下载之后复现而已,并不是我们自己实验室 ...
- gazebo中机器人搭载16线激光雷达建图导航
gazebo中机器人搭载16线激光雷达建图导航 如果用过古月的教程大家就会知道,古月教程中的机器人采用的是单线激光雷达,但有的时候仿真需要多线激光雷达,这里就教一下怎么搭载16线激光雷达建图导航. 首 ...
- ROS机器人应用(6)—— 激光雷达建图和导航
文章目录 一.激光雷达建图 二.建图算法切换及其优缺点 三.自主导航 四.多点导航 一.激光雷达建图 小车开机,连接WIFI,密码:dongguan. 启动激光建图(服务端) ssh -Y wheel ...
- ndtmapping建图_自动驾驶系列:激光雷达建图和定位(NDT)
该系列主要为对前期工作进行梳理,以后所进行的工作也会部分在此记录. 使用NDT(正态分布变换)进行点云建图和定位 前言 定位模块是自动驾驶最核心的模块之一,定位又包括全局定位和局部定位,对于自动驾驶, ...
- 相机模拟激光雷达 建图
RGBD摄像头实验 除了使用激光雷达进行建图,我们也可以使用深度摄像头模拟激光雷达进行建图. Xtion虚拟激光扫描的角度相对较窄,Xtion一般在57°左右,而一般的激光雷达的扫描范围能达到240° ...
- [STM32]手持建图仪--基于STM32F103+思岚A1激光雷达的扫描仪
前言 一个朋友在做服务机器人项目,用到思岚的激光雷达,于是便把淘汰的A1M8雷达送我一个,本着拿到啥就玩啥的态度,必须整一波.其实激光雷达还是搭配ROS才能发挥最大的作用,奈何资源有限,实力不足,只能 ...
最新文章
- HTTP访问服务的相关解释
- 9 大主题卷积神经网络(CNN)的 PyTorch 实现
- Php如何发出请求,PHP中如何发送HTTP请求?
- Android之 AndroidManifest xml 文件解析
- MySQL主从复制延时方法
- 云ERP系统如何进行流程设计
- I/O Permission Bit Map in Task State Segment(TSS)
- C++认识容器的迭代器
- python小白从哪来开始-国外大牛解析:小白如何从零基础开始学习python编程语言...
- 德裔美国Delphi程序员霍尔格-弗里克博士访谈
- 怎样背英语单词才高效?
- centos+docker+jitsimeet视频服务器搭建
- iPhone6分辨率与适配
- 长沙县:红红火火过大年 文化惠民暖人心
- MySQL 之union all 与 order by 同时出现问题
- 深入理解MySQL核心技术
- 数字图像处理_Matlab——车牌识别分析
- cn2an:中文数字转阿拉伯数字
- python 发送get 请求
- 初露锋芒 MeeGo系统进入智能电视发展领域