35 #include "sensor_msgs/Imu.h" 36 #include "novatel_oem7_msgs/CORRIMU.h" 37 #include "novatel_oem7_msgs/IMURATECORRIMU.h" 38 #include "novatel_oem7_msgs/INSSTDEV.h" 39 #include "novatel_oem7_msgs/INSCONFIG.h" 40 #include "novatel_oem7_msgs/INSPVA.h" 41 #include "novatel_oem7_msgs/INSPVAX.h" 43 #include <boost/scoped_ptr.hpp> 51 typedef unsigned int imu_type_t;
52 typedef int imu_rate_t;
54 const imu_type_t IMU_TYPE_UNKNOWN = 0;
68 return degrees * M_PI / 180.0;
94 void getImuParam(imu_type_t imu_type,
const std::string& name, std::string& param)
97 std::string param_name = ns +
"/supported_imus/" + std::to_string(imu_type) +
"/" + name;
109 return std::stoi(rate);
122 insconfig_pub_.
publish(insconfig);
126 std::string imu_desc;
134 "IMU: '" << imu_desc <<
"', rate= " << imu_rate_);
149 corrimu_pub_.
publish(corrimu_);
169 imu->orientation =
tf2::toMsg(tf_orientation);
179 imu->orientation_covariance[0] = std::pow(insstdev_->pitch_stdev, 2);
180 imu->orientation_covariance[4] = std::pow(insstdev_->roll_stdev, 2);
181 imu->orientation_covariance[8] = std::pow(insstdev_->azimuth_stdev, 2);
184 if(corrimu_ && imu_rate_ > 0)
186 imu->angular_velocity.x = corrimu_->pitch_rate *
imu_rate_;
187 imu->angular_velocity.y = corrimu_->roll_rate *
imu_rate_;
188 imu->angular_velocity.z = corrimu_->yaw_rate *
imu_rate_;
190 imu->linear_acceleration.x = corrimu_->lateral_acc *
imu_rate_;
191 imu->linear_acceleration.y = corrimu_->longitudinal_acc *
imu_rate_;
192 imu->linear_acceleration.z = corrimu_->vertical_acc *
imu_rate_;
195 imu->angular_velocity_covariance[0] = 1e-3;
196 imu->angular_velocity_covariance[4] = 1e-3;
197 imu->angular_velocity_covariance[8] = 1e-3;
200 imu->linear_acceleration_covariance[0] = 1e-3;
201 imu->linear_acceleration_covariance[4] = 1e-3;
202 imu->linear_acceleration_covariance[8] = 1e-3;
216 insstdev_pub_.
publish(insstdev_);
234 imu_pub_.
setup<sensor_msgs::Imu>(
"IMU", nh);
235 corrimu_pub_.
setup< novatel_oem7_msgs::CORRIMU>(
"CORRIMU", nh);
236 insstdev_pub_.
setup< novatel_oem7_msgs::INSSTDEV>(
"INSSTDEV", nh);
237 inspvax_pub_.
setup< novatel_oem7_msgs::INSPVAX>(
"INSPVAX", nh);
238 insconfig_pub_.
setup<novatel_oem7_msgs::INSCONFIG>(
"INSCONFIG", nh);
249 static const std::vector<int> MSG_IDS(
boost::shared_ptr< novatel_oem7_msgs::INSSTDEV > insstdev_
void setRPY(const tf2Scalar &roll, const tf2Scalar &pitch, const tf2Scalar &yaw)
void handleMsg(Oem7RawMessageIf::ConstPtr msg)
void publishCorrImuMsg(Oem7RawMessageIf::ConstPtr msg)
double degreesToRadians(double degrees)
void publishInsPVAXMsg(Oem7RawMessageIf::ConstPtr msg)
#define ROS_LOG_STREAM(level, name, args)
#define ROS_WARN_THROTTLE(rate,...)
boost::shared_ptr< novatel_oem7_msgs::CORRIMU > corrimu_
const int INSCONFIG_OEM7_MSGID
Oem7RosPublisher inspvax_pub_
const int INSPVAX_OEM7_MSGID
std::map< std::string, std::string > imu_config_map_t
Oem7RosPublisher insconfig_pub_
boost::shared_ptr< novatel_oem7_msgs::INSPVA > inspva_
ROSCPP_DECL const std::string & getNamespace()
#define ROS_FATAL_STREAM(args)
const int INSPVAS_OEM7_MSGID
void getImuParam(imu_type_t imu_type, const std::string &name, std::string ¶m)
const std::vector< int > & getMessageIds()
Oem7RosPublisher corrimu_pub_
int getImuRate(imu_type_t imu_type)
imu_config_map_t imu_config_map
void publish(boost::shared_ptr< M > &msg)
#define ROS_DEBUG_STREAM(args)
PLUGINLIB_EXPORT_CLASS(novatel_oem7_driver::Oem7ConfigNodelet, nodelet::Nodelet)
void processInsConfigMsg(Oem7RawMessageIf::ConstPtr msg)
void initialize(ros::NodeHandle &nh)
const int IMURATECORRIMUS_OEM7_MSGID
void setup(const std::string &name, ros::NodeHandle &nh)
#define ROS_INFO_STREAM(args)
void MakeROSMessage(const Oem7RawMessageIf::ConstPtr &msg, boost::shared_ptr< T > &rosmsg)
const double DATA_NOT_AVAILABLE
Used to initialized unpopulated fields.
bool getParam(const std::string &key, std::string &s) const
Oem7RosPublisher insstdev_pub_
void publishInsStDevMsg(Oem7RawMessageIf::ConstPtr msg)
const int INSSTDEV_OEM7_MSGID
void getImuDescription(imu_type_t imu_type, std::string &desc)
const int CORRIMUS_OEM7_MSGID
Oem7RosPublisher imu_pub_
#define ROSCONSOLE_DEFAULT_NAME