ros移动机器人,激光雷达里程计rf2o_laser_odometry的使用与分析
目录
1.问题分析
2.激光雷达里程计
2.1 代码下载
2.2 使用方法
(1) ERRO:“base_link” passed to lookupTransform argument source_frame does not exist.
(2)"Waiting for laser_scans...."
(3)无法发布odom->base_footprint的tf信息
2.3 导航和建图
1.问题分析
由于编码器里程计在使用的时候误差较大,运行时间越长,累计误差越大,尤其当主动轮是充气轮时,误差更大,所以本文将介绍激光雷达里程计的使用。
2.激光雷达里程计
目前主流的激光雷达里程计包括laser_scan_matcher和rf2o_laser_odometry,其中laser_scan_matcher效果似乎不太好,这里不对其进行介绍,本文主要介绍rf2o_laser_odometry。
2.1 代码下载
git clone https://gitee.com/YaoFL/rf2o_laser_odometry
2.2 使用方法
首先运行激光雷达,再运行rf2o_laser_odometry,以我的激光雷达为例:
roslaunch ydlidar_ros G2.launch
roslaunch rf2o_laser_odometry rf2o_laser_odometry.launch
但是基本上都会出现各种问题,一般分为三个:
(1) ERRO:“base_link” passed to lookupTransform argument source_frame does not exist.
主要是因为base_link到雷达没有连接起来,导致无法获取雷达信号。
在rf2o_laser_odometry/src/CLaserOdometry2DNode.cpp中修改:
找到如下代码:tf_listener.lookupTransform(base_frame_id, last_scan.header.frame_id, ros::Time(0), transform);
在此之前添加代码:
tf_listener.waitForTransform("/base_footprint","/laser_frame", ros::Time(), ros::Duration(5.0));
其中"/laser_frame"是激光雷达的frame_id,利用rostopic echo /scan查看/scan的frame_id。
同时将tf_listener.lookupTransform(base_frame_id, last_scan.header.frame_id, ros::Time(0), transform);中的frame_id修改成自己的。例如:
tf_listener.waitForTransform("/base_footprint","/laser_frame", ros::Time(), ros::Duration(5.0));
tf_listener.lookupTransform("/base_footprint","/laser_frame", ros::Time(0), transform);
(2)"Waiting for laser_scans...."
无法获取雷达信息,一般激光雷达主题是/scan,修改launch为:
<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="false" /> # wheter or not to publish the tf::transform (base->odom)<param name="base_frame_id" value="/base_footprint"/> # 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="10.0"/> # Execution frequency.<param name="verbose" value="true"/> # verbose</node></launch>
(3)无法发布odom->base_footprint的tf信息
在rf2o_laser_odometry/src/CLaserOdometry2DNode.cpp中修改:
在if (publish_tf)前添加
publish_tf=1;
2.3 导航和建图
需要将driver.launch中发布odom的代码删除掉,不然可能出现机器人跳变,因为存在两个odom主题。
1.启动机器人的driver.launch
2.运行激光雷达
3.roslaunch rf2o_laser_odometry rf2o_laser_odometry.launch
4.运行导航和建图的luanch
tf树和建图效果如下;
后续将实现编码器里程计和激光雷达里程计的融合。
ros移动机器人,激光雷达里程计rf2o_laser_odometry的使用与分析相关推荐
- 自动驾驶中高效的激光雷达里程计
标题:Efficient LiDAR Odometry for Autonomous Driving 作者:Xin Zheng, Jianke Zhu, Senior Member, IEEE 排版: ...
- 移动机器人轮式里程计
移动机器人灵魂三问:我在哪? 我要去哪里? 怎么去?其中,第一问对应机器人定位问题.定位问题可阐述为:移动机器人根据自身状态.传感器信息实时确定自己在世界(全局或局部)中的位置与姿态. 阿克曼转向的无 ...
- 用于自动驾驶的激光雷达里程计方法综述
文章:LiDAR Odometry Methodologies for Autonomous Driving: A Survey 作者:Nikhil Jonnavithula1 , Yecheng L ...
- 直接激光雷达里程计:基于稠密点云的快速定位
点云PCL免费知识星球,点云论文速读. 文章:Direct LiDAR Odometry:Fast Localization with Dense Point Clouds 作者:Kenny Chen ...
- 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图 激光雷达里程计 针对LOAM的改进 激光雷达建图 原文 激光雷达里程计 激光雷达里程计模块的功能就是:估计相邻帧之间的位姿变换. ...
- 毕业论文设计:第二部分—激光雷达里程计研究
激光雷达里程计 1. LOAM 1.1 符号定义 1.2 系统结构 1.3 激光里程计 1.3.1 特征提取 1.3.2 寻找特征点对应关系 1.3.3 运动估计 1.3.4 激光里程计算法 1.4 ...
- 2D激光SLAM-基于PL-ICP的激光雷达里程计
原文链接:从零开始搭二维激光SLAM - 基于PL-ICP的激光雷达里程计 如何跑通自己的雷达数据?需要调整哪些参数? 1.录制自己的数据包 #终端1 roscore #终端2 rosbag paly ...
- IROS 2021 | F-LOAM:快速激光雷达里程计建图算法
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:F-LOAM : Fast LiDAR ...
- LIO-SAM:通过平滑和映射的紧耦合激光雷达惯性里程计(翻译)
摘要 我们提出了一种通过平滑和映射实现紧耦合的激光雷达惯性里程测量的框架LIO-SAM,该框架实现了高精度.实时的移动机器人轨迹估计和地图构建.LIO-SAM将激光雷达惯性里程表公式化为因子图,允许从 ...
最新文章
- springside地址
- 设计模式:命令模式(Command Pattern)
- 首发:李航老师的《统计学习方法》第二版的代码实现(Github标星过万!)
- Scala模式匹配:for循环表达式中的模式匹配
- boost::mpi模块sendrecv() 操作的测试
- java break 在if 中使用_java中使用国密SM4算法详解
- PowerShell远程管理Windows Server(2):公网访问【web形式】
- 把html文件变成php,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...
- 【C++基础】C++11的noexcept声明符 与 异常传播
- c语言拔河分组回溯算法,【阅读下面的文字,完成10—12题。文明的共相回溯我们历史演-查字典问答网...
- 重构代码的tricks
- sizeof运算符_C编程中的sizeof()运算符
- Ambari HDP 完整安装手册
- linux一款不错的linux系统清理工具
- 数据库课程设计实验报告--图书馆管理系统
- Apollo 的3D障碍物感知解析
- 如何在Swift中实现状态机?
- aosp_015.配置编译文件,删除自带app
- 001-2019-0124 前端Html
- [Springboot]发送邮件、重置密码业务实战