Go to the documentation of this file.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 <tf2/buffer_core.h>
00031
00032 #include <ros/time.h>
00033 #include <console_bridge/console.h>
00034
00035 #include <boost/lexical_cast.hpp>
00036
00037 int main(int argc, char** argv)
00038 {
00039 uint32_t num_levels = 10;
00040 if (argc > 1)
00041 {
00042 num_levels = boost::lexical_cast<uint32_t>(argv[1]);
00043 }
00044 double time_interval = 1.0;
00045 if (argc > 2)
00046 {
00047 time_interval = boost::lexical_cast<double>(argv[2]);
00048 }
00049
00050 console_bridge::setLogLevel(console_bridge::CONSOLE_BRIDGE_LOG_INFO);
00051
00052 tf2::BufferCore bc;
00053 geometry_msgs::TransformStamped t;
00054 t.header.stamp = ros::Time(1);
00055 t.header.frame_id = "root";
00056 t.child_frame_id = "0";
00057 t.transform.translation.x = 1;
00058 t.transform.rotation.w = 1.0;
00059 bc.setTransform(t, "me");
00060 t.header.stamp = ros::Time(2);
00061 bc.setTransform(t, "me");
00062
00063 for (uint32_t i = 1; i < num_levels / 2; ++i)
00064 {
00065 for (double j = time_interval; j < 2.0 + time_interval; j += time_interval)
00066 {
00067 std::stringstream parent_ss;
00068 parent_ss << (i - 1);
00069 std::stringstream child_ss;
00070 child_ss << i;
00071
00072 t.header.stamp = ros::Time(j);
00073 t.header.frame_id = parent_ss.str();
00074 t.child_frame_id = child_ss.str();
00075 bc.setTransform(t, "me");
00076 }
00077 }
00078
00079 t.header.frame_id = "root";
00080 std::stringstream ss;
00081 ss << num_levels/2;
00082 t.header.stamp = ros::Time(1);
00083 t.child_frame_id = ss.str();
00084 bc.setTransform(t, "me");
00085 t.header.stamp = ros::Time(2);
00086 bc.setTransform(t, "me");
00087
00088 for (uint32_t i = num_levels/2 + 1; i < num_levels; ++i)
00089 {
00090 for (double j = time_interval; j < 2.0 + time_interval; j += time_interval)
00091 {
00092 std::stringstream parent_ss;
00093 parent_ss << (i - 1);
00094 std::stringstream child_ss;
00095 child_ss << i;
00096
00097 t.header.stamp = ros::Time(j);
00098 t.header.frame_id = parent_ss.str();
00099 t.child_frame_id = child_ss.str();
00100 bc.setTransform(t, "me");
00101 }
00102 }
00103
00104
00105
00106 std::string v_frame0 = boost::lexical_cast<std::string>(num_levels - 1);
00107 std::string v_frame1 = boost::lexical_cast<std::string>(num_levels/2 - 1);
00108 logInform("%s to %s", v_frame0.c_str(), v_frame1.c_str());
00109 geometry_msgs::TransformStamped out_t;
00110
00111 const uint32_t count = 1000000;
00112 logInform("Doing %d %d-level %lf-interval tests", count, num_levels, time_interval);
00113
00114 #if 01
00115 {
00116 ros::WallTime start = ros::WallTime::now();
00117 for (uint32_t i = 0; i < count; ++i)
00118 {
00119 out_t = bc.lookupTransform(v_frame1, v_frame0, ros::Time(0));
00120 }
00121 ros::WallTime end = ros::WallTime::now();
00122 ros::WallDuration dur = end - start;
00123
00124 logInform("lookupTransform at Time(0) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00125 }
00126 #endif
00127
00128 #if 01
00129 {
00130 ros::WallTime start = ros::WallTime::now();
00131 for (uint32_t i = 0; i < count; ++i)
00132 {
00133 out_t = bc.lookupTransform(v_frame1, v_frame0, ros::Time(1));
00134 }
00135 ros::WallTime end = ros::WallTime::now();
00136 ros::WallDuration dur = end - start;
00137
00138 logInform("lookupTransform at Time(1) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00139 }
00140 #endif
00141
00142 #if 01
00143 {
00144 ros::WallTime start = ros::WallTime::now();
00145 for (uint32_t i = 0; i < count; ++i)
00146 {
00147 out_t = bc.lookupTransform(v_frame1, v_frame0, ros::Time(1.5));
00148 }
00149 ros::WallTime end = ros::WallTime::now();
00150 ros::WallDuration dur = end - start;
00151
00152 logInform("lookupTransform at Time(1.5) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00153 }
00154 #endif
00155
00156 #if 01
00157 {
00158 ros::WallTime start = ros::WallTime::now();
00159 for (uint32_t i = 0; i < count; ++i)
00160 {
00161 out_t = bc.lookupTransform(v_frame1, v_frame0, ros::Time(2));
00162 }
00163 ros::WallTime end = ros::WallTime::now();
00164 ros::WallDuration dur = end - start;
00165
00166 logInform("lookupTransform at Time(2) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00167 }
00168 #endif
00169
00170 #if 01
00171 {
00172 ros::WallTime start = ros::WallTime::now();
00173 for (uint32_t i = 0; i < count; ++i)
00174 {
00175 bc.canTransform(v_frame1, v_frame0, ros::Time(0));
00176 }
00177 ros::WallTime end = ros::WallTime::now();
00178 ros::WallDuration dur = end - start;
00179
00180 logInform("canTransform at Time(0) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00181 }
00182 #endif
00183
00184 #if 01
00185 {
00186 ros::WallTime start = ros::WallTime::now();
00187 for (uint32_t i = 0; i < count; ++i)
00188 {
00189 bc.canTransform(v_frame1, v_frame0, ros::Time(1));
00190 }
00191 ros::WallTime end = ros::WallTime::now();
00192 ros::WallDuration dur = end - start;
00193
00194 logInform("canTransform at Time(1) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00195 }
00196 #endif
00197
00198 #if 01
00199 {
00200 ros::WallTime start = ros::WallTime::now();
00201 for (uint32_t i = 0; i < count; ++i)
00202 {
00203 bc.canTransform(v_frame1, v_frame0, ros::Time(1.5));
00204 }
00205 ros::WallTime end = ros::WallTime::now();
00206 ros::WallDuration dur = end - start;
00207
00208 logInform("canTransform at Time(1.5) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00209 }
00210 #endif
00211
00212 #if 01
00213 {
00214 ros::WallTime start = ros::WallTime::now();
00215 for (uint32_t i = 0; i < count; ++i)
00216 {
00217 bc.canTransform(v_frame1, v_frame0, ros::Time(2));
00218 }
00219 ros::WallTime end = ros::WallTime::now();
00220 ros::WallDuration dur = end - start;
00221
00222 logInform("canTransform at Time(2) took %f for an average of %.9f", dur.toSec(), dur.toSec() / (double)count);
00223 }
00224 #endif
00225 }