2017-10-17 76 views
1

ROS提供了一個odometry消息,該消息告訴我關於xy平面的以下內容。如何確定ROS機器人是前進還是後退?

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

ROS提供了下列額外的C++庫

我有一個不雅的巨人if語句,它使用機器人面對的象限以及x和y分量的方向。我寧願學習如何利用四元數。

回答

0

我沒有看到需要在這裏使用四元數。問題似乎更簡單。

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速度的跡象是不夠的。我需要知道它面對的是哪種方式。 –

相關問題