YARP
Yet Another Robot Platform
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
11YARP_LOG_COMPONENT(FRAMETRANSFORMGETNWCYARP, "yarp.devices.FrameTransformGet_nwc_yarp")
12
13
14bool FrameTransformGet_nwc_yarp::open(yarp::os::Searchable& config)
15{
17 yCError(FRAMETRANSFORMGETNWCYARP,"Error! YARP Network is not initialized");
18 return false;
19 }
20 std::string prefix;
21 //checking default config params
22 bool default_config = true;
23 if(config.check("default-client")) {
24 default_config = config.find("default-client").asString() == "true";
25 }
26 bool default_server = true;
27 if(config.check("default-server")) {
28 default_server = config.find("default-server").asString() == "true";
29 }
30 // client port configuration
31 if (config.check("nwc_thrift_port_prefix")){
32 prefix = config.find("nwc_thrift_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
33 if(prefix[0] != '/') {prefix = "/"+prefix;}
34 m_thrift_rpcPort_Name = prefix + "/" + m_deviceName + "/thrift";
35 }
36 else {
37 prefix = default_config ? m_defaultConfigPrefix : "";
38 m_thrift_rpcPort_Name = prefix + "/" + m_deviceName + "/thrift";
39 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no nwc_thrift_port_prefix param found. The resulting port name will be: " << m_thrift_rpcPort_Name;
40 }
41
42 //server port configuration
43 if (config.check("nws_thrift_port_prefix")){
44 prefix = config.find("nws_thrift_port_prefix").asString() + (default_server ? m_defaultServerPrefix : "");
45 if(prefix[0] != '/') {prefix = "/"+prefix;}
46 m_thrift_server_rpcPort_Name = prefix + "/thrift";
47 }
48 else {
49 prefix = default_server ? m_defaultServerPrefix : "";
50 m_thrift_server_rpcPort_Name = prefix + "/thrift";
51 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no nws_thrift_port_prefix param found. The resulting port name will be: " << m_thrift_server_rpcPort_Name;
52 }
53 // rpc inizialisation
54 if(!m_thrift_rpcPort.open(m_thrift_rpcPort_Name))
55 {
56 yCError(FRAMETRANSFORMGETNWCYARP,"Could not open \"%s\" port",m_thrift_rpcPort_Name.c_str());
57 return false;
58 }
59 // connect to server
60 if (!yarp::os::NetworkBase::connect(m_thrift_rpcPort_Name,m_thrift_server_rpcPort_Name))
61 {
62 yCError(FRAMETRANSFORMGETNWCYARP,"Could not connect \"%s\" to \"%s\" port",m_thrift_rpcPort_Name.c_str(), m_thrift_server_rpcPort_Name.c_str());
63 return false;
64 }
65 if (!m_frameTransformStorageGetRPC.yarp().attachAsClient(m_thrift_rpcPort))
66 {
67 yCError(FRAMETRANSFORMGETNWCYARP, "Error! Cannot attach the port as a client");
68 return false;
69 }
70
71 //checking streaming_enabled param
72 if(config.check("streaming_enabled")) {
73 m_streaming_port_enabled = config.find("streaming_enabled").asString() == "true";
74 }
75
76 if (m_streaming_port_enabled)
77 {
78 yCInfo(FRAMETRANSFORMGETNWCYARP) << "Receiving transforms from Yarp port enabled";
79 if (config.check("input_streaming_port_prefix")){
80 prefix = config.find("input_streaming_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
81 if(prefix[0] != '/') {prefix = "/"+prefix;}
82 m_streaming_input_port_name = prefix + "/" + m_deviceName + "/tf:i";
83 }
84 else {
85 prefix = default_config ? m_defaultConfigPrefix : "";
86 m_streaming_input_port_name = prefix + "/" + m_deviceName + "/tf:i";
87 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no input_streaming_port_prefix param found. The resulting port name will be: " << m_streaming_input_port_name;
88 }
89
90 //server port configuration
91 if (config.check("output_streaming_port_prefix")){
92 prefix = config.find("output_streaming_port_prefix").asString() + (default_server ? m_defaultServerPrefix : "");
93 if(prefix[0] != '/') {prefix = "/"+prefix;}
94 m_streaming_output_port_name = prefix + "/tf:o";
95 }
96 else {
97 prefix = default_server ? m_defaultServerPrefix : "";
98 m_streaming_output_port_name = prefix + "/tf:o";
99 yCWarning(FRAMETRANSFORMGETNWCYARP) << "no output_streaming_port_prefix param found. The resulting port name will be: " << m_streaming_output_port_name;
100 }
101
102 // data receiver initialization
103 m_dataReader = new FrameTransformGet_nwc_yarp::DataReader();
104 if(!m_dataReader->open(m_streaming_input_port_name))
105 {
106 yCError(FRAMETRANSFORMGETNWCYARP,"Could not open \"%s\" port",m_streaming_input_port_name.c_str());
107 return false;
108 }
109 // connect to server
110 if (!yarp::os::NetworkBase::connect(m_streaming_output_port_name,m_streaming_input_port_name))
111 {
112 yCError(FRAMETRANSFORMGETNWCYARP,"Could not connect \"%s\" to \"%s\" port",m_streaming_output_port_name.c_str(), m_streaming_input_port_name.c_str());
113 return false;
114 }
115 //useCallback
116 m_dataReader->useCallback();
117 }
118 else
119 {
120 yCInfo(FRAMETRANSFORMGETNWCYARP) << "Receiving transforms from Yarp port NOT enabled";
121 }
122
123 return true;
124}
125
126
128{
129 if (m_streaming_port_enabled)
130 {
131 m_dataReader->interrupt();
132 m_dataReader->close();
133 }
134 m_thrift_rpcPort.close();
135 return true;
136}
137
138
139bool FrameTransformGet_nwc_yarp::getTransforms(std::vector<yarp::math::FrameTransform>& transforms) const
140{
141 if (!m_streaming_port_enabled)
142 {
143 return_getAllTransforms retrievedFromRPC = m_frameTransformStorageGetRPC.getTransformsRPC();
144 if(!retrievedFromRPC.retvalue)
145 {
146 yCError(FRAMETRANSFORMGETNWCYARP, "Unable to get transformations");
147 return false;
148 }
149 transforms = retrievedFromRPC.transforms_list;
150 return true;
151 }
152 else
153 {
154 if (m_dataReader)
155 {
156 return_getAllTransforms retrievedFromSteaming;
157 m_dataReader->getData(retrievedFromSteaming);
158 transforms = retrievedFromSteaming.transforms_list;
159 return true;
160 }
161 yCError(FRAMETRANSFORMGETNWCYARP, "Unable to get transformations");
162 return false;
163 }
164}
165
166bool FrameTransformGet_nwc_yarp::DataReader::getData(return_getAllTransforms& data)
167{
168 m_mutex.lock();
169 data = m_Transforms;
170 m_mutex.unlock();
171 return true;
172}
173
175{
176 m_mutex.lock();
177 m_Transforms = v;
178 m_mutex.unlock();
179}
const yarp::os::LogComponent & FRAMETRANSFORMGETNWCYARP()
frameTransformGet_nwc_yarp: A network wrapper client which converts the input retrieved from a FrameT...
bool 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
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:1377
void close() override
Stop port activity.
Definition: Port.cpp:363
#define yCInfo(component,...)
Definition: LogComponent.h:171
#define yCError(component,...)
Definition: LogComponent.h:213
#define yCWarning(component,...)
Definition: LogComponent.h:192
#define YARP_LOG_COMPONENT(name,...)
Definition: LogComponent.h:76
The main, catch-all namespace for YARP.
Definition: dirs.h:16