urg_stamped.h
Go to the documentation of this file.
1 /*
2  * Copyright 2018-2021 The urg_stamped Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef URG_STAMPED_URG_STAMPED_H
18 #define URG_STAMPED_URG_STAMPED_H
19 
20 #include <ros/ros.h>
21 #include <sensor_msgs/LaserScan.h>
22 
23 #include <boost/bind/bind.hpp>
24 #include <boost/format.hpp>
25 #include <boost/thread.hpp>
26 
27 #include <algorithm>
28 #include <list>
29 #include <map>
30 #include <random>
31 #include <string>
32 #include <vector>
33 
34 #include <scip2/scip2.h>
35 #include <scip2/walltime.h>
36 
41 #include <urg_stamped/ros_logger.h>
42 
43 namespace urg_stamped
44 {
46 {
47 protected:
54 
55  sensor_msgs::LaserScan msg_base_;
56  uint32_t step_min_;
57  uint32_t step_max_;
58 
61 
63  bool failed_;
64 
65  enum class DelayEstimState
66  {
67  IDLE,
71  ESTIMATING,
72  EXITING,
73  };
75  boost::posix_time::ptime time_tm_request;
76  std::list<ros::Duration> communication_delays_;
77  std::list<ros::Time> device_time_origins_;
79  size_t tm_iter_num_;
83 
84  boost::posix_time::ptime time_ii_request;
85  std::vector<ros::Duration> on_scan_communication_delays_;
86 
89 
91 
92  std::default_random_engine random_engine_;
93  std::uniform_real_distribution<double> sync_interval_;
95 
101 
103  {
105  : abnormal_error(0)
106  , error(0)
107  {
108  }
110  int error;
111  };
115 
120 
121  void cbM(
122  const boost::posix_time::ptime& time_read,
123  const std::string& echo_back,
124  const std::string& status,
125  const scip2::ScanData& scan,
126  const bool has_intensity);
127  void cbTMSend(const boost::posix_time::ptime& time_send);
128  void cbTM(
129  const boost::posix_time::ptime& time_read,
130  const std::string& echo_back,
131  const std::string& status,
132  const scip2::Timestamp& time_device);
133  void cbPP(
134  const boost::posix_time::ptime& time_read,
135  const std::string& echo_back,
136  const std::string& status,
137  const std::map<std::string, std::string>& params);
138  void cbVV(
139  const boost::posix_time::ptime& time_read,
140  const std::string& echo_back,
141  const std::string& status,
142  const std::map<std::string, std::string>& params);
143  void cbIISend(const boost::posix_time::ptime& time_send);
144  void cbII(
145  const boost::posix_time::ptime& time_read,
146  const std::string& echo_back,
147  const std::string& status,
148  const std::map<std::string, std::string>& params);
149  void cbQT(
150  const boost::posix_time::ptime& time_read,
151  const std::string& echo_back,
152  const std::string& status);
153  void cbRB(
154  const boost::posix_time::ptime& time_read,
155  const std::string& echo_back,
156  const std::string& status);
157  void cbRS(
158  const boost::posix_time::ptime& time_read,
159  const std::string& echo_back,
160  const std::string& status);
161  void cbConnect();
162  void cbClose();
163 
164  void sendII();
165  void timeSync(const ros::TimerEvent& event = ros::TimerEvent());
166  void delayEstimation(const ros::TimerEvent& event = ros::TimerEvent());
167  void retryTM(const ros::TimerEvent& event = ros::TimerEvent());
168 
169  void errorCountIncrement(const std::string& status = "");
170 
172  const boost::posix_time::ptime& time_response,
173  const uint64_t& device_timestamp);
174 
175  void softReset();
176  void hardReset();
177  void sleepRandom(const double min, const double max);
178 
179 public:
180  UrgStampedNode();
181  void spin();
182 };
183 } // namespace urg_stamped
184 
185 #endif // URG_STAMPED_URG_STAMPED_H
void cbTM(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status, const scip2::Timestamp &time_device)
std::shared_ptr< Connection > Ptr
Definition: connection.h:66
scip2::Protocol::Ptr scip_
Definition: urg_stamped.h:60
scip2::Walltime< 24 > walltime_
Definition: urg_stamped.h:90
void cbM(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status, const scip2::ScanData &scan, const bool has_intensity)
Definition: urg_stamped.cpp:46
bool detectDeviceTimeJump(const boost::posix_time::ptime &time_response, const uint64_t &device_timestamp)
void cbQT(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status)
sensor_msgs::LaserScan msg_base_
Definition: urg_stamped.h:55
void cbTMSend(const boost::posix_time::ptime &time_send)
void cbRS(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status)
void cbPP(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status, const std::map< std::string, std::string > &params)
DelayEstimState delay_estim_state_
Definition: urg_stamped.h:74
void cbRB(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status)
void cbVV(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status, const std::map< std::string, std::string > &params)
std::uniform_real_distribution< double > sync_interval_
Definition: urg_stamped.h:93
ResponseErrorCount error_count_
Definition: urg_stamped.h:112
void retryTM(const ros::TimerEvent &event=ros::TimerEvent())
std::vector< ros::Duration > on_scan_communication_delays_
Definition: urg_stamped.h:85
std::default_random_engine random_engine_
Definition: urg_stamped.h:92
std::list< ros::Duration > communication_delays_
Definition: urg_stamped.h:76
double communication_delay_filter_alpha_
Definition: urg_stamped.h:82
std::list< ros::Time > device_time_origins_
Definition: urg_stamped.h:77
ros::Duration tm_command_interval_
Definition: urg_stamped.h:116
boost::posix_time::ptime time_ii_request
Definition: urg_stamped.h:84
FirstOrderHPF< double > timestamp_hpf_
Definition: urg_stamped.h:98
boost::posix_time::ptime time_tm_request
Definition: urg_stamped.h:75
ros::Duration estimated_communication_delay_
Definition: urg_stamped.h:78
std::shared_ptr< Protocol > Ptr
Definition: protocol.h:67
void timeSync(const ros::TimerEvent &event=ros::TimerEvent())
std::string last_measurement_state_
Definition: urg_stamped.h:117
void delayEstimation(const ros::TimerEvent &event=ros::TimerEvent())
device_time_origin::DriftedTime device_time_origin_
Definition: urg_stamped.h:87
void cbII(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status, const std::map< std::string, std::string > &params)
FirstOrderLPF< double > timestamp_lpf_
Definition: urg_stamped.h:97
void sleepRandom(const double min, const double max)
void cbIISend(const boost::posix_time::ptime &time_send)
void errorCountIncrement(const std::string &status="")
TimestampMovingAverage timestamp_moving_average_
Definition: urg_stamped.h:100
ros::Publisher pub_scan_
Definition: urg_stamped.h:50
TimestampOutlierRemover timestamp_outlier_removal_
Definition: urg_stamped.h:99
std::ostream & error()
Definition: logger.cpp:105
scip2::Connection::Ptr device_
Definition: urg_stamped.h:59


urg_stamped
Author(s): Atsushi Watanabe
autogenerated on Mon Jul 3 2023 02:11:32