ROS里程计:navigation/Tutorials/RobotSetup/Odom
通过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

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


被折叠的 条评论
为什么被折叠?



