如何确定ROS机器人是前进还是后退?
问题描述:
ROS提供了一个odometry消息,该消息告诉我关于xy平面的以下内容。如何确定ROS机器人是前进还是后退?
- 机器人速度的x分量(m/sec)。
- 机器人速度的y分量(m/sec)。
- 机器人的表示为四元数(Z和W分量以弧度表示)的角度取向
ROS提供了下列额外的C++库
四元数API: http://docs.ros.org/jade/api/tf/html/c++/classtf_1_1Quaternion.html
矢量3 API:http://docs.ros.org/jade/api/tf/html/c++/classtf_1_1Vector3.html
我有一个不雅的巨人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
当我发布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速度的迹象是不够的。我需要知道它面对的是哪种方式。 –