00001
00002 #ifndef ASCTEC_MSGS_MESSAGE_IMUCALCDATA_H
00003 #define ASCTEC_MSGS_MESSAGE_IMUCALCDATA_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 #include "std_msgs/Header.h"
00018
00019 namespace asctec_msgs
00020 {
00021 template <class ContainerAllocator>
00022 struct IMUCalcData_ {
00023 typedef IMUCalcData_<ContainerAllocator> Type;
00024
00025 IMUCalcData_()
00026 : header()
00027 , angle_nick(0)
00028 , angle_roll(0)
00029 , angle_yaw(0)
00030 , angvel_nick(0)
00031 , angvel_roll(0)
00032 , angvel_yaw(0)
00033 , acc_x_calib(0)
00034 , acc_y_calib(0)
00035 , acc_z_calib(0)
00036 , acc_x(0)
00037 , acc_y(0)
00038 , acc_z(0)
00039 , acc_angle_nick(0)
00040 , acc_angle_roll(0)
00041 , acc_absolute_value(0)
00042 , Hx(0)
00043 , Hy(0)
00044 , Hz(0)
00045 , mag_heading(0)
00046 , speed_x(0)
00047 , speed_y(0)
00048 , speed_z(0)
00049 , height(0)
00050 , dheight(0)
00051 , dheight_reference(0)
00052 , height_reference(0)
00053 {
00054 }
00055
00056 IMUCalcData_(const ContainerAllocator& _alloc)
00057 : header(_alloc)
00058 , angle_nick(0)
00059 , angle_roll(0)
00060 , angle_yaw(0)
00061 , angvel_nick(0)
00062 , angvel_roll(0)
00063 , angvel_yaw(0)
00064 , acc_x_calib(0)
00065 , acc_y_calib(0)
00066 , acc_z_calib(0)
00067 , acc_x(0)
00068 , acc_y(0)
00069 , acc_z(0)
00070 , acc_angle_nick(0)
00071 , acc_angle_roll(0)
00072 , acc_absolute_value(0)
00073 , Hx(0)
00074 , Hy(0)
00075 , Hz(0)
00076 , mag_heading(0)
00077 , speed_x(0)
00078 , speed_y(0)
00079 , speed_z(0)
00080 , height(0)
00081 , dheight(0)
00082 , dheight_reference(0)
00083 , height_reference(0)
00084 {
00085 }
00086
00087 typedef ::std_msgs::Header_<ContainerAllocator> _header_type;
00088 ::std_msgs::Header_<ContainerAllocator> header;
00089
00090 typedef int32_t _angle_nick_type;
00091 int32_t angle_nick;
00092
00093 typedef int32_t _angle_roll_type;
00094 int32_t angle_roll;
00095
00096 typedef int32_t _angle_yaw_type;
00097 int32_t angle_yaw;
00098
00099 typedef int32_t _angvel_nick_type;
00100 int32_t angvel_nick;
00101
00102 typedef int32_t _angvel_roll_type;
00103 int32_t angvel_roll;
00104
00105 typedef int32_t _angvel_yaw_type;
00106 int32_t angvel_yaw;
00107
00108 typedef int16_t _acc_x_calib_type;
00109 int16_t acc_x_calib;
00110
00111 typedef int16_t _acc_y_calib_type;
00112 int16_t acc_y_calib;
00113
00114 typedef int16_t _acc_z_calib_type;
00115 int16_t acc_z_calib;
00116
00117 typedef int16_t _acc_x_type;
00118 int16_t acc_x;
00119
00120 typedef int16_t _acc_y_type;
00121 int16_t acc_y;
00122
00123 typedef int16_t _acc_z_type;
00124 int16_t acc_z;
00125
00126 typedef int32_t _acc_angle_nick_type;
00127 int32_t acc_angle_nick;
00128
00129 typedef int32_t _acc_angle_roll_type;
00130 int32_t acc_angle_roll;
00131
00132 typedef int32_t _acc_absolute_value_type;
00133 int32_t acc_absolute_value;
00134
00135 typedef int32_t _Hx_type;
00136 int32_t Hx;
00137
00138 typedef int32_t _Hy_type;
00139 int32_t Hy;
00140
00141 typedef int32_t _Hz_type;
00142 int32_t Hz;
00143
00144 typedef int32_t _mag_heading_type;
00145 int32_t mag_heading;
00146
00147 typedef int32_t _speed_x_type;
00148 int32_t speed_x;
00149
00150 typedef int32_t _speed_y_type;
00151 int32_t speed_y;
00152
00153 typedef int32_t _speed_z_type;
00154 int32_t speed_z;
00155
00156 typedef int32_t _height_type;
00157 int32_t height;
00158
00159 typedef int32_t _dheight_type;
00160 int32_t dheight;
00161
00162 typedef int32_t _dheight_reference_type;
00163 int32_t dheight_reference;
00164
00165 typedef int32_t _height_reference_type;
00166 int32_t height_reference;
00167
00168
00169 typedef boost::shared_ptr< ::asctec_msgs::IMUCalcData_<ContainerAllocator> > Ptr;
00170 typedef boost::shared_ptr< ::asctec_msgs::IMUCalcData_<ContainerAllocator> const> ConstPtr;
00171 boost::shared_ptr<std::map<std::string, std::string> > __connection_header;
00172 };
00173 typedef ::asctec_msgs::IMUCalcData_<std::allocator<void> > IMUCalcData;
00174
00175 typedef boost::shared_ptr< ::asctec_msgs::IMUCalcData> IMUCalcDataPtr;
00176 typedef boost::shared_ptr< ::asctec_msgs::IMUCalcData const> IMUCalcDataConstPtr;
00177
00178
00179 template<typename ContainerAllocator>
00180 std::ostream& operator<<(std::ostream& s, const ::asctec_msgs::IMUCalcData_<ContainerAllocator> & v)
00181 {
00182 ros::message_operations::Printer< ::asctec_msgs::IMUCalcData_<ContainerAllocator> >::stream(s, "", v);
00183 return s;}
00184
00185 }
00186
00187 namespace ros
00188 {
00189 namespace message_traits
00190 {
00191 template<class ContainerAllocator> struct IsMessage< ::asctec_msgs::IMUCalcData_<ContainerAllocator> > : public TrueType {};
00192 template<class ContainerAllocator> struct IsMessage< ::asctec_msgs::IMUCalcData_<ContainerAllocator> const> : public TrueType {};
00193 template<class ContainerAllocator>
00194 struct MD5Sum< ::asctec_msgs::IMUCalcData_<ContainerAllocator> > {
00195 static const char* value()
00196 {
00197 return "69fa9ec7b73af705eabe7dcbfd39ac85";
00198 }
00199
00200 static const char* value(const ::asctec_msgs::IMUCalcData_<ContainerAllocator> &) { return value(); }
00201 static const uint64_t static_value1 = 0x69fa9ec7b73af705ULL;
00202 static const uint64_t static_value2 = 0xeabe7dcbfd39ac85ULL;
00203 };
00204
00205 template<class ContainerAllocator>
00206 struct DataType< ::asctec_msgs::IMUCalcData_<ContainerAllocator> > {
00207 static const char* value()
00208 {
00209 return "asctec_msgs/IMUCalcData";
00210 }
00211
00212 static const char* value(const ::asctec_msgs::IMUCalcData_<ContainerAllocator> &) { return value(); }
00213 };
00214
00215 template<class ContainerAllocator>
00216 struct Definition< ::asctec_msgs::IMUCalcData_<ContainerAllocator> > {
00217 static const char* value()
00218 {
00219 return "# Software License Agreement (BSD License)\n\
00220 #\n\
00221 # Copyright (c) 2010\n\
00222 # William Morris <morris@ee.ccny.cuny.edu>\n\
00223 # Ivan Dryanovski <ivan.dryanovski@gmail.com>\n\
00224 # All rights reserved.\n\
00225 #\n\
00226 # Redistribution and use in source and binary forms, with or without\n\
00227 # modification, are permitted provided that the following conditions\n\
00228 # are met:\n\
00229 #\n\
00230 # * Redistributions of source code must retain the above copyright\n\
00231 # notice, this list of conditions and the following disclaimer.\n\
00232 # * Redistributions in binary form must reproduce the above\n\
00233 # copyright notice, this list of conditions and the following\n\
00234 # disclaimer in the documentation and/or other materials provided\n\
00235 # with the distribution.\n\
00236 # * Neither the name of CCNY Robotics Lab nor the names of its\n\
00237 # contributors may be used to endorse or promote products derived\n\
00238 # from this software without specific prior written permission.\n\
00239 #\n\
00240 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\
00241 # \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\
00242 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n\
00243 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n\
00244 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n\
00245 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n\
00246 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\
00247 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n\
00248 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n\
00249 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n\
00250 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n\
00251 # POSSIBILITY OF SUCH DAMAGE.\n\
00252 \n\
00253 Header header\n\
00254 # angles derived by integration of gyro_outputs, drift compensated by data fusion;\n\
00255 #-90000..+90000 pitch(nick) and roll, 0..360000 yaw; 1000 = 1 degree\n\
00256 \n\
00257 int32 angle_nick\n\
00258 int32 angle_roll\n\
00259 int32 angle_yaw\n\
00260 \n\
00261 # angular velocities, raw values [16 bit], bias free, in 0.0154 degree/s (=> 64.8 = 1 degree/s)\n\
00262 \n\
00263 int32 angvel_nick\n\
00264 int32 angvel_roll\n\
00265 int32 angvel_yaw\n\
00266 \n\
00267 # acc-sensor outputs, calibrated: -10000..+10000 = -1g..+1g\n\
00268 \n\
00269 int16 acc_x_calib\n\
00270 int16 acc_y_calib\n\
00271 int16 acc_z_calib\n\
00272 \n\
00273 # horizontal / vertical accelerations: -10000..+10000 = -1g..+1g\n\
00274 \n\
00275 int16 acc_x\n\
00276 int16 acc_y\n\
00277 int16 acc_z\n\
00278 \n\
00279 # reference angles derived by accelerations only: -90000..+90000; 1000 = 1 degree\n\
00280 \n\
00281 int32 acc_angle_nick\n\
00282 int32 acc_angle_roll\n\
00283 \n\
00284 # total acceleration measured (10000 = 1g)\n\
00285 \n\
00286 int32 acc_absolute_value\n\
00287 \n\
00288 # magnetic field sensors output, offset free and scaled; units not determined, \n\
00289 # as only the direction of the field vector is taken into account\n\
00290 \n\
00291 int32 Hx\n\
00292 int32 Hy\n\
00293 int32 Hz\n\
00294 \n\
00295 # compass reading: angle reference for angle_yaw: 0..360000; 1000 = 1 degree\n\
00296 \n\
00297 int32 mag_heading\n\
00298 \n\
00299 # pseudo speed measurements: integrated accelerations, pulled towards zero; units unknown;\n\
00300 # used for short-term position stabilization\n\
00301 \n\
00302 int32 speed_x\n\
00303 int32 speed_y\n\
00304 int32 speed_z\n\
00305 \n\
00306 # height in mm (after data fusion)\n\
00307 \n\
00308 int32 height\n\
00309 \n\
00310 # diff. height in mm/s (after data fusion)\n\
00311 \n\
00312 int32 dheight\n\
00313 \n\
00314 # diff. height measured by the pressure sensor [mm/s]\n\
00315 \n\
00316 int32 dheight_reference\n\
00317 \n\
00318 # height measured by the pressure sensor [mm]\n\
00319 \n\
00320 int32 height_reference\n\
00321 \n\
00322 \n\
00323 ================================================================================\n\
00324 MSG: std_msgs/Header\n\
00325 # Standard metadata for higher-level stamped data types.\n\
00326 # This is generally used to communicate timestamped data \n\
00327 # in a particular coordinate frame.\n\
00328 # \n\
00329 # sequence ID: consecutively increasing ID \n\
00330 uint32 seq\n\
00331 #Two-integer timestamp that is expressed as:\n\
00332 # * stamp.secs: seconds (stamp_secs) since epoch\n\
00333 # * stamp.nsecs: nanoseconds since stamp_secs\n\
00334 # time-handling sugar is provided by the client library\n\
00335 time stamp\n\
00336 #Frame this data is associated with\n\
00337 # 0: no frame\n\
00338 # 1: global frame\n\
00339 string frame_id\n\
00340 \n\
00341 ";
00342 }
00343
00344 static const char* value(const ::asctec_msgs::IMUCalcData_<ContainerAllocator> &) { return value(); }
00345 };
00346
00347 template<class ContainerAllocator> struct HasHeader< ::asctec_msgs::IMUCalcData_<ContainerAllocator> > : public TrueType {};
00348 template<class ContainerAllocator> struct HasHeader< const ::asctec_msgs::IMUCalcData_<ContainerAllocator> > : public TrueType {};
00349 }
00350 }
00351
00352 namespace ros
00353 {
00354 namespace serialization
00355 {
00356
00357 template<class ContainerAllocator> struct Serializer< ::asctec_msgs::IMUCalcData_<ContainerAllocator> >
00358 {
00359 template<typename Stream, typename T> inline static void allInOne(Stream& stream, T m)
00360 {
00361 stream.next(m.header);
00362 stream.next(m.angle_nick);
00363 stream.next(m.angle_roll);
00364 stream.next(m.angle_yaw);
00365 stream.next(m.angvel_nick);
00366 stream.next(m.angvel_roll);
00367 stream.next(m.angvel_yaw);
00368 stream.next(m.acc_x_calib);
00369 stream.next(m.acc_y_calib);
00370 stream.next(m.acc_z_calib);
00371 stream.next(m.acc_x);
00372 stream.next(m.acc_y);
00373 stream.next(m.acc_z);
00374 stream.next(m.acc_angle_nick);
00375 stream.next(m.acc_angle_roll);
00376 stream.next(m.acc_absolute_value);
00377 stream.next(m.Hx);
00378 stream.next(m.Hy);
00379 stream.next(m.Hz);
00380 stream.next(m.mag_heading);
00381 stream.next(m.speed_x);
00382 stream.next(m.speed_y);
00383 stream.next(m.speed_z);
00384 stream.next(m.height);
00385 stream.next(m.dheight);
00386 stream.next(m.dheight_reference);
00387 stream.next(m.height_reference);
00388 }
00389
00390 ROS_DECLARE_ALLINONE_SERIALIZER;
00391 };
00392 }
00393 }
00394
00395 namespace ros
00396 {
00397 namespace message_operations
00398 {
00399
00400 template<class ContainerAllocator>
00401 struct Printer< ::asctec_msgs::IMUCalcData_<ContainerAllocator> >
00402 {
00403 template<typename Stream> static void stream(Stream& s, const std::string& indent, const ::asctec_msgs::IMUCalcData_<ContainerAllocator> & v)
00404 {
00405 s << indent << "header: ";
00406 s << std::endl;
00407 Printer< ::std_msgs::Header_<ContainerAllocator> >::stream(s, indent + " ", v.header);
00408 s << indent << "angle_nick: ";
00409 Printer<int32_t>::stream(s, indent + " ", v.angle_nick);
00410 s << indent << "angle_roll: ";
00411 Printer<int32_t>::stream(s, indent + " ", v.angle_roll);
00412 s << indent << "angle_yaw: ";
00413 Printer<int32_t>::stream(s, indent + " ", v.angle_yaw);
00414 s << indent << "angvel_nick: ";
00415 Printer<int32_t>::stream(s, indent + " ", v.angvel_nick);
00416 s << indent << "angvel_roll: ";
00417 Printer<int32_t>::stream(s, indent + " ", v.angvel_roll);
00418 s << indent << "angvel_yaw: ";
00419 Printer<int32_t>::stream(s, indent + " ", v.angvel_yaw);
00420 s << indent << "acc_x_calib: ";
00421 Printer<int16_t>::stream(s, indent + " ", v.acc_x_calib);
00422 s << indent << "acc_y_calib: ";
00423 Printer<int16_t>::stream(s, indent + " ", v.acc_y_calib);
00424 s << indent << "acc_z_calib: ";
00425 Printer<int16_t>::stream(s, indent + " ", v.acc_z_calib);
00426 s << indent << "acc_x: ";
00427 Printer<int16_t>::stream(s, indent + " ", v.acc_x);
00428 s << indent << "acc_y: ";
00429 Printer<int16_t>::stream(s, indent + " ", v.acc_y);
00430 s << indent << "acc_z: ";
00431 Printer<int16_t>::stream(s, indent + " ", v.acc_z);
00432 s << indent << "acc_angle_nick: ";
00433 Printer<int32_t>::stream(s, indent + " ", v.acc_angle_nick);
00434 s << indent << "acc_angle_roll: ";
00435 Printer<int32_t>::stream(s, indent + " ", v.acc_angle_roll);
00436 s << indent << "acc_absolute_value: ";
00437 Printer<int32_t>::stream(s, indent + " ", v.acc_absolute_value);
00438 s << indent << "Hx: ";
00439 Printer<int32_t>::stream(s, indent + " ", v.Hx);
00440 s << indent << "Hy: ";
00441 Printer<int32_t>::stream(s, indent + " ", v.Hy);
00442 s << indent << "Hz: ";
00443 Printer<int32_t>::stream(s, indent + " ", v.Hz);
00444 s << indent << "mag_heading: ";
00445 Printer<int32_t>::stream(s, indent + " ", v.mag_heading);
00446 s << indent << "speed_x: ";
00447 Printer<int32_t>::stream(s, indent + " ", v.speed_x);
00448 s << indent << "speed_y: ";
00449 Printer<int32_t>::stream(s, indent + " ", v.speed_y);
00450 s << indent << "speed_z: ";
00451 Printer<int32_t>::stream(s, indent + " ", v.speed_z);
00452 s << indent << "height: ";
00453 Printer<int32_t>::stream(s, indent + " ", v.height);
00454 s << indent << "dheight: ";
00455 Printer<int32_t>::stream(s, indent + " ", v.dheight);
00456 s << indent << "dheight_reference: ";
00457 Printer<int32_t>::stream(s, indent + " ", v.dheight_reference);
00458 s << indent << "height_reference: ";
00459 Printer<int32_t>::stream(s, indent + " ", v.height_reference);
00460 }
00461 };
00462
00463
00464 }
00465 }
00466
00467 #endif // ASCTEC_MSGS_MESSAGE_IMUCALCDATA_H
00468