imu_ros_i.h
Go to the documentation of this file.
1 #ifndef PHIDGETS_IMU_IMU_ROS_I_H
2 #define PHIDGETS_IMU_IMU_ROS_I_H
3 
4 #include <ros/ros.h>
5 #include <ros/service_server.h>
6 #include <boost/thread/mutex.hpp>
7 #include <boost/shared_ptr.hpp>
9 #include <sensor_msgs/Imu.h>
10 #include <sensor_msgs/MagneticField.h>
11 #include <std_srvs/Empty.h>
12 #include <std_msgs/Bool.h>
15 #include <phidgets_api/imu.h>
16 
17 using namespace std;
18 
19 namespace phidgets {
20 
21 const float G = 9.81;
22 const float MAX_TIMEDIFF_SECONDS = 0.1;
23 
24 class ImuRosI : public Imu
25 {
26  typedef sensor_msgs::Imu ImuMsg;
27  typedef sensor_msgs::MagneticField MagMsg;
28 
29  public:
30 
31  ImuRosI(ros::NodeHandle nh, ros::NodeHandle nh_private);
32 
33  bool calibrateService(std_srvs::Empty::Request &req,
34  std_srvs::Empty::Response &res);
35 
36  private:
37 
44 
49 
50  // diagnostics
54 
55  boost::mutex mutex_;
58 
59  ImuMsg imu_msg_;
60  MagMsg mag_msg_;
61 
63 
64  // params
65 
66  std::string frame_id_;
67  int period_; // rate in ms
68 
73 
74  // compass correction params (see http://www.phidgets.com/docs/1044_User_Guide)
75  double cc_mag_field_;
76  double cc_offset0_;
77  double cc_offset1_;
78  double cc_offset2_;
79  double cc_gain0_;
80  double cc_gain1_;
81  double cc_gain2_;
82  double cc_T0_;
83  double cc_T1_;
84  double cc_T2_;
85  double cc_T3_;
86  double cc_T4_;
87  double cc_T5_;
88 
89  void calibrate();
90  void initDevice();
91  void dataHandler(CPhidgetSpatial_SpatialEventDataHandle* data, int count);
92  void attachHandler();
93  void detachHandler();
94  void errorHandler(int error);
95  void processImuData(CPhidgetSpatial_SpatialEventDataHandle* data, int i);
96 
101  void phidgetsDiagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat);
102 };
103 
104 } //namespace phidgets
105 
106 #endif // PHIDGETS_IMU_IMU_ROS_I_H
ros::ServiceServer cal_srv_
Definition: imu_ros_i.h:43
std::string frame_id_
Definition: imu_ros_i.h:66
double cc_offset2_
Definition: imu_ros_i.h:78
const float MAX_TIMEDIFF_SECONDS
Definition: imu_ros_i.h:22
ros::NodeHandle nh_
Definition: imu_ros_i.h:38
double target_publish_freq_
Definition: imu_ros_i.h:53
ros::Time time_zero_
Definition: imu_ros_i.h:62
double cc_gain0_
Definition: imu_ros_i.h:79
ros::Publisher imu_publisher_
Definition: imu_ros_i.h:40
double linear_acceleration_stdev_
Definition: imu_ros_i.h:70
boost::mutex mutex_
Definition: imu_ros_i.h:55
boost::shared_ptr< diagnostic_updater::TopicDiagnostic > imu_publisher_diag_ptr_
Definition: imu_ros_i.h:48
sensor_msgs::MagneticField MagMsg
Definition: imu_ros_i.h:27
sensor_msgs::Imu ImuMsg
Definition: imu_ros_i.h:26
double cc_gain2_
Definition: imu_ros_i.h:81
ros::Time last_published_time_
Definition: imu_ros_i.h:56
double magnetic_field_stdev_
Definition: imu_ros_i.h:71
const float G
Definition: imu_ros_i.h:21
double angular_velocity_stdev_
Definition: imu_ros_i.h:69
ros::NodeHandle nh_private_
Definition: imu_ros_i.h:39
double cc_offset1_
Definition: imu_ros_i.h:77
double cc_offset0_
Definition: imu_ros_i.h:76
ros::Publisher cal_publisher_
Definition: imu_ros_i.h:42
double cc_mag_field_
Definition: imu_ros_i.h:75
ros::Publisher mag_publisher_
Definition: imu_ros_i.h:41
diagnostic_updater::Updater diag_updater_
updater object of class Update. Used to add diagnostic tasks, set ID etc. refer package API...
Definition: imu_ros_i.h:47
double cc_gain1_
Definition: imu_ros_i.h:80


phidgets_imu
Author(s): Ivan Dryanovski
autogenerated on Tue May 7 2019 03:19:31