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

10 篇文章 1 订阅
4 篇文章 0 订阅

目录

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

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

  • 13
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值