00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <gtest/gtest.h>
00031 #include <tf2/buffer_core.h>
00032 #include "tf2/exceptions.h"
00033 #include <tf2_ros/static_transform_broadcaster.h>
00034 #include <sys/time.h>
00035 #include <ros/ros.h>
00036 #include "rostest/permuter.h"
00037
00038 #include "tf2_ros/transform_listener.h"
00039
00040 TEST(StaticTransformPublisher, a_b_different_times)
00041 {
00042 tf2_ros::Buffer mB;
00043 tf2_ros::TransformListener tfl(mB);
00044 EXPECT_TRUE(mB.canTransform("a", "b", ros::Time(), ros::Duration(1.0)));
00045 EXPECT_TRUE(mB.canTransform("a", "b", ros::Time(100), ros::Duration(1.0)));
00046 EXPECT_TRUE(mB.canTransform("a", "b", ros::Time(1000), ros::Duration(1.0)));
00047 };
00048
00049 TEST(StaticTransformPublisher, a_c_different_times)
00050 {
00051 tf2_ros::Buffer mB;
00052 tf2_ros::TransformListener tfl(mB);
00053 EXPECT_TRUE(mB.canTransform("a", "c", ros::Time(), ros::Duration(1.0)));
00054 EXPECT_TRUE(mB.canTransform("a", "c", ros::Time(100), ros::Duration(1.0)));
00055 EXPECT_TRUE(mB.canTransform("a", "c", ros::Time(1000), ros::Duration(1.0)));
00056 };
00057
00058 TEST(StaticTransformPublisher, a_d_different_times)
00059 {
00060 tf2_ros::Buffer mB;
00061 tf2_ros::TransformListener tfl(mB);
00062 geometry_msgs::TransformStamped ts;
00063 ts.transform.rotation.w = 1;
00064 ts.header.frame_id = "c";
00065 ts.header.stamp = ros::Time(10.0);
00066 ts.child_frame_id = "d";
00067
00068
00069 EXPECT_TRUE(mB.canTransform("a", "c", ros::Time(), ros::Duration(1.0)));
00070 EXPECT_TRUE(mB.canTransform("a", "c", ros::Time(100), ros::Duration(1.0)));
00071 EXPECT_TRUE(mB.canTransform("a", "c", ros::Time(1000), ros::Duration(1.0)));
00072
00073 mB.setTransform(ts, "authority");
00074
00075 EXPECT_TRUE(mB.canTransform("c", "d", ros::Time(10), ros::Duration(0)));
00076
00077 EXPECT_TRUE(mB.canTransform("a", "d", ros::Time(), ros::Duration(0)));
00078 EXPECT_FALSE(mB.canTransform("a", "d", ros::Time(1), ros::Duration(0)));
00079 EXPECT_TRUE(mB.canTransform("a", "d", ros::Time(10), ros::Duration(0)));
00080 EXPECT_FALSE(mB.canTransform("a", "d", ros::Time(100), ros::Duration(0)));
00081 };
00082
00083 TEST(StaticTransformPublisher, multiple_parent_test)
00084 {
00085 tf2_ros::Buffer mB;
00086 tf2_ros::TransformListener tfl(mB);
00087 tf2_ros::StaticTransformBroadcaster stb;
00088 geometry_msgs::TransformStamped ts;
00089 ts.transform.rotation.w = 1;
00090 ts.header.frame_id = "c";
00091 ts.header.stamp = ros::Time(10.0);
00092 ts.child_frame_id = "d";
00093
00094 stb.sendTransform(ts);
00095
00096
00097 EXPECT_TRUE(mB.canTransform("a", "d", ros::Time(), ros::Duration(1.0)));
00098 EXPECT_TRUE(mB.canTransform("a", "d", ros::Time(100), ros::Duration(1.0)));
00099 EXPECT_TRUE(mB.canTransform("a", "d", ros::Time(1000), ros::Duration(1.0)));
00100
00101
00102 ts.header.frame_id = "new_parent";
00103 stb.sendTransform(ts);
00104 ts.child_frame_id = "other_child";
00105 stb.sendTransform(ts);
00106 ts.child_frame_id = "other_child2";
00107 stb.sendTransform(ts);
00108
00109 EXPECT_TRUE(mB.canTransform("new_parent", "d", ros::Time(), ros::Duration(1.0)));
00110 EXPECT_TRUE(mB.canTransform("new_parent", "other_child", ros::Time(), ros::Duration(1.0)));
00111 EXPECT_TRUE(mB.canTransform("new_parent", "other_child2", ros::Time(), ros::Duration(1.0)));
00112 EXPECT_FALSE(mB.canTransform("a", "d", ros::Time(), ros::Duration(1.0)));
00113 };
00114
00115 TEST(StaticTransformPublisher, tf_from_param_server_valid)
00116 {
00117
00118 tf2_ros::Buffer mB;
00119 tf2_ros::TransformListener tfl(mB);
00120 EXPECT_TRUE(mB.canTransform("robot_calibration", "world", ros::Time(), ros::Duration(1.0)));
00121 EXPECT_TRUE(mB.canTransform("robot_calibration", "world", ros::Time(100), ros::Duration(1.0)));
00122 EXPECT_TRUE(mB.canTransform("robot_calibration", "world", ros::Time(1000), ros::Duration(1.0)));
00123 }
00124
00125 int main(int argc, char **argv){
00126 testing::InitGoogleTest(&argc, argv);
00127 ros::init(argc, argv, "tf_unittest");
00128 return RUN_ALL_TESTS();
00129 }