include
swri_roscpp
latched_subscriber.h
Go to the documentation of this file.
1
#ifndef SWRI_ROSCPP_LATCHED_SUBSCRIBER_H_
2
#define SWRI_ROSCPP_LATCHED_SUBSCRIBER_H_
3
4
5
#include <
ros/node_handle.h
>
6
#include <
diagnostic_updater/DiagnosticStatusWrapper.h
>
7
#include <
swri_roscpp/subscriber.h
>
8
9
namespace
swri
10
{
11
// THIS CLASS IS DEPRECATED. This class has been replaced with a
12
// secondary interface to Subscriber that is initialized with the
13
// address of a boost::shared_ptr<M const> variable. When a message
14
// is received, it's value is assigned to this pointer. This approach
15
// provides the same simplicity as LatchedSubscriber without confusing
16
// semantics of faking a pointer type.
17
//
18
// This is an extension of the swri::Subscriber class to simplify the
19
// common case where you only care about the most recent value of a
20
// message rather than trying to queue up messages or responding to
21
// events. It has its own callback that is provided to
22
// swri::Subscriber and simply stores the message for the user to
23
// access whenever necessary.
24
template
<
class
M>
25
class
LatchedSubscriber
:
public
Subscriber
26
{
27
private
:
28
template
<
class
M2>
29
struct
LatchedReceiver
30
{
31
boost::shared_ptr<M2 const>
msg_
;
32
void
handleMessage
(
const
boost::shared_ptr<M2 const>
&msg) {
33
msg_
=
msg
;
34
}
35
};
// struct LatchedReceiver
36
37
boost::shared_ptr<LatchedReceiver<M>
>
receiver_
;
38
M
empty_
;
39
40
public
:
41
LatchedSubscriber
();
42
43
// Create a new latched subscriber. This is most like the
44
// swri::Subscriber interface, but you have to provide the template
45
// argument twice (once in your class declaration and at
46
// construction). See the initialize() method for a simpler
47
// alternative.
48
LatchedSubscriber
(
ros::NodeHandle
&nh,
49
const
std::string &topic,
50
const
ros::TransportHints
&transport_hints=
ros::TransportHints
());
51
52
// Creates a latched subscriber in place. This is more convenient
53
// because you don't have to provide the template argument a second
54
// time.
55
void
initialize
(
ros::NodeHandle
&nh,
56
const
std::string &topic,
57
const
ros::TransportHints
&transport_hints=
ros::TransportHints
());
58
59
LatchedSubscriber<M>
&
operator=
(
const
LatchedSubscriber<M>
&other);
60
61
// Return the value of the most recent message. This is guaranteed
62
// to be non-NULL if the messageCount() is non-zero, otherwise it
63
// may be null.
64
const
boost::shared_ptr<M const>
&
data
()
const
;
65
M
const
*
operator->
()
const
;
66
67
void
reset
();
68
};
// class LatchedSubscriber
69
70
template
<
class
M>
71
LatchedSubscriber<M>::LatchedSubscriber
()
72
{
73
// Setup an empty receiver so that we can assume receiver_ is
74
// non-null and avoid a lot of unnecessary NULL checks.
75
receiver_ =
boost::shared_ptr<LatchedReceiver<M>
>(
new
LatchedReceiver<M>());
76
}
77
78
template
<
class
M>
79
LatchedSubscriber<M>::LatchedSubscriber
(
80
ros::NodeHandle
&nh,
81
const
std::string &topic,
82
const
ros::TransportHints
&transport_hints)
83
{
84
ROS_WARN
(
"swri_roscpp::LatchedSubscriber has been deprecated. See header for information."
);
85
receiver_ =
boost::shared_ptr<LatchedReceiver<M>
>(
new
LatchedReceiver<M>());
86
// It seems like there should be a better way to do this?
87
Subscriber::operator=
(
88
Subscriber
(nh, topic, 1,
89
&LatchedReceiver<M>::handleMessage, receiver_.get(), transport_hints));
90
}
91
92
template
<
class
M>
93
void
LatchedSubscriber<M>::initialize
(
94
ros::NodeHandle
&nh,
95
const
std::string &topic,
96
const
ros::TransportHints
&transport_hints)
97
{
98
*
this
=
LatchedSubscriber<M>
(nh, topic, transport_hints);
99
}
100
101
102
template
<
class
M>
103
LatchedSubscriber<M>
&
LatchedSubscriber<M>::operator=
(
const
LatchedSubscriber<M>
&other)
104
{
105
Subscriber::operator=
(other);
106
receiver_ = other.
receiver_
;
107
return
*
this
;
108
}
109
110
template
<
class
M>
111
const
boost::shared_ptr<M const>
&
LatchedSubscriber<M>::data
()
const
112
{
113
return
receiver_->msg_;
114
}
115
116
template
<
class
M>
117
M
const
*
LatchedSubscriber<M>::operator->
()
const
118
{
119
if
(receiver_->msg_) {
120
return
receiver_->msg_.get();
121
}
else
{
122
return
&empty_;
123
}
124
}
125
126
template
<
class
M>
127
void
LatchedSubscriber<M>::reset
()
128
{
129
receiver_->msg_.reset();
130
resetStatistics();
131
}
132
}
// namespace swri
133
#endif // SWRI_ROSCPP_SUBSCRIBER_H_
134
swri::LatchedSubscriber::initialize
void initialize(ros::NodeHandle &nh, const std::string &topic, const ros::TransportHints &transport_hints=ros::TransportHints())
Definition:
latched_subscriber.h:93
node_handle.h
swri::Subscriber
Definition:
subscriber.h:61
swri::Subscriber::operator=
Subscriber & operator=(const Subscriber &other)
Definition:
subscriber.h:256
swri::LatchedSubscriber::LatchedReceiver
Definition:
latched_subscriber.h:29
msg
msg
boost::shared_ptr
swri::LatchedSubscriber::LatchedSubscriber
LatchedSubscriber()
Definition:
latched_subscriber.h:71
swri::LatchedSubscriber::receiver_
boost::shared_ptr< LatchedReceiver< M > > receiver_
Definition:
latched_subscriber.h:37
swri::LatchedSubscriber
Definition:
latched_subscriber.h:25
ros::TransportHints
subscriber.h
swri::LatchedSubscriber::operator=
LatchedSubscriber< M > & operator=(const LatchedSubscriber< M > &other)
Definition:
latched_subscriber.h:103
swri::LatchedSubscriber::reset
void reset()
Definition:
latched_subscriber.h:127
swri::LatchedSubscriber::empty_
M empty_
Definition:
latched_subscriber.h:38
swri::LatchedSubscriber::operator->
const M * operator->() const
Definition:
latched_subscriber.h:117
DiagnosticStatusWrapper.h
ROS_WARN
#define ROS_WARN(...)
swri::LatchedSubscriber::data
const boost::shared_ptr< M const > & data() const
Definition:
latched_subscriber.h:111
swri
Definition:
dynamic_parameters.h:51
swri::LatchedSubscriber::LatchedReceiver::msg_
boost::shared_ptr< M2 const > msg_
Definition:
latched_subscriber.h:31
ros::NodeHandle
swri::LatchedSubscriber::LatchedReceiver::handleMessage
void handleMessage(const boost::shared_ptr< M2 const > &msg)
Definition:
latched_subscriber.h:32
swri_roscpp
Author(s): P. J. Reed
autogenerated on Fri Aug 2 2024 08:39:15