laser_transform_core.h
Go to the documentation of this file.
00001 #ifndef LASER_TRANSFORM_CORE_H
00002 #define LASER_TRANSFORM_CORE_H
00003 
00004 // ROS includes
00005 #include <fstream>
00006 #include "ros/ros.h"
00007 #include "ros/time.h"
00008 #include "pcl_ros/transforms.h"
00009 #include "sensor_msgs/PointCloud2.h"
00010 #include "nav_msgs/Odometry.h"
00011 #include "ip_connection.h"
00012 #include "brick_imu.h"
00013 #include "brick_imu_v2.h"
00014 #include "bricklet_gps.h"
00015 #include "bricklet_industrial_digital_in_4.h"
00016 #include "bricklet_dual_button.h"
00017 #include "octomap_msgs/BoundingBoxQuery.h"
00018 
00019 #define M_PI    3.14159265358979323846  /* pi */
00020 
00021 class LaserTransform
00022 {
00023 public:
00025   LaserTransform();
00026 
00028   ~LaserTransform();
00029 
00031   int init();
00032 
00034   void publishPclMessage(ros::Publisher *pub_message);
00035 
00037   void publishImuMessage(ros::Publisher *pub_message);
00038 
00040   void publishNavSatFixMessage(ros::Publisher *pub_message);
00041 
00043   void publishMagneticFieldMessage(ros::Publisher *pub_message);
00044 
00046   void publishOdometryMessage(ros::Publisher *pub_message);
00047 
00049   void callbackPcl(const sensor_msgs::PointCloud2::ConstPtr& msg);
00050 
00052   void callbackOdometryFiltered(const nav_msgs::Odometry::ConstPtr& msg);
00053 
00055   void setLaserPose(double x, double y, double z, double yaw, double pitch, double roll);
00056 
00058   void checkConvergenceSpeed();
00059 
00061   void clearOctomap(ros::ServiceClient *client);
00062 
00064   void setPclPublisher(ros::Publisher *pub)
00065   {
00066     pcl_pub = pub;
00067   }
00068 public:
00070   int setImuConvergenceSpeed(uint16_t imu_convergence_speed)
00071   {
00072     this->imu_convergence_speed = imu_convergence_speed;
00073     return 0;
00074   }
00075 private:
00077   static void callbackConnected(uint8_t connect_reason, void *user_data);
00078 
00080   static void callbackEnumerate(const char *uid, const char *connected_uid,
00081     char position, uint8_t hardware_version[3],
00082     uint8_t firmware_version[3], uint16_t device_identifier,
00083     uint8_t enumeration_type, void *user_data);
00084 
00086   static void callbackIdi4(uint8_t interrupt_mask, uint8_t value_mask, void *user_data);
00087 
00089   static void callbackDb(uint8_t button_l, uint8_t button_r,
00090                       uint8_t led_l, uint8_t led_r,
00091                       void *user_data);
00092 
00094   tf::Quaternion getQuaternion();
00095 
00097   int getPosition(float *x_pos, float *y_pos, float *z_pos);
00098 
00100   float rad2deg(float x)
00101   {
00102     return x*180.0/M_PI;
00103   }
00104 
00106   float deg2rad(float x)
00107   {
00108     return x*M_PI/180.0;
00109   }
00110 private:
00112   ros::Publisher *pcl_pub;
00114   IPConnection ipcon;
00116   IMU imu;
00118   bool is_imu_connected;
00120   int imu_convergence_speed;
00122   ros::Time imu_init_time;
00124   IMUV2 imu_v2;
00126   bool is_imu_v2_connected;
00128   GPS gps;
00130   bool is_gps_connected;
00132   IndustrialDigitalIn4 idi4;
00134   uint16_t rpm_cnt;
00136   bool is_idi4_connected;
00138   DualButton db;
00140   bool isMeasure;
00142   float rev;
00144   ros::Time last_rev;
00146   sensor_msgs::PointCloud2 pcl_out;
00148   bool publish_new_pcl;
00150   bool new_pcl_filtered;
00152   double start_latitude;
00154   double start_longitude;
00156   tf::Transform laser_pose;
00158   //tf::Quaternion laser_orientation;
00160   bool isPlc;
00162   float xpos;
00164   float ypos;
00166   float velocity;
00168   float velocity_gps;
00170   float course_gps;
00171   float yy;
00173   std::fstream gps_log;
00175   std::fstream velo_log;
00177   std::fstream full_log;
00178 };
00179 
00180 #endif


tinkerforge_laser_transform
Author(s): M.Fischer
autogenerated on Thu Jun 6 2019 20:39:25