如何确定ROS机器人是前进还是后退?

问题描述:

ROS提供了一个odometry消息,该消息告诉我关于xy平面的以下内容。如何确定ROS机器人是前进还是后退?

  • 机器人速度的x分量(m/sec)。
  • 机器人速度的y分量(m/sec)。
  • 机器人的表示为四元数(Z和W分量以弧度表示)的角度取向

ROS提供了下列额外的C++库

我有一个不雅的巨人if语句,它使用机器人面对的象限以及x和y分量的方向。我宁愿学习如何利用四元数。

我没有看到需要在这里使用四元数。问题似乎更简单。

nav_msgs/Odometry:“此消息中的扭曲应该在由child_frame_id给出的坐标框架中指定”。

所以扭曲表示相对于child_frame_id的速度(线性和角度)。在大多数机器人设置中,child_frame_id将是固定在机器人上的坐标系,例如“base_link”。因此,在扭曲的速度相对于固定在机器人上的框定的 - 你可以简单地检查是否在twist.linear矢量朝向正半面指指点点,像:

if (odom_msg.twist.linear.x >= 0.0 && odom_msg.twist.linear.y >= 0.0) 
    // robot going forward 
+0

当我发布cmd_vel要求线速度为0.2m/s和z角速度为0.2弧度/秒的信息,机器人以圆形行进。 odometry框架具有odom的frame_id和base_link的child_frame_id。当机器人面向0度时,x和y速度为(2.0,0.0)。在45度(0.15,0.15),在90度(0.0,2.0),135度(-0.15,0.15),在180(-0.20,0.0)。如果我以180°的角度接收(-2.0,0)的x/y速度,它会前进。如果角度为0,则它​​向后。 x和y速度的迹象是不够的。我需要知道它面对的是哪种方式。 –