include
ros
topic.h
Go to the documentation of this file.
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2009, Willow Garage, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of Willow Garage, Inc. nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35
#ifndef ROSCPP_TOPIC_H
36
#define ROSCPP_TOPIC_H
37
38
#include "common.h"
39
#include "
node_handle.h
"
40
#include <boost/shared_ptr.hpp>
41
42
namespace
ros
43
{
44
namespace
topic
45
{
46
50
ROSCPP_DECL
void
waitForMessageImpl
(
SubscribeOptions
& ops,
const
boost::function<
bool
(
void
)>& ready_pred,
NodeHandle
& nh,
ros::Duration
timeout);
51
52
template
<
class
M>
53
class
SubscribeHelper
54
{
55
public
:
56
typedef
boost::shared_ptr<M const>
MConstPtr
;
57
void
callback
(
const
MConstPtr
& message)
58
{
59
message_
= message;
60
}
61
62
bool
hasMessage
()
63
{
64
return
static_cast<
bool
>
(
message_
);
65
}
66
67
MConstPtr
getMessage
()
68
{
69
return
message_
;
70
}
71
72
private
:
73
MConstPtr
message_
;
74
};
75
85
template
<
class
M>
86
boost::shared_ptr<M const>
waitForMessage
(
const
std::string& topic,
NodeHandle
& nh,
ros::Duration
timeout)
87
{
88
SubscribeHelper<M>
helper;
89
SubscribeOptions
ops;
90
ops.template init<M>(topic, 1, boost::bind(&
SubscribeHelper<M>::callback
, &helper, boost::placeholders::_1));
91
92
waitForMessageImpl
(ops, boost::bind(&
SubscribeHelper<M>::hasMessage
, &helper), nh, timeout);
93
94
return
helper.
getMessage
();
95
}
96
104
template
<
class
M>
105
boost::shared_ptr<M const>
waitForMessage
(
const
std::string& topic)
106
{
107
ros::NodeHandle
nh;
108
return
waitForMessage<M>(topic, nh,
ros::Duration
());
109
}
110
119
template
<
class
M>
120
boost::shared_ptr<M const>
waitForMessage
(
const
std::string& topic,
ros::Duration
timeout)
121
{
122
ros::NodeHandle
nh;
123
return
waitForMessage<M>(topic, nh, timeout);
124
}
125
134
template
<
class
M>
135
boost::shared_ptr<M const>
waitForMessage
(
const
std::string& topic,
ros::NodeHandle
& nh)
136
{
137
return
waitForMessage<M>(topic, nh,
ros::Duration
());
138
}
139
140
}
// namespace topic
141
}
// namespace ros
142
143
#endif // ROSCPP_TOPIC_H
boost::shared_ptr
ros::topic::SubscribeHelper
Definition:
topic.h:53
ros
ros::topic::waitForMessageImpl
ROSCPP_DECL void waitForMessageImpl(SubscribeOptions &ops, const boost::function< bool(void)> &ready_pred, NodeHandle &nh, ros::Duration timeout)
Internal method, do not use.
Definition:
topic.cpp:43
ros::NodeHandle
roscpp's interface for creating subscribers, publishers, etc.
Definition:
node_handle.h:85
ros::topic::SubscribeHelper::getMessage
MConstPtr getMessage()
Definition:
topic.h:67
ros::topic::SubscribeHelper::hasMessage
bool hasMessage()
Definition:
topic.h:62
ros::topic::SubscribeHelper::callback
void callback(const MConstPtr &message)
Definition:
topic.h:57
ros::SubscribeOptions
Encapsulates all options available for creating a Subscriber.
Definition:
subscribe_options.h:43
ros::topic::SubscribeHelper::MConstPtr
boost::shared_ptr< M const > MConstPtr
Definition:
topic.h:56
ros::topic::SubscribeHelper::message_
MConstPtr message_
Definition:
topic.h:73
ros::topic::waitForMessage
boost::shared_ptr< M const > waitForMessage(const std::string &topic, NodeHandle &nh, ros::Duration timeout)
Wait for a single message to arrive on a topic, with timeout.
Definition:
topic.h:86
ros::Duration
node_handle.h
roscpp
Author(s): Morgan Quigley, Josh Faust, Brian Gerkey, Troy Straszheim, Dirk Thomas
, Jacob Perron
autogenerated on Sat Sep 14 2024 02:59:36