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 <cstdint>
29 #include <list>
30 #include <map>
31 #include <random>
32 #include <string>
33 #include <utility>
34 #include <vector>
35 
36 #include <scip2/scip2.h>
37 #include <scip2/walltime.h>
38 
40 #include <urg_stamped/ros_logger.h>
41 
42 namespace urg_stamped
43 {
45 {
46 public:
49 
50  inline DeviceOriginAt(const ros::Time origin, const ros::Time at)
51  : origin_(origin)
52  , at_(at)
53  {
54  }
55 
56  inline bool operator<(const DeviceOriginAt& b) const
57  {
58  return origin_ < b.origin_;
59  }
60 };
61 
63 {
64 protected:
72 
73  sensor_msgs::LaserScan msg_base_;
74  uint32_t step_min_;
75  uint32_t step_max_;
77 
80 
82  bool failed_;
83 
86  enum class DelayEstimState
87  {
88  IDLE,
92  ESTIMATING,
93  EXITING,
94  };
96  std::pair<std::string, boost::posix_time::ptime> time_tm_request_;
98  uint32_t tm_key_;
99 
101 
102  std::default_random_engine random_engine_;
104 
106  {
108  : abnormal_error(0)
109  , error(0)
110  {
111  }
113  int error;
114  };
122 
127 
129 
131 
132  bool is_uust2_;
134 
135  void cbM(
136  const boost::posix_time::ptime& time_read,
137  const std::string& echo_back,
138  const std::string& status,
139  const scip2::ScanData& scan,
140  const bool has_intensity);
141  void cbTMSend(
142  const boost::posix_time::ptime& time_send,
143  const std::string& cmd);
144  void cbTM(
145  const boost::posix_time::ptime& time_read,
146  const std::string& echo_back,
147  const std::string& status,
148  const scip2::Timestamp& time_device);
149  void cbPP(
150  const boost::posix_time::ptime& time_read,
151  const std::string& echo_back,
152  const std::string& status,
153  const std::map<std::string, std::string>& params);
154  void cbVV(
155  const boost::posix_time::ptime& time_read,
156  const std::string& echo_back,
157  const std::string& status,
158  const std::map<std::string, std::string>& params);
159  void cbIISend(const boost::posix_time::ptime& time_send);
160  void cbII(
161  const boost::posix_time::ptime& time_read,
162  const std::string& echo_back,
163  const std::string& status,
164  const std::map<std::string, std::string>& params);
165  void cbQT(
166  const boost::posix_time::ptime& time_read,
167  const std::string& echo_back,
168  const std::string& status);
169  void cbRB(
170  const boost::posix_time::ptime& time_read,
171  const std::string& echo_back,
172  const std::string& status);
173  void cbRS(
174  const boost::posix_time::ptime& time_read,
175  const std::string& echo_back,
176  const std::string& status);
177  void cbConnect();
178  void cbClose();
179 
180  void sendII();
181  void timeSync(const ros::TimerEvent& event = ros::TimerEvent());
182  void estimateSensorClock(const ros::TimerEvent& event = ros::TimerEvent());
183  void retryTM(const ros::TimerEvent& event = ros::TimerEvent());
184  void publishStatus();
185 
186  void errorCountIncrement(const std::string& status = "");
187 
188  void softReset();
189  void hardReset();
190  void sleepRandom(const double min, const double max);
191  void sendTM1();
192 
193  void cbSyncStart(const std_msgs::Header::ConstPtr& msg);
194  void publishSyncStart();
195 
196 public:
197  UrgStampedNode();
198  void spin();
199 };
200 } // namespace urg_stamped
201 
202 #endif // URG_STAMPED_URG_STAMPED_H
urg_stamped::DeviceOriginAt::origin_
ros::Time origin_
Definition: urg_stamped.h:47
scip2.h
urg_stamped::UrgStampedNode::ResponseErrorCount
Definition: urg_stamped.h:105
urg_stamped::UrgStampedNode::publishSyncStart
void publishSyncStart()
Definition: urg_stamped.cpp:773
urg_stamped::UrgStampedNode::UrgStampedNode
UrgStampedNode()
Definition: urg_stamped.cpp:781
scip2::ScanData
Definition: stream.h:33
urg_stamped::UrgStampedNode::uust2_stamp_offset_
ros::Duration uust2_stamp_offset_
Definition: urg_stamped.h:133
urg_stamped::UrgStampedNode::spin
void spin()
Definition: urg_stamped.cpp:910
urg_stamped::UrgStampedNode::last_sync_time_
ros::Time last_sync_time_
Definition: urg_stamped.h:103
ros::Publisher
urg_stamped::UrgStampedNode::cbII
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)
Definition: urg_stamped.cpp:415
urg_stamped::UrgStampedNode::scip_
scip2::Protocol::Ptr scip_
Definition: urg_stamped.h:79
urg_stamped::DeviceOriginAt
Definition: urg_stamped.h:44
urg_stamped::UrgStampedNode::step_max_
uint32_t step_max_
Definition: urg_stamped.h:75
urg_stamped::UrgStampedNode::cbTM
void cbTM(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status, const scip2::Timestamp &time_device)
Definition: urg_stamped.cpp:152
urg_stamped::UrgStampedNode::nh_
ros::NodeHandle nh_
Definition: urg_stamped.h:65
urg_stamped::UrgStampedNode::sendTM1
void sendTM1()
Definition: urg_stamped.cpp:716
urg_stamped::UrgStampedNode::DelayEstimState::STOPPING_SCAN
@ STOPPING_SCAN
ros.h
scip2::Walltime< 24 >
urg_stamped::UrgStampedNode::scan_drop_count_
int scan_drop_count_
Definition: urg_stamped.h:118
urg_stamped::UrgStampedNode::cbSyncStart
void cbSyncStart(const std_msgs::Header::ConstPtr &msg)
Definition: urg_stamped.cpp:748
urg_stamped::UrgStampedNode::cbVV
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)
Definition: urg_stamped.cpp:304
urg_stamped::UrgStampedNode::est_
device_state_estimator::Estimator::Ptr est_
Definition: urg_stamped.h:130
urg_stamped::UrgStampedNode::error_count_max_
int error_count_max_
Definition: urg_stamped.h:117
urg_stamped::UrgStampedNode::estimateSensorClock
void estimateSensorClock(const ros::TimerEvent &event=ros::TimerEvent())
Definition: urg_stamped.cpp:585
urg_stamped::UrgStampedNode::errorCountIncrement
void errorCountIncrement(const std::string &status="")
Definition: urg_stamped.cpp:647
urg_stamped::UrgStampedNode::cbQT
void cbQT(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status)
Definition: urg_stamped.cpp:480
urg_stamped::UrgStampedNode::cbRB
void cbRB(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status)
Definition: urg_stamped.cpp:501
urg_stamped::UrgStampedNode::tm_start_time_
ros::Time tm_start_time_
Definition: urg_stamped.h:97
urg_stamped::UrgStampedNode::cbClose
void cbClose()
Definition: urg_stamped.cpp:566
urg_stamped::device_state_estimator::Estimator::Ptr
std::shared_ptr< Estimator > Ptr
Definition: device_state_estimator.h:258
urg_stamped::UrgStampedNode::publish_intensity_
bool publish_intensity_
Definition: urg_stamped.h:81
urg_stamped::UrgStampedNode::DelayEstimState::EXITING
@ EXITING
urg_stamped::UrgStampedNode::ResponseErrorCount::abnormal_error
int abnormal_error
Definition: urg_stamped.h:112
urg_stamped::UrgStampedNode::cbConnect
void cbConnect()
Definition: urg_stamped.cpp:560
urg_stamped::UrgStampedNode::time_tm_request_
std::pair< std::string, boost::posix_time::ptime > time_tm_request_
Definition: urg_stamped.h:96
urg_stamped::UrgStampedNode::random_engine_
std::default_random_engine random_engine_
Definition: urg_stamped.h:102
urg_stamped::UrgStampedNode::device_
scip2::Connection::Ptr device_
Definition: urg_stamped.h:78
urg_stamped::UrgStampedNode::tm_success_
bool tm_success_
Definition: urg_stamped.h:116
urg_stamped::UrgStampedNode::clock_estim_interval_
ros::Duration clock_estim_interval_
Definition: urg_stamped.h:85
urg_stamped::UrgStampedNode::DelayEstimState::ESTIMATING
@ ESTIMATING
urg_stamped::DeviceOriginAt::operator<
bool operator<(const DeviceOriginAt &b) const
Definition: urg_stamped.h:56
urg_stamped::UrgStampedNode::sendII
void sendII()
Definition: urg_stamped.cpp:580
walltime.h
urg_stamped::UrgStampedNode::cbM
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:48
urg_stamped::DeviceOriginAt::DeviceOriginAt
DeviceOriginAt(const ros::Time origin, const ros::Time at)
Definition: urg_stamped.h:50
params
std::vector< urg_sim::URGSimulator::Params > params({ { .model=urg_sim::URGSimulator::Model::UTM,.boot_duration=0.01,.comm_delay_base=0.0002,.comm_delay_sigma=0.0004,.scan_interval=0.02505,.clock_rate=1.0,.hex_ii_timestamp=false,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UTM,.boot_duration=0.01,.comm_delay_base=0.0002,.comm_delay_sigma=0.0004,.scan_interval=0.02505,.clock_rate=1.001,.hex_ii_timestamp=false,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UTM,.boot_duration=0.01,.comm_delay_base=0.0002,.comm_delay_sigma=0.0004,.scan_interval=0.02505,.clock_rate=0.999,.hex_ii_timestamp=false,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UST_UUST1,.boot_duration=0.01,.comm_delay_base=0.0005,.comm_delay_sigma=0.0005,.scan_interval=0.02505,.clock_rate=1.0,.hex_ii_timestamp=true,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UST_UUST1,.boot_duration=0.01,.comm_delay_base=0.0005,.comm_delay_sigma=0.0005,.scan_interval=0.02505,.clock_rate=1.001,.hex_ii_timestamp=true,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UST_UUST1,.boot_duration=0.01,.comm_delay_base=0.0005,.comm_delay_sigma=0.0005,.scan_interval=0.02505,.clock_rate=0.999,.hex_ii_timestamp=true,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UST_UUST2,.boot_duration=0.01,.comm_delay_base=0.0002,.comm_delay_sigma=0.0002,.scan_interval=0.02505,.clock_rate=1.0,.hex_ii_timestamp=true,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UST_UUST2,.boot_duration=0.01,.comm_delay_base=0.0002,.comm_delay_sigma=0.0002,.scan_interval=0.02505,.clock_rate=1.001,.hex_ii_timestamp=true,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, { .model=urg_sim::URGSimulator::Model::UST_UUST2,.boot_duration=0.01,.comm_delay_base=0.0002,.comm_delay_sigma=0.0002,.scan_interval=0.02505,.clock_rate=0.999,.hex_ii_timestamp=true,.angle_resolution=1440,.angle_min=0,.angle_max=1080,.angle_front=540, }, })
urg_stamped::UrgStampedNode::msg_base_
sensor_msgs::LaserScan msg_base_
Definition: urg_stamped.h:73
urg_stamped::UrgStampedNode
Definition: urg_stamped.h:62
urg_stamped::UrgStampedNode::pnh_
ros::NodeHandle pnh_
Definition: urg_stamped.h:66
urg_stamped::UrgStampedNode::error_count_
ResponseErrorCount error_count_
Definition: urg_stamped.h:115
ros::TimerEvent
urg_stamped::UrgStampedNode::hardReset
void hardReset()
Definition: urg_stamped.cpp:704
urg_stamped::UrgStampedNode::is_uust2_
bool is_uust2_
Definition: urg_stamped.h:132
urg_stamped::UrgStampedNode::tm_try_max_
int tm_try_max_
Definition: urg_stamped.h:125
urg_stamped::UrgStampedNode::walltime_
scip2::Walltime< 24 > walltime_
Definition: urg_stamped.h:100
urg_stamped::UrgStampedNode::tm_key_
uint32_t tm_key_
Definition: urg_stamped.h:98
urg_stamped::UrgStampedNode::next_sync_
ros::Time next_sync_
Definition: urg_stamped.h:84
urg_stamped::UrgStampedNode::step_min_
uint32_t step_min_
Definition: urg_stamped.h:74
urg_stamped::UrgStampedNode::DelayEstimState
DelayEstimState
Definition: urg_stamped.h:86
urg_stamped::UrgStampedNode::retryTM
void retryTM(const ros::TimerEvent &event=ros::TimerEvent())
Definition: urg_stamped.cpp:606
urg_stamped::UrgStampedNode::DelayEstimState::STATE_CHECKING
@ STATE_CHECKING
urg_stamped::UrgStampedNode::delay_estim_state_
DelayEstimState delay_estim_state_
Definition: urg_stamped.h:95
urg_stamped::DeviceOriginAt::at_
ros::Time at_
Definition: urg_stamped.h:48
urg_stamped::UrgStampedNode::publishStatus
void publishStatus()
Definition: urg_stamped.cpp:726
urg_stamped::UrgStampedNode::ResponseErrorCount::error
int error
Definition: urg_stamped.h:113
scip2::Timestamp
Definition: time_sync.h:31
ros::Time
scip2::Protocol::Ptr
std::shared_ptr< Protocol > Ptr
Definition: protocol.h:74
urg_stamped::UrgStampedNode::cbIISend
void cbIISend(const boost::posix_time::ptime &time_send)
urg_stamped::UrgStampedNode::pub_sync_start_
ros::Publisher pub_sync_start_
Definition: urg_stamped.h:69
urg_stamped::UrgStampedNode::sub_sync_start_
ros::Subscriber sub_sync_start_
Definition: urg_stamped.h:70
urg_stamped::UrgStampedNode::cmd_resetting_
bool cmd_resetting_
Definition: urg_stamped.h:128
urg_stamped::UrgStampedNode::sleepRandom
void sleepRandom(const double min, const double max)
Definition: urg_stamped.cpp:710
scip2::Connection::Ptr
std::shared_ptr< Connection > Ptr
Definition: connection.h:68
urg_stamped::UrgStampedNode::pub_status_
ros::Publisher pub_status_
Definition: urg_stamped.h:68
urg_stamped::UrgStampedNode::fallback_on_continuous_scan_drop_
int fallback_on_continuous_scan_drop_
Definition: urg_stamped.h:120
urg_stamped::UrgStampedNode::failed_
bool failed_
Definition: urg_stamped.h:82
urg_stamped::UrgStampedNode::softReset
void softReset()
Definition: urg_stamped.cpp:698
urg_stamped::UrgStampedNode::log_scan_drop_more_than_
int log_scan_drop_more_than_
Definition: urg_stamped.h:121
device_state_estimator.h
urg_stamped::UrgStampedNode::timer_retry_tm_
ros::Timer timer_retry_tm_
Definition: urg_stamped.h:71
urg_stamped::UrgStampedNode::cbPP
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)
Definition: urg_stamped.cpp:260
urg_stamped::UrgStampedNode::tm_try_count_
int tm_try_count_
Definition: urg_stamped.h:126
urg_stamped::UrgStampedNode::scan_drop_continuous_
int scan_drop_continuous_
Definition: urg_stamped.h:119
urg_stamped::UrgStampedNode::cbRS
void cbRS(const boost::posix_time::ptime &time_read, const std::string &echo_back, const std::string &status)
Definition: urg_stamped.cpp:525
urg_stamped
Definition: device_state_estimator.h:35
urg_stamped::UrgStampedNode::tm_command_interval_
ros::Duration tm_command_interval_
Definition: urg_stamped.h:123
urg_stamped::UrgStampedNode::pub_scan_
ros::Publisher pub_scan_
Definition: urg_stamped.h:67
urg_stamped::UrgStampedNode::DelayEstimState::ESTIMATION_STARTING
@ ESTIMATION_STARTING
urg_stamped::UrgStampedNode::cbTMSend
void cbTMSend(const boost::posix_time::ptime &time_send, const std::string &cmd)
Definition: urg_stamped.cpp:146
urg_stamped::UrgStampedNode::ideal_scan_interval_
ros::Duration ideal_scan_interval_
Definition: urg_stamped.h:76
urg_stamped::UrgStampedNode::timeSync
void timeSync(const ros::TimerEvent &event=ros::TimerEvent())
ros::Duration
ros::Timer
urg_stamped::UrgStampedNode::last_measurement_state_
std::string last_measurement_state_
Definition: urg_stamped.h:124
ros::NodeHandle
ros::Subscriber
urg_stamped::UrgStampedNode::ResponseErrorCount::ResponseErrorCount
ResponseErrorCount()
Definition: urg_stamped.h:107
ros_logger.h
urg_stamped::UrgStampedNode::DelayEstimState::IDLE
@ IDLE


urg_stamped
Author(s): Atsushi Watanabe
autogenerated on Wed Dec 18 2024 03:10:57