ros移动机器人,激光雷达里程计rf2o_laser_odometry的使用与分析

article/2025/7/21 23:53:17

目录

 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树和建图效果如下;

后续将实现编码器里程计和激光雷达里程计的融合。


http://chatgpt.dhexx.cn/article/0fK2lk2J.shtml

相关文章

Super odometry:以IMU为核心的激光雷达视觉惯性融合框架(ICRA2021)

Super Odometry: IMU-centric LiDAR-Visual-Inertial Estimator for Challenging Environments 作者&#xff1a;Shibo Zhao&#xff0c;Hengrui Zhang, Peng Wang, Lucas Nogueira&#xff0c;Sebastian Scherer 论文地址&#xff1a;https://arxiv.org/pdf/2104.14938.pdf 视…

svo: semi-direct visual odometry 论文解析

SVO 从名字来看&#xff0c;是半直接视觉里程计&#xff0c;所谓半直接是指通过对图像中的特征点图像块进行直接匹配来获取相机位姿&#xff0c;而不像直接匹配法那样对整个图像使用直接匹配。整幅图像的直接匹配法常见于RGBD传感器&#xff0c;因为RGBD传感器能获取整幅图像的…

LIMO: Lidar-Monocular Visual Odometry

IROS2018的论文 本文提出了LIMO SLAM框架&#xff0c;主要工作是融合了LiDAR和Monocular。 https://github.com/johannes-graeter/limo 前端 特征 本文使用的是viso2特征&#xff0c;它能 non-maimum suppression, outlier rejection 和 subpixel refinement. 30-40ms能提…

Visual Odometry技术 (Of VSLAM)

目录 什么是SLAM 经典视觉SLAM框架 Visual Odometry Lucas–Kanade光流 Acknowledgements and References 什么是SLAM SLAM是Simultaneous localization and mapping缩写&#xff0c;意为“同步定位与建图”1。它是指搭载了特定传感器的主体&#xff0c;如机器人或者无人…

ROS 位置姿态Odometry仿真模拟(gmapping)

使用单纯的雷达数据进行 2D 建立图像的时候&#xff0c;建图的效果和雷达的性能也有关系&#xff0c;雷达的扫描频率会随着小车的移动速度增大而变化&#xff0c;通过更改扫描的频率来更新栅格地图的完整性。 点击DEMO-LINK 所需要的环境 ubuntu 18.04 ROS Melodic desktop fu…

rospy Odometry天坑小计

rospy Odometry天坑小计 在使用 python 自己搭建 ros 控制小车的上位机接口时&#xff0c;遇到了一个非常奇怪的问题&#xff0c;发布里程计的时候&#xff0c;一旦里程计得到订阅&#xff0c;发布者就会报 ndarray 属性找不到错误&#xff0c;乍一看着实让人脑瓜疼&#xff0…

Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(一)

Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析&#xff08;一&#xff09; 1. LiDAR inertial odometry and mapping简介2. Tightly coupled LiDAR inertial odometry2.1 LiDAR-IMU odometry overview2.2 IMU and pre-integration2.3 De-skewing and feature e…

SLAM——入门到放弃:ROS里程计(odometry)

ROS gmapping导航包&#xff0c;要求有2 个 输入&#xff0c;一个是激光数据&#xff0c;另一个就是里程计信息。 里程计又包含2 个方面的信息&#xff1a; 位姿&#xff08;位置和转角&#xff09;&#xff0c;即&#xff08;x,y,θ&#xff09;是速度&#xff08;前进速度和…

Ros Odometry获取机器人位置-python 代码打印

纪念一下&#xff0c;辛苦了一天多&#xff0c;终于找出来了&#xff0c;经过网上的资料反向推出结构。 博主需要通过机器人的实时位置来进行计算。从网上查阅得知nav_msgs/Odometry消息中存储机器人的位置和速度估计等。 下面展示一下操作流程&#xff1a; 1.首先通过 ros…

ROS里程计消息nav_msgs/Odometry的可视化方法

ROS中里程计的消息类型为nav_msgs/Odometry&#xff0c;该消息类型具有以下结构&#xff1a; 可以看到&#xff0c;里程计消息中的pose包含了位置pose.position和姿态pose.orientation 在ROS中&#xff0c;有一种常用消息类型为nav_msgs/Path&#xff0c;可视化的方法为&#…

基于rf2o_laser_odometry纯激光里程计的gmapping建图

ROS环境&#xff1a;ubuntu16.04 & ROS kinetic激光雷达&#xff1a;EAI-X4 or RPlidar-A1激光里程计&#xff1a;rf2o_laser_odometry建图&#xff1a;gmapping 对于很多刚入门的同学&#xff0c;购买一台带有高精度轮式里程计的ROS小车经济上往往不允许。但是大多数同学…

nav_msgs/Odometry消息的发布和tf变换

一。ROS使用tf来决定机器人的位置和静态地图中的传感器数据&#xff0c;但是tf中没有机器人的速度信息&#xff0c;所以导航功能包要求机器人 能够通过里程计信息源发布包含速度信息的里程计nav_msgs/Odometry 消息。 本篇将介绍nav_msgs/Odometry消息&#xff0c;并且通过代码…

【视觉SLAM】DM-VIO: Delayed Marginalization Visual-Inertial Odometry

L. v. Stumberg and D. Cremers, “DM-VIO: Delayed Marginalization Visual-Inertial Odometry,” in IEEE Robotics and Automation Letters, vol. 7, no. 2, pp. 1408-1415, April 2022, doi: 10.1109/LRA.2021.3140129. 论文阅读方法&#xff1a;Title&#xff0c;Abstract…

DSO(Direct Sparse Odometry)

DSO&#xff08;Direct Sparse Odometry&#xff09; 文章目录 1. 简述2. 概述3. 框架流程3.1 代码框架与数据表示3.2 VO流程 4. DSO详细介绍4.1 残差的构成与雅可比4.2 滑动窗口的维护与边缘化4.3 零空间&#xff0c;FEJ4.4 其他零散的模块和算法 5. 光度标定6. 评述7. 资料与…

SVO(SVO: fast semi-direct monocular visual odometry)

SVO2系列之深度滤波DepthFiltersvo_noteSVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;SVO 半直接视觉里程计【DepthFilter】深度滤波器【svopro】代码梳理 SVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;翻译 1、…

航迹推演

​ 做机器人底层程序的时候&#xff0c;经常用到航迹推演&#xff08;Odometry&#xff09;&#xff0c;无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计&#xff0c;另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换…

航迹推演(Odometry)

做机器人底层程序的时候&#xff0c;经常用到航迹推演&#xff08;Odometry&#xff09;&#xff0c;无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计&#xff0c;另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换。…

大数据基础编程+实验

本文仅用于分析和记录在校期间学习大数据分析课程的一点心得体会。 1、Ubuntu系统的安装和使用 本文采用Ubuntu16.04系统&#xff0c;安装系统省略&#xff0c;选择镜像后一直点击下一步 1.1 进入系统后&#xff0c;调整输入法&#xff0c;将输入法切换至中英文切换 1.2为…

Python数据库编程pymysql

Python数据库编程pymysql 一、数据库编程介绍 数据库编程就是针对数据库的操作&#xff0c;通过编写程序的方式&#xff0c;让程序做为数据库的客户端进行数据库操作。 对于MySQL的操作我们可以通过SQL语句&#xff0c;但是有很多情况下我们需要写入MySQL的数据非常多&#…

过程化SQL数据库编程

一、过程化SQL的块结构 基本的SQL是高度非过程化的语言。嵌入式SQL将SQL语句嵌入程序设计语言&#xff0c;借助高级语言的控制功能实现过程化。过程化SQL是对SQL的扩展&#xff0c;使其增加了过程化语句功能。 过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的…