ROS里程计:navigation/Tutorials/RobotSetup/Odom

本教程指导初学者通过ROS发布nav_msgs/Odometry消息,展示如何从odom坐标系到base_link坐标系进行速度转换。通过实例代码演示机器人绕圈运动的测距与定位技术。

通过ROS发布里程表信息

描述:本教程提供了一个发布导航堆栈的里程表信息的示例。它涵盖了通过ROS发布nav_msgs / Odometry消息,以及通过 tf 从“ odom”坐标系到“ base_link”坐标系的转换。

教程级别:初学者

1、通过ROS发布里程表信息

导航堆栈使用tf确定机器人在世界上的位置,并将传感器数据与静态地图相关联。但是,tf没有提供有关机器人速度的任何信息。因此,导航堆栈要求所有测距源都通过包含速度信息的ROS发布转换和nav_msgs / Odometry消息。本教程介绍了nav_msgs / Odometry消息,并提供了示例代码,用于发布消息并分别通过ROS和tf进行转换。

目录
通过 ROS 发布里程表信息
nav_msgs / Odometry 消息
使用 tf 发布 Odometry 转换
编写代码

2、nav_msgs / Odometry消息

所述nav_msgs /里程计信息存储在自由空间中的机器人的位置和速度的估计值:

#表示对自由空间中的位置和速度的估计。  
#此消息中的姿势应在header.frame_id给定的坐标系中指定。
#此消息中的扭曲应在child_frame_id给定的坐标系中指定
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist

此消息中的姿势对应于机器人在里程表中的估计位置,以及用于确定该姿势估计值的可选协方差。该消息中的扭曲对应于机器人在子框架(通常是移动基座的坐标框架)中的速度,以及用于确定该速度估计值的可选协方差。

3、使用tf发布Odometry转换

正如“转换配置”教程中讨论的那样,“ tf ”软件库负责管理与转换树中与机器人相关的坐标系之间的关系。因此,任何里程表源都必须发布有关其管理的坐标系的信息。下面的代码假定您具有tf的基本知识,阅读Transform Configuration教程就足够了。

4、编写代码

在本节中,我们将编写一些示例代码,这些代码用于通过ROS发布nav_msgs / Odometry消息,以及使用tf对仅绕圈行驶的假机器人进行转换。我们将首先完整地显示代码,并在下面逐条进行说明。

将依赖项添加到包的manifest.xml中

<depend package =“ tf” />
<depend package =“ nav_msgs” />

切换行号显示

#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <nav_msgs/Odometry.h>

int main(int argc, char** argv){
   
   
  ros::init(argc, argv, "odometry_publisher");

  ros::NodeHandle n;
  ros::Publisher odom_pub = n.advertise<nav_msgs::Odometry>("odom", 50);
  tf::TransformBroadcaster odom_broadcaster;

  double x = 0.0;
  double y = 0.0;
  double th = 0.0;

  double vx = 0.1;
  double vy = -0.1;
  double vth = 0.1;

  ros::Time current_time, last_time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值