六 tf / Tutorials / Time travel with tf (C++)

原文地址:http://wiki.ros.org/tf/Tutorials/Time travel with tf (C%2B%2B)

Time travel with tf (C++)

描述:本教程将向您介绍tf的高级time travel特性
在前面的教程中,我们讨论了tf和time的基本概念。本教程将更进一步,并公开最强大的tf技巧之一。

1 Time travel

让我们回到上一个教程结束的地方。到您的包中获取教程:

  $ roscd learning_tf

打开文件src/turtle_tf_listener.cpp。看到第25-30行:

  try{
    ros::Time now = ros::Time::now();
    listener.waitForTransform("/turtle2", "/turtle1",
                              now, ros::Duration(1.0));
    listener.lookupTransform("/turtle2", "/turtle1",
                             now, transform);

现在,不要让turtle2去turtle1所在的地方,而是让turtle2去5秒前turtle1所在的地方:

  try{
    ros::Time past = ros::Time::now() - ros::Duration(5.0);
    listener.waitForTransform("/turtle2", "/turtle1",
                              past, ros::Duration(1.0));
    listener.lookupTransform("/turtle2", "/turtle1",
                             past, transform);

所以现在,如果你运行这个,你会期待看到什么?当然,在前5秒内,turtle2不知道去哪里,因为我们还没有turtle1的5秒历史。但是5秒钟之后呢?让我们试试看:

  $ make  or  catkin_make
  $ roslaunch learning_tf start_demo.launch

在这里插入图片描述
你的turtle是不是像截图中那样无法控制地四处游荡?那么发生了什么?
.我们问tf,“5秒前/turtle1的相对5秒前/turtle2的姿势是什么?”这意味着,我们正在根据5秒前turtle2的位置以及5秒前turtle1的位置来控制turtle2。
.我们真正想问的是,“相对于/turtle2的当前位置,turtle1 5秒之前的位姿是什么?”。

2 Advanced API for lookupTransform

那么我们怎样才能问tf这样的问题呢?这个API使我们能够在transform每个frame时明确地说出来。这就是代码的样子:

  try{
    ros::Time now = ros::Time::now();
    ros::Time past = now - ros::Duration(5.0);
    listener.waitForTransform("/turtle2", now,
                              "/turtle1", past,
                              "/world", ros::Duration(1.0));
    listener.lookupTransform("/turtle2", now,
                             "/turtle1", past,
                             "/world", transform);

用于lookupTransform()的高级API具有六个arguments:
(1) Give the transform from this frame,
(2) at this time …
(3) … to this frame,
(4) at this time.
(5) Specify the frame that does not change over time, in this case the “/world” frame, and
(6) the variable to store the result in.
注意,waitForTransform()还具有基本的和高级的API,就像lookupTransform()一样。
在这里插入图片描述
该图显示了tf在后台做什么。在过去,它计算从turtle1到world的转变。在world frame内,时间从过去到现在。现在tf计算从world到turtle2的transform。

3 Checking the results

让我们再次运行模拟器,这次使用高级time-travel API:

  $ make  or catkin_make
  $ roslaunch learning_tf start_demo.launch

是的,turtle2被引导到5秒前turtle1的位置!

扫描二维码关注公众号,回复: 5817487 查看本文章

猜你喜欢

转载自blog.csdn.net/llz56/article/details/85243702
tf