YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
FrameTransformGet_nwc_yarp.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
7
9#include <yarp/os/LogStream.h>
10
11using namespace yarp::dev;
12
13YARP_LOG_COMPONENT(FRAMETRANSFORMGETNWCYARP, "yarp.devices.FrameTransformGet_nwc_yarp")
14
15
16bool FrameTransformGet_nwc_yarp::open(yarp::os::Searchable& config)
17{
19 yCError(FRAMETRANSFORMGETNWCYARP,"Error! YARP Network is not initialized");
20 return false;
21 }
22 std::string prefix;
23 //checking default config params
24 bool default_config = true;
25 if(config.check("default-client")) {
26 default_config = config.find("default-client").asString() == "true";
27 }
28 bool default_server = true;
29 if(config.check("default-server")) {
30 default_server = config.find("default-server").asString() == "true";
31 }
32 // client port configuration
33 if (config.check("nwc_thrift_port_prefix")){
34 prefix = config.find("nwc_thrift_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
35 if(prefix[0] != '/') {prefix = "/"+prefix;}
36 m_thrift_rpcPort_Name = prefix + "/" + m_deviceName + "/thrift";
37 }
38 else {
39 prefix = default_config ? m_defaultConfigPrefix : "";
40 m_thrift_rpcPort_Name = prefix + "/" + m_deviceName + "/thrift";
41 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no nwc_thrift_port_prefix param found. The resulting port name will be: " << m_thrift_rpcPort_Name;
42 }
43
44 //server port configuration
45 if (config.check("nws_thrift_port_prefix")){
46 prefix = config.find("nws_thrift_port_prefix").asString() + (default_server ? m_defaultServerPrefix : "");
47 if(prefix[0] != '/') {prefix = "/"+prefix;}
48 m_thrift_server_rpcPort_Name = prefix + "/thrift";
49 }
50 else {
51 prefix = default_server ? m_defaultServerPrefix : "";
52 m_thrift_server_rpcPort_Name = prefix + "/thrift";
53 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no nws_thrift_port_prefix param found. The resulting port name will be: " << m_thrift_server_rpcPort_Name;
54 }
55 // rpc initialization
56 if(!m_thrift_rpcPort.open(m_thrift_rpcPort_Name))
57 {
58 yCError(FRAMETRANSFORMGETNWCYARP,"Could not open \"%s\" port",m_thrift_rpcPort_Name.c_str());
59 return false;
60 }
61 // connect to server
62 if (!yarp::os::NetworkBase::connect(m_thrift_rpcPort_Name,m_thrift_server_rpcPort_Name))
63 {
64 yCError(FRAMETRANSFORMGETNWCYARP,"Could not connect \"%s\" to \"%s\" port",m_thrift_rpcPort_Name.c_str(), m_thrift_server_rpcPort_Name.c_str());
65 return false;
66 }
67 if (!m_frameTransformStorageGetRPC.yarp().attachAsClient(m_thrift_rpcPort))
68 {
69 yCError(FRAMETRANSFORMGETNWCYARP, "Error! Cannot attach the port as a client");
70 return false;
71 }
72
73 //checking streaming_enabled param
74 if(config.check("streaming_enabled")) {
75 m_streaming_port_enabled = config.find("streaming_enabled").asString() == "true";
76 }
77
78 if (m_streaming_port_enabled)
79 {
80 yCInfo(FRAMETRANSFORMGETNWCYARP) << "Receiving transforms from Yarp port enabled";
81 if (config.check("input_streaming_port_prefix")){
82 prefix = config.find("input_streaming_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
83 if(prefix[0] != '/') {prefix = "/"+prefix;}
84 m_streaming_input_port_name = prefix + "/" + m_deviceName + "/tf:i";
85 }
86 else {
87 prefix = default_config ? m_defaultConfigPrefix : "";
88 m_streaming_input_port_name = prefix + "/" + m_deviceName + "/tf:i";
89 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no input_streaming_port_prefix param found. The resulting port name will be: " << m_streaming_input_port_name;
90 }
91
92 //server port configuration
93 if (config.check("output_streaming_port_prefix")){
94 prefix = config.find("output_streaming_port_prefix").asString() + (default_server ? m_defaultServerPrefix : "");
95 if(prefix[0] != '/') {prefix = "/"+prefix;}
96 m_streaming_output_port_name = prefix + "/tf:o";
97 }
98 else {
99 prefix = default_server ? m_defaultServerPrefix : "";
100 m_streaming_output_port_name = prefix + "/tf:o";
101 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no output_streaming_port_prefix param found. The resulting port name will be: " << m_streaming_output_port_name;
102 }
103
104 // data receiver initialization
105 m_dataReader = new FrameTransformGet_nwc_yarp::DataReader();
106 if(!m_dataReader->open(m_streaming_input_port_name))
107 {
108 yCError(FRAMETRANSFORMGETNWCYARP,"Could not open \"%s\" port",m_streaming_input_port_name.c_str());
109 return false;
110 }
111 // connect to server
112 if (!yarp::os::NetworkBase::connect(m_streaming_output_port_name,m_streaming_input_port_name))
113 {
114 yCError(FRAMETRANSFORMGETNWCYARP,"Could not connect \"%s\" to \"%s\" port",m_streaming_output_port_name.c_str(), m_streaming_input_port_name.c_str());
115 return false;
116 }
117 //useCallback
118 m_dataReader->useCallback();
119 }
120 else
121 {
122 yCInfo(FRAMETRANSFORMGETNWCYARP) << "Receiving transforms from Yarp port NOT enabled";
123 }
124
125 return true;
126}
127
128
130{
131 if (m_streaming_port_enabled)
132 {
133 m_dataReader->close();
134 }
135 m_thrift_rpcPort.close();
136
137 if (m_dataReader)
138 {
139 delete m_dataReader;
140 m_dataReader = nullptr;
141 }
142 return true;
143}
144
145
146ReturnValue FrameTransformGet_nwc_yarp::getTransforms(std::vector<yarp::math::FrameTransform>& transforms) const
147{
148 if (!m_streaming_port_enabled)
149 {
150 return_getAllTransforms retrievedFromRPC = m_frameTransformStorageGetRPC.getTransformsRPC();
151 if(!retrievedFromRPC.retvalue)
152 {
153 yCError(FRAMETRANSFORMGETNWCYARP, "Unable to get transformations");
154 return retrievedFromRPC.retvalue;
155 }
156 transforms = retrievedFromRPC.transforms_list;
157 return retrievedFromRPC.retvalue;
158 }
159 else
160 {
161 if (m_dataReader)
162 {
163 return_getAllTransforms retrievedFromSteaming;
164 m_dataReader->getData(retrievedFromSteaming);
165 transforms = retrievedFromSteaming.transforms_list;
166 return retrievedFromSteaming.retvalue;
167 }
168 yCError(FRAMETRANSFORMGETNWCYARP, "Unable to get transformations");
170 }
171}
172
173bool FrameTransformGet_nwc_yarp::DataReader::getData(return_getAllTransforms& data)
174{
175 m_mutex.lock();
176 data = m_Transforms;
177 m_mutex.unlock();
178 return true;
179}
180
182{
183 m_mutex.lock();
184 m_Transforms = v;
185 m_mutex.unlock();
186}
const yarp::os::LogComponent & FRAMETRANSFORMGETNWCYARP()
frameTransformGet_nwc_yarp: A network wrapper client which converts the input retrieved from a FrameT...
yarp::dev::ReturnValue getTransforms(std::vector< yarp::math::FrameTransform > &transforms) const override
Obtains all frame transforms saved in a storage.
bool close() override
Close the DeviceDriver.
virtual return_getAllTransforms getTransformsRPC()
std::vector< yarp::math::FrameTransform > transforms_list
yarp::dev::ReturnValue retvalue
@ return_value_error_generic
Method was successfully executed.
void onRead(return_getAllTransforms &datum) override
Callback method.
static bool connect(const std::string &src, const std::string &dest, const std::string &carrier="", bool quiet=true)
Request that an output port connect to an input port.
Definition Network.cpp:682
static bool checkNetwork()
Check if the YARP Network is up and running.
Definition Network.cpp:1370
void close() override
Stop port activity.
Definition Port.cpp:363
#define yCInfo(component,...)
#define yCError(component,...)
#define yCWarning(component,...)
#define YARP_LOG_COMPONENT(name,...)
For streams capable of holding different kinds of content, check what they actually have.
The main, catch-all namespace for YARP.
Definition dirs.h:16