00001
00002 #ifndef VISP_TRACKER_MESSAGE_MOVINGEDGESETTINGS_H
00003 #define VISP_TRACKER_MESSAGE_MOVINGEDGESETTINGS_H
00004 #include <string>
00005 #include <vector>
00006 #include <map>
00007 #include <ostream>
00008 #include "ros/serialization.h"
00009 #include "ros/builtin_message_traits.h"
00010 #include "ros/message_operations.h"
00011 #include "ros/time.h"
00012
00013 #include "ros/macros.h"
00014
00015 #include "ros/assert.h"
00016
00017
00018 namespace visp_tracker
00019 {
00020 template <class ContainerAllocator>
00021 struct MovingEdgeSettings_ {
00022 typedef MovingEdgeSettings_<ContainerAllocator> Type;
00023
00024 MovingEdgeSettings_()
00025 : mask_size(0)
00026 , n_mask(0)
00027 , range(0)
00028 , threshold(0.0)
00029 , mu1(0.0)
00030 , mu2(0.0)
00031 , sample_step(0)
00032 , ntotal_sample(0)
00033 , strip(0)
00034 , min_samplestep(0.0)
00035 , aberration(0.0)
00036 , init_aberration(0.0)
00037 , lambda(0.0)
00038 , first_threshold(0.0)
00039 {
00040 }
00041
00042 MovingEdgeSettings_(const ContainerAllocator& _alloc)
00043 : mask_size(0)
00044 , n_mask(0)
00045 , range(0)
00046 , threshold(0.0)
00047 , mu1(0.0)
00048 , mu2(0.0)
00049 , sample_step(0)
00050 , ntotal_sample(0)
00051 , strip(0)
00052 , min_samplestep(0.0)
00053 , aberration(0.0)
00054 , init_aberration(0.0)
00055 , lambda(0.0)
00056 , first_threshold(0.0)
00057 {
00058 }
00059
00060 typedef int64_t _mask_size_type;
00061 int64_t mask_size;
00062
00063 typedef int64_t _n_mask_type;
00064 int64_t n_mask;
00065
00066 typedef int64_t _range_type;
00067 int64_t range;
00068
00069 typedef double _threshold_type;
00070 double threshold;
00071
00072 typedef double _mu1_type;
00073 double mu1;
00074
00075 typedef double _mu2_type;
00076 double mu2;
00077
00078 typedef int64_t _sample_step_type;
00079 int64_t sample_step;
00080
00081 typedef int64_t _ntotal_sample_type;
00082 int64_t ntotal_sample;
00083
00084 typedef int64_t _strip_type;
00085 int64_t strip;
00086
00087 typedef double _min_samplestep_type;
00088 double min_samplestep;
00089
00090 typedef double _aberration_type;
00091 double aberration;
00092
00093 typedef double _init_aberration_type;
00094 double init_aberration;
00095
00096 typedef double _lambda_type;
00097 double lambda;
00098
00099 typedef double _first_threshold_type;
00100 double first_threshold;
00101
00102
00103 typedef boost::shared_ptr< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> > Ptr;
00104 typedef boost::shared_ptr< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> const> ConstPtr;
00105 boost::shared_ptr<std::map<std::string, std::string> > __connection_header;
00106 };
00107 typedef ::visp_tracker::MovingEdgeSettings_<std::allocator<void> > MovingEdgeSettings;
00108
00109 typedef boost::shared_ptr< ::visp_tracker::MovingEdgeSettings> MovingEdgeSettingsPtr;
00110 typedef boost::shared_ptr< ::visp_tracker::MovingEdgeSettings const> MovingEdgeSettingsConstPtr;
00111
00112
00113 template<typename ContainerAllocator>
00114 std::ostream& operator<<(std::ostream& s, const ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> & v)
00115 {
00116 ros::message_operations::Printer< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> >::stream(s, "", v);
00117 return s;}
00118
00119 }
00120
00121 namespace ros
00122 {
00123 namespace message_traits
00124 {
00125 template<class ContainerAllocator> struct IsMessage< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> > : public TrueType {};
00126 template<class ContainerAllocator> struct IsMessage< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> const> : public TrueType {};
00127 template<class ContainerAllocator>
00128 struct MD5Sum< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> > {
00129 static const char* value()
00130 {
00131 return "376fefab194f3282c421288b8a099b76";
00132 }
00133
00134 static const char* value(const ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> &) { return value(); }
00135 static const uint64_t static_value1 = 0x376fefab194f3282ULL;
00136 static const uint64_t static_value2 = 0xc421288b8a099b76ULL;
00137 };
00138
00139 template<class ContainerAllocator>
00140 struct DataType< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> > {
00141 static const char* value()
00142 {
00143 return "visp_tracker/MovingEdgeSettings";
00144 }
00145
00146 static const char* value(const ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> &) { return value(); }
00147 };
00148
00149 template<class ContainerAllocator>
00150 struct Definition< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> > {
00151 static const char* value()
00152 {
00153 return "# This message contains tracking parameters.\n\
00154 #\n\
00155 # These parameters determine how precise, how fast and how\n\
00156 # reliable will be the tracking.\n\
00157 #\n\
00158 # It should be tuned carefully and can be changed dynamically.\n\
00159 #\n\
00160 # For more details, see the ViSP documentation:\n\
00161 # http://www.irisa.fr/lagadic/visp/publication.html\n\
00162 \n\
00163 \n\
00164 # Moving edge parameters.\n\
00165 \n\
00166 int64 mask_size # Mask size (in pixel) used to compute the image gradient\n\
00167 # and determine the object contour.\n\
00168 # A larger mask size is better for larger images.\n\
00169 # 3 pixels is enough for 640x480 images.\n\
00170 # Increasing this value makes the tracking slower.\n\
00171 #\n\
00172 # Caution: this value cannot be changed dynamically\n\
00173 # without resetting the tracking.\n\
00174 \n\
00175 int64 n_mask # Number of masks applied to determine the object contour.\n\
00176 # Increasing this value makes the tracking slower.\n\
00177 \n\
00178 int64 range # Maximum seek distance on both sides of the reference pixel.\n\
00179 # It should match the maximum distance in pixel between\n\
00180 # the current position of the feature projection and\n\
00181 # its next position.\n\
00182 # I.e. if the object moves fast and your tracking\n\
00183 # frequency is low, this value should be increased.\n\
00184 # Increasing this value makes the tracking slower.\n\
00185 \n\
00186 float64 threshold # Value used to determine if a moving edge is valid\n\
00187 # or not.\n\
00188 \n\
00189 float64 mu1 # Minimum image contrast allowed to detect a contour.\n\
00190 float64 mu2 # Maximum image contrast allowed to detect a contour.\n\
00191 \n\
00192 int64 sample_step # Minimum distance in pixel between two\n\
00193 # discretization points.\n\
00194 # It avoids having too many discretization points when\n\
00195 # the tracked object is far away (and its projection\n\
00196 # in the image is small).\n\
00197 # Increasing this value makes the tracking *faster*.\n\
00198 \n\
00199 int64 ntotal_sample # How many discretization points are used to track the\n\
00200 # feature.\n\
00201 # Higher is better but slow down the tracking.\n\
00202 # The best value depends on your model and its distance\n\
00203 # with respect to the camera.\n\
00204 # Increasing this value makes the tracking slower.\n\
00205 \n\
00206 int64 strip # How many pixels are ignored around the borders.\n\
00207 float64 min_samplestep # Minimum allowed samplestep. Useful to specify\n\
00208 # a lower bound when the samplestep is changed\n\
00209 # dynamically.\n\
00210 # This is not done by visp_tracker currently.\n\
00211 float64 aberration # Ignored.\n\
00212 float64 init_aberration # Ignored.\n\
00213 \n\
00214 \n\
00215 # Tracker parameters.\n\
00216 \n\
00217 float64 lambda # Gain used to compute the control law.\n\
00218 float64 first_threshold # What proportion of points should be valid to\n\
00219 # acccept an initial pose.\n\
00220 # Value should be between 0 et 1.\n\
00221 \n\
00222 \n\
00223 ";
00224 }
00225
00226 static const char* value(const ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> &) { return value(); }
00227 };
00228
00229 template<class ContainerAllocator> struct IsFixedSize< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> > : public TrueType {};
00230 }
00231 }
00232
00233 namespace ros
00234 {
00235 namespace serialization
00236 {
00237
00238 template<class ContainerAllocator> struct Serializer< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> >
00239 {
00240 template<typename Stream, typename T> inline static void allInOne(Stream& stream, T m)
00241 {
00242 stream.next(m.mask_size);
00243 stream.next(m.n_mask);
00244 stream.next(m.range);
00245 stream.next(m.threshold);
00246 stream.next(m.mu1);
00247 stream.next(m.mu2);
00248 stream.next(m.sample_step);
00249 stream.next(m.ntotal_sample);
00250 stream.next(m.strip);
00251 stream.next(m.min_samplestep);
00252 stream.next(m.aberration);
00253 stream.next(m.init_aberration);
00254 stream.next(m.lambda);
00255 stream.next(m.first_threshold);
00256 }
00257
00258 ROS_DECLARE_ALLINONE_SERIALIZER;
00259 };
00260 }
00261 }
00262
00263 namespace ros
00264 {
00265 namespace message_operations
00266 {
00267
00268 template<class ContainerAllocator>
00269 struct Printer< ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> >
00270 {
00271 template<typename Stream> static void stream(Stream& s, const std::string& indent, const ::visp_tracker::MovingEdgeSettings_<ContainerAllocator> & v)
00272 {
00273 s << indent << "mask_size: ";
00274 Printer<int64_t>::stream(s, indent + " ", v.mask_size);
00275 s << indent << "n_mask: ";
00276 Printer<int64_t>::stream(s, indent + " ", v.n_mask);
00277 s << indent << "range: ";
00278 Printer<int64_t>::stream(s, indent + " ", v.range);
00279 s << indent << "threshold: ";
00280 Printer<double>::stream(s, indent + " ", v.threshold);
00281 s << indent << "mu1: ";
00282 Printer<double>::stream(s, indent + " ", v.mu1);
00283 s << indent << "mu2: ";
00284 Printer<double>::stream(s, indent + " ", v.mu2);
00285 s << indent << "sample_step: ";
00286 Printer<int64_t>::stream(s, indent + " ", v.sample_step);
00287 s << indent << "ntotal_sample: ";
00288 Printer<int64_t>::stream(s, indent + " ", v.ntotal_sample);
00289 s << indent << "strip: ";
00290 Printer<int64_t>::stream(s, indent + " ", v.strip);
00291 s << indent << "min_samplestep: ";
00292 Printer<double>::stream(s, indent + " ", v.min_samplestep);
00293 s << indent << "aberration: ";
00294 Printer<double>::stream(s, indent + " ", v.aberration);
00295 s << indent << "init_aberration: ";
00296 Printer<double>::stream(s, indent + " ", v.init_aberration);
00297 s << indent << "lambda: ";
00298 Printer<double>::stream(s, indent + " ", v.lambda);
00299 s << indent << "first_threshold: ";
00300 Printer<double>::stream(s, indent + " ", v.first_threshold);
00301 }
00302 };
00303
00304
00305 }
00306 }
00307
00308 #endif // VISP_TRACKER_MESSAGE_MOVINGEDGESETTINGS_H
00309