YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
FrameTransformGet_nws_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
11
12YARP_LOG_COMPONENT(FRAMETRANSFORMGETNWSYARP, "yarp.devices.FrameTransformGet_nws_yarp")
13
15PeriodicThread (0.010),
16m_thrift_rpcPort_Name("/frameTransformGet/rpc")
17{
18}
19
20
23{
25 yCError(FRAMETRANSFORMGETNWSYARP,"Error! YARP Network is not initialized");
26 return false;
27 }
28 std::string prefix;
29 //checking default config param
30 bool default_config = true;
31 if(config.check("default-config")) {
32 default_config = config.find("default-config").asString() == "true";
33 }
34 // configuration
35 if (config.check("nws_thrift_port_prefix")){
36 prefix = config.find("nws_thrift_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
37 if(prefix[0] != '/') {prefix = "/"+prefix;}
38 m_thrift_rpcPort_Name = prefix + "/" + m_deviceName + "/thrift";
39 }
40 else {
41 prefix = default_config ? m_defaultConfigPrefix : "";
42 m_thrift_rpcPort_Name = prefix + "/" + m_deviceName + "/thrift";
43 yCWarning(FRAMETRANSFORMGETNWSYARP) << "no nws_thrift_port_prefix param found. The resulting port name will be: " << m_thrift_rpcPort_Name;
44 }
45 if(config.check("streaming_enabled")) {
46 m_streaming_port_enabled = config.find("streaming_enabled").asString() == "true";
47 }
48 if (config.check("period")) {
49 double period = config.find("period").asFloat64();
50 this->setPeriod(period);
51 }
52
53 // rpc initialization
54 if(!m_thrift_rpcPort.open(m_thrift_rpcPort_Name))
55 {
56 yCError(FRAMETRANSFORMGETNWSYARP,"Could not open \"%s\" port",m_thrift_rpcPort_Name.c_str());
57 return false;
58 }
59 if(!this->yarp().attachAsServer(m_thrift_rpcPort))
60 {
61 yCError(FRAMETRANSFORMGETNWSYARP,"Error! Cannot attach the port as a server");
62 return false;
63 }
64 if(m_verbose <= 2) {
65 yCTrace(FRAMETRANSFORMGETNWSYARP) << "\nParameters are: \n" << config.toString();
66 }
67
68 if (m_streaming_port_enabled)
69 {
70 if (config.check("output_streaming_port_prefix")){
71 prefix = config.find("output_streaming_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
72 if(prefix[0] != '/') {prefix = "/"+prefix;}
73 m_streaming_port_name = prefix + "/" + m_deviceName + "/tf:o";
74 }
75 else {
76 prefix = default_config ? m_defaultConfigPrefix : "";
77 m_streaming_port_name = prefix + "/" + m_deviceName + "/tf:o";
78 yCWarning(FRAMETRANSFORMGETNWSYARP) << "no output_streaming_port_prefix param found. The resulting port name will be: " << m_streaming_port_name;
79 }
80 yCInfo(FRAMETRANSFORMGETNWSYARP) << "Streaming transforms on Yarp port enabled";
81 if (!m_streaming_port.open(m_streaming_port_name))
82 {
83 yCError(FRAMETRANSFORMGETNWSYARP, "Could not open \"%s\" port", m_streaming_port_name.c_str());
84 return false;
85 }
86
87 this->start();
88 }
89 else
90 {
91 yCInfo(FRAMETRANSFORMGETNWSYARP) << "Streaming transforms on Yarp port NOT enabled";
92 }
93
94 return true;
95}
96
101
103{
104 // Stop the thread
105 if (this->isRunning())
106 {
107 this->stop();
108 }
109
110 // Detaching
111 detach();
112
113 // Closing port
114 m_thrift_rpcPort.interrupt();
115 m_thrift_rpcPort.close();
116 m_streaming_port.interrupt();
117 m_streaming_port.close();
118 return true;
119}
120
121
123{
124 std::lock_guard<std::mutex> m_lock(m_mutex);
125 m_iFrameTransformStorageGet = nullptr;
126 return true;
127}
128
129
131{
132 std::lock_guard<std::mutex> m_lock(m_mutex);
133 deviceToAttach->view(m_iFrameTransformStorageGet);
134
135 if ( m_iFrameTransformStorageGet==nullptr){
136 yCError(FRAMETRANSFORMGETNWSYARP) << "could not attach to the device";
137 return false;
138 }
139 return true;
140}
141
142
144{
145 std::lock_guard<std::mutex> m_lock(m_mutex);
146 if (m_iFrameTransformStorageGet != nullptr) {
147 std::vector<yarp::math::FrameTransform> localTransform;
148 if (m_iFrameTransformStorageGet->getTransforms(localTransform)) {
149 return return_getAllTransforms(true, localTransform);
150 }
151 }
152 yCError(FRAMETRANSFORMGETNWSYARP) << "error getting transform from interface";
153 return return_getAllTransforms(false, std::vector<yarp::math::FrameTransform>());;
154
155}
156
158{
159 std::lock_guard<std::mutex> m_lock(m_mutex);
160 if (m_iFrameTransformStorageGet != nullptr)
161 {
162 std::vector<yarp::math::FrameTransform> localTransform;
163 if (m_iFrameTransformStorageGet->getTransforms(localTransform))
164 {
165 return_getAllTransforms rgt(true, localTransform);
166 m_streaming_port.write(rgt);
167 }
168 }
169}
const yarp::os::LogComponent & FRAMETRANSFORMGETNWSYARP()
frameTransformGet_nws_yarp: A network wrapper client which converts the input retrieved from an IFram...
void run() override
Loop function.
bool detach() override
Detach the object (you must have first called attach).
return_getAllTransforms getTransformsRPC() override
bool attach(yarp::dev::PolyDriver *deviceToAttach) override
Attach to another object.
bool close() override
Close the DeviceDriver.
bool open(yarp::os::Searchable &params) override
Device driver interface.
bool view(T *&x)
Get an interface to the device driver.
virtual bool getTransforms(std::vector< yarp::math::FrameTransform > &transforms) const =0
Obtains all frame transforms saved in a storage.
A container for a device driver.
Definition PolyDriver.h:23
static bool checkNetwork()
Check if the YARP Network is up and running.
Definition Network.cpp:1370
bool setPeriod(double period)
Set the (new) period of the thread.
bool isRunning() const
Returns true when the thread is started, false otherwise.
bool start()
Call this to start the thread.
void stop()
Call this to stop the thread, this call blocks until the thread is terminated (and releaseThread() ca...
bool write(const PortWriter &writer, const PortWriter *callback=nullptr) const override
Write an object to the port.
Definition Port.cpp:436
void interrupt() override
Interrupt any current reads or writes attached to the port.
Definition Port.cpp:383
void close() override
Stop port activity.
Definition Port.cpp:363
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
Definition Port.cpp:79
A base class for nested structures that can be searched.
Definition Searchable.h:31
virtual bool check(const std::string &key) const =0
Check if there exists a property of the given name.
virtual std::string toString() const =0
Return a standard text representation of the content of the object.
virtual Value & find(const std::string &key) const =0
Gets a value corresponding to a given keyword.
yarp::os::WireLink & yarp()
Get YARP state associated with this object.
Definition Wire.h:28
#define yCInfo(component,...)
#define yCError(component,...)
#define yCTrace(component,...)
#define yCWarning(component,...)
#define YARP_LOG_COMPONENT(name,...)