基于激光里程计的gmapping建图

2023-12-05 09:20

本文主要是介绍基于激光里程计的gmapping建图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • rplidar_ros通过源码安装
  • 安装rf2o_laser_odometry激光里程计
  • 配置gmapping参数
  • 参考

rplidar_ros通过源码安装

mkdir -p ~/catkin_ws/src
cd  ~/catkin_ws/src
git clone https://github.com/Slamtec/rplidar_ros.git
cd ..
catkin_make 
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

安装rf2o_laser_odometry激光里程计

#依然是将rf2o_laser_odometry下载到ROS工作空间
cd ~/catkin_ws/src/
git clone https://github.com/MAPIRlab/rf2o_laser_odometry.git
cd ~/catkin_ws/
catkin_make

配置参数

<launch><node pkg="rf2o_laser_odometry" type="rf2o_laser_odometry_node" name="rf2o_laser_odometry" output="screen"><param name="laser_scan_topic" value="/scan"/>        # topic where the lidar scans are being published<param name="odom_topic" value="/odom" />              # topic where tu publish the odometry estimations<param name="publish_tf" value="true" />                   # wheter or not to publish the tf::transform (base->odom)<param name="base_frame_id" value="base_link"/>            # frame_id (tf) of the mobile robot base. A tf transform from the laser_frame to the base_frame is mandatory<param name="odom_frame_id" value="odom" />                # frame_id (tf) to publish the odometry estimations    <param name="init_pose_from_topic" value="" /> # (Odom topic) Leave empty to start at point (0,0)<param name="freq" value="6.0"/>                            # Execution frequency.<param name="verbose" value="true" />      </node></launch>

下载得到的原始rf2o_laser_odometry代码有两个问题,如果不修复会有下面这两个报错:

#报错1:

ERRO:“base_link” passed to lookupTransform argument source_frame does not exist. 或者 ERRO:Invalid argument passed to lookupTrasform argument source_frame in tf2 frame_ids cannot be empty

#报错2:

[rf2o] ERROR: Eigensolver couldn’t find a solution. Pose is not updated

第1个错误是由于程序订阅/tf话题数据时超时,加个延迟就好了。在源码rf2o_laser_odometry/src/CLaserOdometry2DNode.cpp中第126行的上面添加下面这句:

tf_listener.waitForTransform(base_frame_id,"laser_link",ros::Time(),ros::Duration(5.0));

第2个错误是你的激光雷达上传来的数据包含Inf或NaNs非法格式数据,我亲测发现EAI-X4雷达没有这个问题,而Rplidar-A1雷达会有这个问题,以防万一还是修复一下吧。将源码rf2o_laser_odometry/src/CLaserOdometry2D.cpp中第292和316行的条件语句都改成下面这个:

if (std::isfinite(dcenter) && dcenter > 0.f)

配置gmapping参数

在./rplidar_ros/launch文件夹中设置a1_gmapping.launch

<!-- 
Example launch file: uses laser_scan_matcher together with
slam_gmapping 
--><launch><include file="$(find rplidar_ros)/launch/rplidar.launch"/><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 /laser 100" /><node pkg="tf" type="static_transform_publisher" name="odom_to_laser" args="0.0 0.0 0.0 0.0 0.0 0.0 /odom /laser 100" /><node pkg="tf" type="static_transform_publisher" name="map_to_laser" args="0.0 0.0 0.0 0.0 0.0 0.0 /map /laser 100" /><include file="$(find rf2o_laser_odometry)/launch/rf2o_laser_odometry.launch"/><node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen"><param name="map_udpate_interval" value="1.0"/><param name="maxUrange" value="12.0"/><param name="sigma" value="0.1"/><param name="kernelSize" value="1"/><param name="lstep" value="0.15"/><param name="astep" value="0.15"/><param name="iterations" value="1"/><param name="lsigma" value="0.1"/><param name="ogain" value="3.0"/><param name="lskip" value="1"/><param name="srr" value="0.1"/><param name="srt" value="0.2"/><param name="str" value="0.1"/><param name="stt" value="0.2"/><param name="linearUpdate" value="1.0"/><param name="angularUpdate" value="0.5"/><param name="temporalUpdate" value="0.4"/><param name="resampleThreshold" value="0.5"/><param name="particles" value="10"/><param name="xmin" value="-10.0"/><param name="ymin" value="-10.0"/><param name="xmax" value="10.0"/><param name="ymax" value="10.0"/><param name="delta" value="0.02"/><param name="llsamplerange" value="0.01"/><param name="llsamplestep" value="0.05"/><param name="lasamplerange" value="0.05"/><param name="lasamplestep" value="0.05"/></node></launch>

参考

https://huaweicloud.csdn.net/64f987ec6b896f66024ca8ab.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MjAxNTYzLCJleHAiOjE3MDE2NTYxODcsImlhdCI6MTcwMTA1MTM4NywidXNlcm5hbWUiOiJ3ZWl4aW5fNDI5OTA0NjQifQ.0-th9fBousxKLdtCglRdh2r99y395OoaTDG1hgzuc_0#devmenu7

这篇关于基于激光里程计的gmapping建图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/456994

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量

文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量 一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格子的尺寸是已知的,可以用于计算比例和调整。平面标定:帮助校准相机和激光扫描仪之间的位置关系。 使用方法 扫描棋盘:

激光SLAM如何动态管理关键帧和地图

0. 简介 个人在想在长期执行的SLAM程序时,当场景发生替换时,激光SLAM如何有效的更新或者替换地图是非常关键的。在看了很多Life-Long的文章后,个人觉得可以按照以下思路去做。这里可以给大家分享一下 <br/> 1. 初始化保存关键帧 首先对应的应该是初始化设置,初始化设置当中会保存关键帧数据,这里的对应的关键帧点云数据会被存放在history_kf_lidar当中,这个数据是和

镭射定位灯激光定位使用注意事项?

在现代工业、建筑测量、舞台设计以及科研实验等领域,镭射定位灯(常称激光定位器)因其高精度、远射程和直观性而得到广泛应用。然而,激光作为一种高强度光束,其使用若不当,不仅可能损害设备,还可能对人体健康造成危害。因此,掌握镭射定位灯激光定位的正确使用方法及注意事项至关重要。下面就跟着鑫优威一起来了解一下。   一、安全为先,做好防护   首先,操作者必须佩戴符合标准的激光防护眼镜,以防止激光直

用python fastapi写一个http接口,使ros2机器人开始slam toolbox建图

如果你想使用Python的FastAPI框架编写一个HTTP接口,以便通过接口启动ROS 2机器人的SLAM Toolbox建图,可以按照以下方式进行: 首先,确保你已经安装了fastapi和uvicorn库。你可以使用以下命令进行安装: pip install fastapi uvicorn 接下来,创建一个Python文件(例如app.py),并将以下代码添加到文件中: import

gmapping 实现过程和数据走向

全局地图坐标系gmap_pose数据处理过程 初始化Map位姿 初始化地图坐标map:map是不会变化的,是gmapping 程序启动的位置姿态就是地图的原地 // 地图原点设置为激光中心位置 启动程序时,设置原点GMapping::OrientedPoint gmap_pose(0, 0, 0); 激光初始化里程计的位姿 // 获取初始姿态GMapping::Oriented

激光尘埃粒子计数器内光源选择:半导体激光管OR氦氖激光管?

在选择激光尘埃粒子计数器时,关键考虑因素包括光源类型、测量范围、灵敏度、稳定性、使用寿命以及应用场景等。针对这些因素,我们可以对半导体激光器和氦氖激光器(He-Ne激光器)进行比较,以判断选择哪种激光尘埃粒子计数器更合适。 激光管定义 半导体激光管(激光二极管) 半导体激光管,也被称为激光二极管(Laser Diode),是一种利用半导体PN结将电流转换成光能并产生激

2d激光反光贴提取

2d激光数据有距离和强度两种数据,强度描述物体材质 。 当在长走廊环境或者动态环境(立体仓库)中,传统基于地图的slam将不在适用,agv行业通常使用反光贴和二维码保证slam可靠性 void HanderReflectors(const sensor::LaserFan& laser_fan, sensor::PointCloud * reflectors) {// 构建反光贴,遍历所有点云,

2d激光点云识别退化场景(长走廊)

注:算法只适用于静态场景,在有动态场景(行人)的环境下不适用 退化场景描述 场景一:长走廊 激光探测距离有限,在长走廊环境下,激光在某些位置无法探测到走廊尽头,会出现如上图情况,激光轮廓为红色的两条平行线。对于这种情况,我们只需寻找到只有两个平行线,即位退化场景 场景二:单一墙面 通常情况下,退化场景为如上两种情况,当然多条平行线也是符合的。 算法思路为,如果激光雷达点云构成的特征都是平行线