typedefs_ros1.hpp
Go to the documentation of this file.
1 // *****************************************************************************
2 //
3 // © Copyright 2020, Septentrio NV/SA.
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 // 1. Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // 2. Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // 3. Neither the name of the copyright holder nor the names of its
14 // contributors may be used to endorse or promote products derived
15 // from this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
28 //
29 // *****************************************************************************
30 
31 #pragma once
32 
33 // std includes
34 #include <numeric>
35 #include <unordered_map>
36 // ROS includes
37 #include <ros/ros.h>
38 // tf2 includes
39 #include <tf2_eigen/tf2_eigen.h>
43 // ROS msg includes
44 #include <diagnostic_msgs/DiagnosticArray.h>
45 #include <diagnostic_msgs/DiagnosticStatus.h>
46 #include <geometry_msgs/PoseWithCovarianceStamped.h>
47 #include <geometry_msgs/Quaternion.h>
48 #include <geometry_msgs/TwistWithCovarianceStamped.h>
49 #include <gps_common/GPSFix.h>
50 #include <nav_msgs/Odometry.h>
51 #include <sensor_msgs/Imu.h>
52 #include <sensor_msgs/NavSatFix.h>
53 #include <sensor_msgs/TimeReference.h>
54 // GNSS msg includes
55 #include <septentrio_gnss_driver/AIMPlusStatus.h>
56 #include <septentrio_gnss_driver/AttCovEuler.h>
57 #include <septentrio_gnss_driver/AttEuler.h>
58 #include <septentrio_gnss_driver/BaseVectorCart.h>
59 #include <septentrio_gnss_driver/BaseVectorGeod.h>
60 #include <septentrio_gnss_driver/BlockHeader.h>
61 #include <septentrio_gnss_driver/GALAuthStatus.h>
62 #include <septentrio_gnss_driver/MeasEpoch.h>
63 #include <septentrio_gnss_driver/MeasEpochChannelType1.h>
64 #include <septentrio_gnss_driver/MeasEpochChannelType2.h>
65 #include <septentrio_gnss_driver/PVTCartesian.h>
66 #include <septentrio_gnss_driver/PVTGeodetic.h>
67 #include <septentrio_gnss_driver/PosCovCartesian.h>
68 #include <septentrio_gnss_driver/PosCovGeodetic.h>
69 #include <septentrio_gnss_driver/RFBand.h>
70 #include <septentrio_gnss_driver/RFStatus.h>
71 #include <septentrio_gnss_driver/ReceiverTime.h>
72 #include <septentrio_gnss_driver/VectorInfoCart.h>
73 #include <septentrio_gnss_driver/VectorInfoGeod.h>
74 #include <septentrio_gnss_driver/VelCovCartesian.h>
75 #include <septentrio_gnss_driver/VelCovGeodetic.h>
76 // NMEA msg includes
77 #include <nmea_msgs/Gpgga.h>
78 #include <nmea_msgs/Gpgsa.h>
79 #include <nmea_msgs/Gpgsv.h>
80 #include <nmea_msgs/Gprmc.h>
81 // INS msg includes
82 #include <septentrio_gnss_driver/ExtSensorMeas.h>
83 #include <septentrio_gnss_driver/IMUSetup.h>
84 #include <septentrio_gnss_driver/INSNavCart.h>
85 #include <septentrio_gnss_driver/INSNavGeod.h>
86 #include <septentrio_gnss_driver/VelSensorSetup.h>
87 // Rosaic includes
91 
92 // Timestamp in nanoseconds (Unix epoch)
93 typedef uint64_t Timestamp;
94 // ROS timestamp
96 
97 // ROS messages
98 typedef diagnostic_msgs::DiagnosticArray DiagnosticArrayMsg;
99 typedef diagnostic_msgs::DiagnosticStatus DiagnosticStatusMsg;
100 typedef geometry_msgs::Quaternion QuaternionMsg;
101 typedef geometry_msgs::PoseWithCovarianceStamped PoseWithCovarianceStampedMsg;
102 typedef geometry_msgs::TwistWithCovarianceStamped TwistWithCovarianceStampedMsg;
103 typedef geometry_msgs::TransformStamped TransformStampedMsg;
104 typedef geometry_msgs::Vector3 Vector3Msg;
105 typedef gps_common::GPSFix GpsFixMsg;
106 typedef gps_common::GPSStatus GpsStatusMsg;
107 typedef sensor_msgs::NavSatFix NavSatFixMsg;
108 typedef sensor_msgs::NavSatStatus NavSatStatusMsg;
109 typedef sensor_msgs::TimeReference TimeReferenceMsg;
110 typedef sensor_msgs::Imu ImuMsg;
111 typedef nav_msgs::Odometry LocalizationMsg;
112 
113 // Septentrio GNSS SBF messages
114 typedef septentrio_gnss_driver::AIMPlusStatus AimPlusStatusMsg;
115 typedef septentrio_gnss_driver::BaseVectorCart BaseVectorCartMsg;
116 typedef septentrio_gnss_driver::BaseVectorGeod BaseVectorGeodMsg;
117 typedef septentrio_gnss_driver::BlockHeader BlockHeaderMsg;
118 typedef septentrio_gnss_driver::GALAuthStatus GalAuthStatusMsg;
119 typedef septentrio_gnss_driver::RFStatus RfStatusMsg;
120 typedef septentrio_gnss_driver::RFBand RfBandMsg;
121 typedef septentrio_gnss_driver::MeasEpoch MeasEpochMsg;
122 typedef septentrio_gnss_driver::MeasEpochChannelType1 MeasEpochChannelType1Msg;
123 typedef septentrio_gnss_driver::MeasEpochChannelType2 MeasEpochChannelType2Msg;
124 typedef septentrio_gnss_driver::AttCovEuler AttCovEulerMsg;
125 typedef septentrio_gnss_driver::AttEuler AttEulerMsg;
126 typedef septentrio_gnss_driver::PVTCartesian PVTCartesianMsg;
127 typedef septentrio_gnss_driver::PVTGeodetic PVTGeodeticMsg;
128 typedef septentrio_gnss_driver::PosCovCartesian PosCovCartesianMsg;
129 typedef septentrio_gnss_driver::PosCovGeodetic PosCovGeodeticMsg;
130 typedef septentrio_gnss_driver::ReceiverTime ReceiverTimeMsg;
131 typedef septentrio_gnss_driver::VectorInfoCart VectorInfoCartMsg;
132 typedef septentrio_gnss_driver::VectorInfoGeod VectorInfoGeodMsg;
133 typedef septentrio_gnss_driver::VelCovCartesian VelCovCartesianMsg;
134 typedef septentrio_gnss_driver::VelCovGeodetic VelCovGeodeticMsg;
135 
136 // NMEA messages
137 typedef nmea_msgs::Gpgga GpggaMsg;
138 typedef nmea_msgs::Gpgsa GpgsaMsg;
139 typedef nmea_msgs::Gpgsv GpgsvMsg;
140 typedef nmea_msgs::Gprmc GprmcMsg;
141 
142 // Septentrio INS+GNSS SBF messages
143 typedef septentrio_gnss_driver::INSNavCart INSNavCartMsg;
144 typedef septentrio_gnss_driver::INSNavGeod INSNavGeodMsg;
145 typedef septentrio_gnss_driver::IMUSetup IMUSetupMsg;
146 typedef septentrio_gnss_driver::VelSensorSetup VelSensorSetupMsg;
147 typedef septentrio_gnss_driver::ExtSensorMeas ExtSensorMeasMsg;
148 
155 {
156  TimestampRos tsr;
157  tsr.fromNSec(ts);
158  return tsr;
159 }
160 
166 inline Timestamp timestampFromRos(const TimestampRos& tsr) { return tsr.toNSec(); }
167 
171 namespace log_level {
172  enum LogLevel
173  {
174  DEBUG,
175  INFO,
176  WARN,
177  ERROR,
178  FATAL
179  };
180 } // namespace log_level
181 
186 class ROSaicNodeBase
187 {
188 public:
190  pNh_(std::make_shared<ros::NodeHandle>("~")), tfListener_(tfBuffer_),
191  lastTfStamp_(0)
192  {
193  }
194 
196 
197  bool ok() { return ros::ok(); }
198 
199  const Settings* settings() const { return &settings_; }
200 
202  {
203  try
204  {
205  ros::NodeHandle nh;
206  if (settings_.ins_vsm.ros_source == "odometry")
207  odometrySubscriber_ = nh.subscribe<nav_msgs::Odometry>(
208  "odometry_vsm", 10, &ROSaicNodeBase::callbackOdometry, this);
209  else if (settings_.ins_vsm.ros_source == "twist")
211  "twist_vsm", 10, &ROSaicNodeBase::callbackTwist, this);
212  } catch (const std::runtime_error& ex)
213  {
214  this->log(log_level::ERROR, "Subscriber initialization failed due to: " +
215  std::string(ex.what()) + ".");
216  }
217  }
218 
229  bool getUint32Param(const std::string& name, uint32_t& val,
230  uint32_t defaultVal) const
231  {
232  int32_t tempVal;
233  if ((!pNh_->getParam(name, tempVal)) || (tempVal < 0))
234  {
235  val = defaultVal;
236  return false;
237  }
238  val = tempVal;
239  return true;
240  }
241 
251  template <typename T>
252  bool param(const std::string& name, T& val, const T& defaultVal) const
253  {
254  return pNh_->param(name, val, defaultVal);
255  };
256 
262  void log(log_level::LogLevel logLevel, const std::string& s) const
263  {
264  switch (logLevel)
265  {
266  case log_level::DEBUG:
268  break;
269  case log_level::INFO:
271  break;
272  case log_level::WARN:
274  break;
275  case log_level::ERROR:
277  break;
278  case log_level::FATAL:
280  break;
281  default:
282  break;
283  }
284  }
285 
290  Timestamp getTime() const { return ros::Time::now().toNSec(); }
291 
297  template <typename M>
298  void publishMessage(const std::string& topic, const M& msg)
299  {
300  if constexpr (has_block_header<M>::value)
301  {
302  if (settings_.publish_only_valid && !validValue(msg.block_header.tow))
303  return;
304  }
305 
306  auto it = topicMap_.find(topic);
307  if (it != topicMap_.end())
308  {
309  it->second.publish(msg);
310  } else
311  {
312  ros::Publisher pub = pNh_->advertise<M>(topic, queueSize_);
313  topicMap_.insert(std::make_pair(topic, pub));
314  pub.publish(msg);
315  }
316  }
317 
322  void publishTf(const LocalizationMsg& loc)
323  {
324  if (std::isnan(loc.pose.pose.orientation.w))
325  return;
326 
327  if (lastTfStamp_ == loc.header.stamp)
328  return;
329  lastTfStamp_ = loc.header.stamp;
330 
331  geometry_msgs::TransformStamped transformStamped;
332  transformStamped.header.stamp = loc.header.stamp;
333  transformStamped.header.frame_id = loc.header.frame_id;
334  transformStamped.child_frame_id = loc.child_frame_id;
335  transformStamped.transform.translation.x = loc.pose.pose.position.x;
336  transformStamped.transform.translation.y = loc.pose.pose.position.y;
337  transformStamped.transform.translation.z = loc.pose.pose.position.z;
338  transformStamped.transform.rotation.x = loc.pose.pose.orientation.x;
339  transformStamped.transform.rotation.y = loc.pose.pose.orientation.y;
340  transformStamped.transform.rotation.z = loc.pose.pose.orientation.z;
341  transformStamped.transform.rotation.w = loc.pose.pose.orientation.w;
342 
344  {
345  geometry_msgs::TransformStamped T_l_b;
346  try
347  {
348  // try to get tf at timestamp of message
349  T_l_b = tfBuffer_.lookupTransform(
350  loc.child_frame_id, settings_.local_frame_id, lastTfStamp_);
351  } catch (const tf2::TransformException& ex)
352  {
353  try
354  {
356  10.0,
358  << ": No transform for insertion of local frame at t="
359  << lastTfStamp_.toNSec()
360  << ". Exception: " << std::string(ex.what()));
361  // try to get latest tf
362  T_l_b = tfBuffer_.lookupTransform(
363  loc.child_frame_id, settings_.local_frame_id, ros::Time(0));
364  } catch (const tf2::TransformException& ex)
365  {
367  10.0,
369  << ": No most recent transform for insertion of local frame. Exception: "
370  << std::string(ex.what()));
371  return;
372  }
373  }
374 
375  // T_l_g = T_b_g * T_l_b;
376  transformStamped =
377  tf2::eigenToTransform(tf2::transformToEigen(transformStamped) *
378  tf2::transformToEigen(T_l_b));
379  transformStamped.header.stamp = loc.header.stamp;
380  transformStamped.header.frame_id = loc.header.frame_id;
381  transformStamped.child_frame_id = settings_.local_frame_id;
382  }
383 
384  tf2Publisher_.sendTransform(transformStamped);
385  }
386 
390  void setIsIns() { capabilities_.is_ins = true; }
391 
396 
401 
405  bool isIns() { return capabilities_.is_ins; }
406 
411 
416 
417 private:
418  void callbackOdometry(const nav_msgs::Odometry::ConstPtr& odo)
419  {
420  Timestamp stamp = timestampFromRos(odo->header.stamp);
421 
422  processTwist(stamp, odo->twist);
423  }
424 
425  void callbackTwist(const TwistWithCovarianceStampedMsg::ConstPtr& twist)
426  {
427  Timestamp stamp = timestampFromRos(twist->header.stamp);
428 
429  processTwist(stamp, twist->twist);
430  }
431 
433  const geometry_msgs::TwistWithCovariance& twist)
434  {
435  // in case stamp was not set
436  if (stamp == 0)
437  stamp = getTime();
438 
439  thread_local Eigen::Vector3d vel = Eigen::Vector3d::Zero();
440  thread_local Eigen::Vector3d var = Eigen::Vector3d::Zero();
441  thread_local uint64_t ctr = 0;
442  thread_local Timestamp lastStamp = 0;
443 
444  ++ctr;
445  vel[0] += twist.twist.linear.x;
446  vel[1] += twist.twist.linear.y;
447  vel[2] += twist.twist.linear.z;
448  var[0] += twist.covariance[0];
449  var[1] += twist.covariance[7];
450  var[2] += twist.covariance[14];
451 
452  // Rx expects averaged velocity at a rate of 2 Hz
453  if ((stamp - lastStamp) >= 495000000) // allow for 5 ms jitter
454  {
455  vel /= ctr;
456  var /= ctr;
457  time_t epochSeconds = stamp / 1000000000;
458  struct tm* tm_temp = std::gmtime(&epochSeconds);
459  std::stringstream timeUtc;
460  timeUtc << std::setfill('0') << std::setw(2)
461  << std::to_string(tm_temp->tm_hour) << std::setw(2)
462  << std::to_string(tm_temp->tm_min) << std::setw(2)
463  << std::to_string(tm_temp->tm_sec) << "." << std::setw(3)
464  << std::to_string((stamp - (stamp / 1000000000) * 1000000000) /
465  1000000);
466 
467  std::string v_x;
468  std::string v_y;
469  std::string v_z;
470  std::string std_x;
471  std::string std_y;
472  std::string std_z;
474  {
479  else if (var[0] > 0.0)
480  std_x = string_utilities::trimDecimalPlaces(std::sqrt(var[0]));
482  {
483  log(log_level::ERROR, "Invalid covariance value for v_x: " +
484  std::to_string(var[0]) +
485  ". Ignoring measurement.");
486  v_x = "";
487  std_x = string_utilities::trimDecimalPlaces(1000000.0);
488  }
489  } else
490  std_x = std::to_string(1000000.0);
492  {
494  v_y = "-";
499  else if (var[1] > 0.0)
500  std_y = string_utilities::trimDecimalPlaces(std::sqrt(var[1]));
502  {
503  log(log_level::ERROR, "Invalid covariance value for v_y: " +
504  std::to_string(var[1]) +
505  ". Ignoring measurement.");
506  v_y = "";
507  std_y = string_utilities::trimDecimalPlaces(1000000.0);
508  }
509  } else
510  std_y = string_utilities::trimDecimalPlaces(1000000.0);
512  {
514  v_z = "-";
519  else if (var[2] > 0.0)
520  std_z = string_utilities::trimDecimalPlaces(std::sqrt(var[2]));
522  {
523  log(log_level::ERROR, "Invalid covariance value for v_z: " +
524  std::to_string(var[2]) +
525  ". Ignoring measurement.");
526  v_z = "";
527  std_z = string_utilities::trimDecimalPlaces(1000000.0);
528  }
529  } else
530  std_z = string_utilities::trimDecimalPlaces(1000000.0);
531 
532  std::string velNmea = "$PSSN,VSM," + timeUtc.str() + "," + v_x + "," +
533  v_y + "," + std_x + "," + std_y + "," + v_z + "," +
534  std_z;
535 
536  char crc = std::accumulate(velNmea.begin() + 1, velNmea.end(), 0,
537  [](char sum, char ch) { return sum ^ ch; });
538 
539  std::stringstream crcss;
540  crcss << std::hex << static_cast<int32_t>(crc);
541 
542  velNmea += "*" + crcss.str() + "\r\n";
543  sendVelocity(velNmea);
544 
545  vel = Eigen::Vector3d::Zero();
546  var = Eigen::Vector3d::Zero();
547  ctr = 0;
548  lastStamp = stamp;
549  }
550  }
551 
552 protected:
554  std::shared_ptr<ros::NodeHandle> pNh_;
558  virtual void sendVelocity(const std::string& velNmea) = 0;
559 
560 private:
562  std::unordered_map<std::string, ros::Publisher> topicMap_;
564  uint32_t queueSize_ = 1;
575  // tf listener
577  // Capabilities of Rx
579 };
log_level::WARN
@ WARN
Definition: typedefs.hpp:182
AttCovEulerMsg
septentrio_gnss_driver::AttCovEuler AttCovEulerMsg
Definition: typedefs_ros1.hpp:124
ROSaicNodeBase::tfListener_
tf2_ros::TransformListener tfListener_
Definition: typedefs.hpp:609
Timestamp
uint64_t Timestamp
Definition: typedefs.hpp:101
ROSaicNodeBase::registerSubscriber
void registerSubscriber()
Definition: typedefs_ros1.hpp:201
AimPlusStatusMsg
septentrio_gnss_driver::AIMPlusStatus AimPlusStatusMsg
Definition: typedefs_ros1.hpp:114
Settings::local_frame_id
std::string local_frame_id
Frame id of the local frame to be inserted.
Definition: settings.hpp:338
ROSaicNodeBase::capabilities_
Capabilities capabilities_
Definition: typedefs.hpp:611
ros::Publisher
InsVsm::ros_source
std::string ros_source
VSM source for INS.
Definition: settings.hpp:115
InsVsm::ros_config
std::vector< bool > ros_config
Whether or not to use individual elements of 3D velocity (v_x, v_y, v_z)
Definition: settings.hpp:117
MeasEpochMsg
septentrio_gnss_driver::MeasEpoch MeasEpochMsg
Definition: typedefs_ros1.hpp:121
ROS_ERROR_STREAM
#define ROS_ERROR_STREAM(args)
NavSatStatusMsg
sensor_msgs::NavSatStatus NavSatStatusMsg
Definition: typedefs_ros1.hpp:108
PoseWithCovarianceStampedMsg
geometry_msgs::PoseWithCovarianceStamped PoseWithCovarianceStampedMsg
Definition: typedefs_ros1.hpp:101
VectorInfoGeodMsg
septentrio_gnss_driver::VectorInfoGeod VectorInfoGeodMsg
Definition: typedefs_ros1.hpp:132
MeasEpochChannelType1Msg
septentrio_gnss_driver::MeasEpochChannelType1 MeasEpochChannelType1Msg
Definition: typedefs_ros1.hpp:122
VectorInfoCartMsg
septentrio_gnss_driver::VectorInfoCart VectorInfoCartMsg
Definition: typedefs_ros1.hpp:131
Settings::insert_local_frame
bool insert_local_frame
Wether local frame should be inserted into tf.
Definition: settings.hpp:336
ROSaicNodeBase::log
void log(log_level::LogLevel logLevel, const std::string &s) const
Log function to provide abstraction of ROS loggers.
Definition: typedefs.hpp:286
Capabilities::has_heading
bool has_heading
Wether Rx has heading.
Definition: settings.hpp:382
tf2_eigen.h
VelCovGeodeticMsg
septentrio_gnss_driver::VelCovGeodetic VelCovGeodeticMsg
Definition: typedefs_ros1.hpp:134
Capabilities
Capabilities struct.
Definition: settings.hpp:377
s
XmlRpcServer s
ros
ROS_FATAL_STREAM
#define ROS_FATAL_STREAM(args)
ros.h
Capabilities::has_improved_vsm_handling
bool has_improved_vsm_handling
Wether Rx has improved VSM handling.
Definition: settings.hpp:384
TwistWithCovarianceStampedMsg
geometry_msgs::TwistWithCovarianceStamped TwistWithCovarianceStampedMsg
Definition: typedefs_ros1.hpp:102
ROSaicNodeBase::processTwist
void processTwist(Timestamp stamp, const geometry_msgs::TwistWithCovariance &twist)
Definition: typedefs_ros1.hpp:432
NavSatFixMsg
sensor_msgs::NavSatFix NavSatFixMsg
Definition: typedefs_ros1.hpp:107
ROSaicNodeBase::hasImprovedVsmHandling
bool hasImprovedVsmHandling()
Check if Rx has improved VSM handling.
Definition: typedefs_ros1.hpp:415
settings.hpp
ROSaicNodeBase::odometrySubscriber_
ros::Subscriber odometrySubscriber_
Odometry subscriber.
Definition: typedefs_ros1.hpp:568
ROSaicNodeBase::publishMessage
void publishMessage(const std::string &topic, const M &msg)
Publishing function.
Definition: typedefs_ros1.hpp:298
sbf_utilities.hpp
ROSaicNodeBase::topicMap_
std::unordered_map< std::string, std::any > topicMap_
Map of topics and publishers.
Definition: typedefs.hpp:595
ROSaicNodeBase::ok
bool ok()
Definition: typedefs_ros1.hpp:197
ROSaicNodeBase::callbackOdometry
void callbackOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr odo)
Definition: typedefs.hpp:453
ROS_DEBUG_STREAM
#define ROS_DEBUG_STREAM(args)
PVTGeodeticMsg
septentrio_gnss_driver::PVTGeodetic PVTGeodeticMsg
Definition: typedefs_ros1.hpp:127
ros::Publisher::publish
void publish(const boost::shared_ptr< M > &message) const
ROSaicNodeBase
This class is the base class for abstraction.
Definition: typedefs.hpp:192
ros::ok
ROSCPP_DECL bool ok()
transform_broadcaster.h
PosCovCartesianMsg
septentrio_gnss_driver::PosCovCartesian PosCovCartesianMsg
Definition: typedefs_ros1.hpp:128
tf2::eigenToTransform
geometry_msgs::TransformStamped eigenToTransform(const Eigen::Affine3d &T)
TimestampRos
ros::Time TimestampRos
Definition: typedefs_ros1.hpp:95
BaseVectorGeodMsg
septentrio_gnss_driver::BaseVectorGeod BaseVectorGeodMsg
Definition: typedefs_ros1.hpp:116
ROSaicNodeBase::topicMap_
std::unordered_map< std::string, ros::Publisher > topicMap_
Map of topics and publishers.
Definition: typedefs_ros1.hpp:562
log_level::FATAL
@ FATAL
Definition: typedefs.hpp:184
tf2_ros::TransformListener
ROSaicNodeBase::lastTfStamp_
Timestamp lastTfStamp_
Last tf stamp.
Definition: typedefs.hpp:605
QuaternionMsg
geometry_msgs::Quaternion QuaternionMsg
Definition: typedefs_ros1.hpp:100
ROS_WARN_STREAM
#define ROS_WARN_STREAM(args)
GpgsaMsg
nmea_msgs::Gpgsa GpgsaMsg
Definition: typedefs_ros1.hpp:138
ROSaicNodeBase::processTwist
void processTwist(Timestamp stamp, const geometry_msgs::msg::TwistWithCovariance &twist)
Definition: typedefs.hpp:467
ROSaicNodeBase::odometrySubscriber_
rclcpp::Subscription< nav_msgs::msg::Odometry >::SharedPtr odometrySubscriber_
Odometry subscriber.
Definition: typedefs.hpp:601
GprmcMsg
nmea_msgs::Gprmc GprmcMsg
Definition: typedefs_ros1.hpp:140
ROS_WARN_STREAM_THROTTLE
#define ROS_WARN_STREAM_THROTTLE(period, args)
ROSaicNodeBase::callbackTwist
void callbackTwist(const TwistWithCovarianceStampedMsg::ConstSharedPtr twist)
Definition: typedefs.hpp:460
PVTCartesianMsg
septentrio_gnss_driver::PVTCartesian PVTCartesianMsg
Definition: typedefs_ros1.hpp:126
tf2_ros::TransformBroadcaster::sendTransform
void sendTransform(const geometry_msgs::TransformStamped &transform)
ROSaicNodeBase::sendVelocity
virtual void sendVelocity(const std::string &velNmea)=0
Send velocity to communication layer (virtual)
ROS_INFO_STREAM_THROTTLE
#define ROS_INFO_STREAM_THROTTLE(period, args)
DiagnosticStatusMsg
diagnostic_msgs::DiagnosticStatus DiagnosticStatusMsg
Definition: typedefs_ros1.hpp:99
Settings::use_ros_axis_orientation
bool use_ros_axis_orientation
ROS axis orientation, body: front-left-up, geographic: ENU.
Definition: settings.hpp:211
VelCovCartesianMsg
septentrio_gnss_driver::VelCovCartesian VelCovCartesianMsg
Definition: typedefs_ros1.hpp:133
string_utilities::trimDecimalPlaces
std::string trimDecimalPlaces(double num)
Trims decimal places to three.
Definition: string_utilities.cpp:190
TransformStampedMsg
geometry_msgs::TransformStamped TransformStampedMsg
Definition: typedefs_ros1.hpp:103
TwistWithCovarianceStampedMsg
geometry_msgs::msg::TwistWithCovarianceStamped TwistWithCovarianceStampedMsg
Definition: typedefs.hpp:110
ROSaicNodeBase::isIns
bool isIns()
Check if Rx is INS.
Definition: typedefs_ros1.hpp:405
ROSaicNodeBase::settings
const Settings * settings() const
Definition: typedefs_ros1.hpp:199
ROSaicNodeBase::setImprovedVsmHandling
void setImprovedVsmHandling()
Set improved VSM handling to true.
Definition: typedefs_ros1.hpp:400
validValue
bool validValue(T s)
Check if value is not set to Do-Not-Use.
Definition: sbf_utilities.hpp:51
INSNavCartMsg
septentrio_gnss_driver::INSNavCart INSNavCartMsg
Definition: typedefs_ros1.hpp:143
DiagnosticArrayMsg
diagnostic_msgs::DiagnosticArray DiagnosticArrayMsg
Definition: typedefs_ros1.hpp:98
has_block_header
Definition: sbf_utilities.hpp:37
ROSaicNodeBase::callbackOdometry
void callbackOdometry(const nav_msgs::Odometry::ConstPtr &odo)
Definition: typedefs_ros1.hpp:418
InsVsm::ros_variances
std::vector< double > ros_variances
Variances of the 3D velocity (var_x, var_y, var_z)
Definition: settings.hpp:121
GpsStatusMsg
gps_common::GPSStatus GpsStatusMsg
Definition: typedefs_ros1.hpp:106
ROSaicNodeBase::ROSaicNodeBase
ROSaicNodeBase()
Definition: typedefs_ros1.hpp:189
tf2_ros::Buffer
Vector3Msg
geometry_msgs::Vector3 Vector3Msg
Definition: typedefs_ros1.hpp:104
TimestampRos
rclcpp::Time TimestampRos
Definition: typedefs.hpp:103
GpgsvMsg
nmea_msgs::Gpgsv GpgsvMsg
Definition: typedefs_ros1.hpp:139
ROSaicNodeBase::getUint32Param
bool getUint32Param(const std::string &name, uint32_t &val, uint32_t defaultVal) const
Gets an integer or unsigned integer value from the parameter server.
Definition: typedefs_ros1.hpp:229
ros::NodeHandle::subscribe
Subscriber subscribe(const std::string &topic, uint32_t queue_size, const boost::function< void(C)> &callback, const VoidConstPtr &tracked_object=VoidConstPtr(), const TransportHints &transport_hints=TransportHints())
PosCovGeodeticMsg
septentrio_gnss_driver::PosCovGeodetic PosCovGeodeticMsg
Definition: typedefs_ros1.hpp:129
ROS_INFO_STREAM
#define ROS_INFO_STREAM(args)
RfBandMsg
septentrio_gnss_driver::RFBand RfBandMsg
Definition: typedefs_ros1.hpp:120
ROSaicNodeBase::hasHeading
bool hasHeading()
Check if Rx has heading.
Definition: typedefs_ros1.hpp:410
IMUSetupMsg
septentrio_gnss_driver::IMUSetup IMUSetupMsg
Definition: typedefs_ros1.hpp:145
ROSaicNodeBase::settings_
Settings settings_
Settings.
Definition: typedefs.hpp:589
tf2::transformToEigen
Eigen::Isometry3d transformToEigen(const geometry_msgs::Transform &t)
Settings
Settings struct.
Definition: settings.hpp:149
ReceiverTimeMsg
septentrio_gnss_driver::ReceiverTime ReceiverTimeMsg
Definition: typedefs_ros1.hpp:130
ROSaicNodeBase::tf2Publisher_
tf2_ros::TransformBroadcaster tf2Publisher_
Transform publisher.
Definition: typedefs.hpp:599
ImuMsg
sensor_msgs::Imu ImuMsg
Definition: typedefs_ros1.hpp:110
AttEulerMsg
septentrio_gnss_driver::AttEuler AttEulerMsg
Definition: typedefs_ros1.hpp:125
timestampFromRos
Timestamp timestampFromRos(const TimestampRos &tsr)
Convert ROS timestamp to nsec timestamp.
Definition: typedefs_ros1.hpp:166
ROSaicNodeBase::setIsIns
void setIsIns()
Set INS to true.
Definition: typedefs_ros1.hpp:390
MeasEpochChannelType2Msg
septentrio_gnss_driver::MeasEpochChannelType2 MeasEpochChannelType2Msg
Definition: typedefs_ros1.hpp:123
GpggaMsg
nmea_msgs::Gpgga GpggaMsg
Definition: typedefs_ros1.hpp:137
ros::this_node::getName
const ROSCPP_DECL std::string & getName()
log_level
Log level for ROS logging.
Definition: typedefs.hpp:177
transform_listener.h
TimeReferenceMsg
sensor_msgs::TimeReference TimeReferenceMsg
Definition: typedefs_ros1.hpp:109
ROSaicNodeBase::twistSubscriber_
ros::Subscriber twistSubscriber_
Twist subscriber.
Definition: typedefs_ros1.hpp:570
log_level::ERROR
@ ERROR
Definition: typedefs.hpp:183
ROSaicNodeBase::getTime
Timestamp getTime() const
Gets current timestamp.
Definition: typedefs_ros1.hpp:290
Settings::ins_vsm
InsVsm ins_vsm
INS VSM setting.
Definition: settings.hpp:373
ROSaicNodeBase::callbackTwist
void callbackTwist(const TwistWithCovarianceStampedMsg::ConstPtr &twist)
Definition: typedefs_ros1.hpp:425
ros::Time
string_utilities.hpp
Declares lower-level string utility functions used when parsing messages.
timestampToRos
TimestampRos timestampToRos(Timestamp ts)
Convert nsec timestamp to ROS timestamp.
Definition: typedefs_ros1.hpp:154
LocalizationMsg
nav_msgs::Odometry LocalizationMsg
Definition: typedefs_ros1.hpp:111
ROSaicNodeBase::param
bool param(const std::string &name, T &val, const T &defaultVal) const
Gets parameter of type T from the parameter server.
Definition: typedefs_ros1.hpp:252
std
GpsFixMsg
gps_common::GPSFix GpsFixMsg
Definition: typedefs_ros1.hpp:105
ROSaicNodeBase::pNh_
std::shared_ptr< ros::NodeHandle > pNh_
Node handle pointer.
Definition: typedefs_ros1.hpp:554
Capabilities::is_ins
bool is_ins
Wether Rx is INS.
Definition: settings.hpp:380
ROSaicNodeBase::setHasHeading
void setHasHeading()
Set has heading to true.
Definition: typedefs_ros1.hpp:395
log_level::DEBUG
@ DEBUG
Definition: typedefs.hpp:180
ROSaicNodeBase::~ROSaicNodeBase
~ROSaicNodeBase()
Definition: typedefs_ros1.hpp:195
INSNavGeodMsg
septentrio_gnss_driver::INSNavGeod INSNavGeodMsg
Definition: typedefs_ros1.hpp:144
tf2_ros::TransformBroadcaster
crc
Definition: crc.hpp:42
TimeBase< Time, Duration >::toNSec
uint64_t toNSec() const
BaseVectorCartMsg
septentrio_gnss_driver::BaseVectorCart BaseVectorCartMsg
Definition: typedefs_ros1.hpp:115
tf2_geometry_msgs.h
ROSaicNodeBase::twistSubscriber_
rclcpp::Subscription< TwistWithCovarianceStampedMsg >::SharedPtr twistSubscriber_
Twist subscriber.
Definition: typedefs.hpp:603
log_level::LogLevel
LogLevel
Definition: typedefs.hpp:178
VelSensorSetupMsg
septentrio_gnss_driver::VelSensorSetup VelSensorSetupMsg
Definition: typedefs_ros1.hpp:146
ROSaicNodeBase::tfBuffer_
tf2_ros::Buffer tfBuffer_
tf buffer
Definition: typedefs.hpp:607
Settings::publish_only_valid
bool publish_only_valid
Wether to publish only valid messages.
Definition: settings.hpp:257
ExtSensorMeasMsg
septentrio_gnss_driver::ExtSensorMeas ExtSensorMeasMsg
Definition: typedefs_ros1.hpp:147
LocalizationMsg
nav_msgs::msg::Odometry LocalizationMsg
Definition: typedefs.hpp:119
RfStatusMsg
septentrio_gnss_driver::RFStatus RfStatusMsg
Definition: typedefs_ros1.hpp:119
tf2::TransformException
GalAuthStatusMsg
septentrio_gnss_driver::GALAuthStatus GalAuthStatusMsg
Definition: typedefs_ros1.hpp:118
ROSaicNodeBase::queueSize_
uint32_t queueSize_
Publisher queue size.
Definition: typedefs.hpp:597
BlockHeaderMsg
septentrio_gnss_driver::BlockHeader BlockHeaderMsg
Definition: typedefs_ros1.hpp:117
ROSaicNodeBase::lastTfStamp_
TimestampRos lastTfStamp_
Last tf stamp.
Definition: typedefs_ros1.hpp:572
InsVsm::ros_variances_by_parameter
bool ros_variances_by_parameter
Whether or not to use variance defined by ROS parameter.
Definition: settings.hpp:119
ROSaicNodeBase::publishTf
void publishTf(const LocalizationMsg &loc)
Publishing function for tf.
Definition: typedefs_ros1.hpp:322
log_level::INFO
@ INFO
Definition: typedefs.hpp:181
Timestamp
uint64_t Timestamp
Definition: typedefs_ros1.hpp:93
tf2_ros::Buffer::lookupTransform
virtual geometry_msgs::TransformStamped lookupTransform(const std::string &target_frame, const ros::Time &target_time, const std::string &source_frame, const ros::Time &source_time, const std::string &fixed_frame, const ros::Duration timeout) const
ros::NodeHandle
ros::Subscriber
ros::Time::now
static Time now()


septentrio_gnss_driver
Author(s): Tibor Dome, Thomas Emter
autogenerated on Sat May 10 2025 03:03:11