tf2_ros::Buffer::canTransform() 为现有转换返回 False
tf2_ros::Buffer::canTransform() returning False for existing transformation
我正在编写一个包,除其他外,它需要从 /base_laser
框架转换为(世界)/odom
框架。两个框架都存在,rosrun tf tf_echo /odom /base_laser
returns 正确的变换值。当我尝试在我的节点中使用 TransformListener
进行转换时出现问题;在这种情况下,canTransform()
总是 returns 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 旋律
欢迎任何帮助。
我终于找到了原因:husky_simulator
代码使用 tf
而我试图使用 tf2
进行转换;一旦我切换到 tf
,就找到了转换。
我正在编写一个包,除其他外,它需要从 /base_laser
框架转换为(世界)/odom
框架。两个框架都存在,rosrun tf tf_echo /odom /base_laser
returns 正确的变换值。当我尝试在我的节点中使用 TransformListener
进行转换时出现问题;在这种情况下,canTransform()
总是 returns 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 旋律欢迎任何帮助。
我终于找到了原因:husky_simulator
代码使用 tf
而我试图使用 tf2
进行转换;一旦我切换到 tf
,就找到了转换。