tf2_ros :: Buffer :: canTransform()对于现有转换返回False

时间:2019-03-28 20:21:05

标签: c++ ros

我正在编写一个程序包,除其他外,该程序包需要从/base_laser框架转换为(世界)/odom框架。两个帧都存在,并且rosrun tf tf_echo /odom /base_laser返回正确的变换值。当我尝试在节点中使用TransformListener进行转换时,会出现问题。在这种情况下,canTransform()总是返回false

该代码是使用husky_simulator软件包进行测试的一部分,以获取激光测量结果和环境。

这是代码的相关部分:

tf2_ros::Buffer tfBuffer;
tf2_ros::TransformListener tfListener(tfBuffer);

geometry_msgs::TransformStamped transformStamped;

try
{
    ros::Time now = ros::Time::now();
    if (tfBuffer.canTransform("odom",
                              "base_laser",
                              now,
                              ros::Duration(0.01)))
    {
        transformStamped = tfBuffer.lookupTransform("odom",
                                                    "base_laser",
                                                    now);
        ROS_INFO("canTransform: TRUE");
        ROS_INFO("Transform: [%.2f, %.2f, %.2f]",
                 transformStamped.transform.translation.x,
                 transformStamped.transform.translation.y,
                 transformStamped.transform.translation.z);
    }
    else
    {
        ROS_INFO("canTransform: FALSE");
    }
}
catch (tf2::TransformException &ex)
{
    ROS_WARN("%s", ex.what());
    ros::Duration(1);
}

启动节点时,输出显示以下内容:

[ INFO] [1553804232.701323614, 0.176000000]: canTransform: FALSE
[ INFO] [1553804232.736923460, 0.207000000]: canTransform: FALSE
[ INFO] [1553804232.813116964, 0.275000000]: canTransform: FALSE   
[ INFO] [1553804232.856465945, 0.311000000]: canTransform: FALSE
[ INFO] [1553804232.923821528, 0.365000000]: canTransform: FALSE
[ INFO] [1553804233.977405692, 0.397000000]: canTransform: FALSE

并保持这种方式,而不返回true

此代码在一个函数内部,该函数从节点主函数定期调用。其他一切都按预期工作。

在Ubuntu 18.04中运行ROS Melodic

欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

我终于发现发生了什么:husky_simulator代码使用tf,而我试图使用tf2进行转换。一旦我切换到tf,就发现了转换。