YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
FrameTransformSet_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
8#include <yarp/os/Log.h>
10#include <yarp/os/LogStream.h>
11
12using namespace yarp::dev;
13using namespace yarp::os;
14using namespace yarp::sig;
15using namespace yarp::math;
16
17namespace {
18YARP_LOG_COMPONENT(FRAMETRANSFORMSETNWCYARP, "yarp.device.frameTransformSet_nwc_yarp")
19}
20
21//------------------------------------------------------------------------------------------------------------------------------
22
24{
25
27 yCError(FRAMETRANSFORMSETNWCYARP,"Error! YARP Network is not initialized");
28 return false;
29 }
30 std::string prefix;
31 //checking default config params
32 bool default_config = true;
33 if(config.check("default-client")) {
34 default_config = config.find("default-client").asString() == "true";
35 }
36 bool default_server = true;
37 if(config.check("default-server")) {
38 default_server = config.find("default-server").asString() == "true";
39 }
40 // client port configuration
41 if (config.check("nwc_thrift_port_prefix")){
42 prefix = config.find("nwc_thrift_port_prefix").asString() + (default_config ? m_defaultConfigPrefix : "");
43 if(prefix[0] != '/') {prefix = "/"+prefix;}
44 m_thriftPortName = prefix + "/" + m_deviceName + "/thrift";
45 }
46 else {
47 prefix = default_config ? m_defaultConfigPrefix : "";
48 m_thriftPortName = prefix + "/" + m_deviceName + "/thrift";
49 yCWarning(FRAMETRANSFORMSETNWCYARP) << "no nwc_thrift_port_prefix param found. The resulting port name will be: " << m_thriftPortName;
50 }
51
52 //server port configuration
53 if (config.check("nws_thrift_port_prefix")){
54 prefix = config.find("nws_thrift_port_prefix").asString() + (default_server ? m_defaultServerPrefix : "");
55 if(prefix[0] != '/') {prefix = "/"+prefix;}
56 m_thrift_server_rpcPort_Name = prefix + "/thrift";
57 }
58 else {
59 prefix = default_server ? m_defaultServerPrefix : "";
60 m_thrift_server_rpcPort_Name = prefix + "/thrift";
61 yCWarning(FRAMETRANSFORMSETNWCYARP) << "no nws_thrift_port_prefix param found. The resulting port name will be: " << m_thrift_server_rpcPort_Name;
62 }
63
64 // rpc inizialisation
65 if(!m_thriftPort.open(m_thriftPortName))
66 {
67 yCError(FRAMETRANSFORMSETNWCYARP,"Could not open \"%s\" port",m_thriftPortName.c_str());
68 return false;
69 }
70 // connect to server
71 if (!yarp::os::NetworkBase::connect(m_thriftPortName,m_thrift_server_rpcPort_Name))
72 {
73 yCError(FRAMETRANSFORMSETNWCYARP,"Could not connect \"%s\" to \"%s\" port",m_thriftPortName.c_str(), m_thrift_server_rpcPort_Name.c_str());
74 return false;
75 }
76 if (!m_setRPC.yarp().attachAsClient(m_thriftPort))
77 {
78 yCError(FRAMETRANSFORMSETNWCYARP, "Error! Cannot attach the port as a client");
79 return false;
80 }
81
82 //Check the protocol version
83 if (!m_setRPC.checkProtocolVersion()) { return false; }
84
85 yCInfo(FRAMETRANSFORMSETNWCYARP) << "Opening of NWC successful";
86 return true;
87}
88
90{
91 if(m_thriftPort.isOpen())
92 {
93 m_thriftPort.close();
94 }
95 return true;
96}
97
99{
100 std::lock_guard <std::mutex> lg(m_pd_mutex);
101
102 auto ret = m_setRPC.setTransformRPC(transform);
103 if(!ret)
104 {
105 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to set transformation");
106 return ret;
107 }
108 return ret;
109}
110
111ReturnValue FrameTransformSet_nwc_yarp::setTransforms(const std::vector<yarp::math::FrameTransform>& transforms)
112{
113 std::lock_guard <std::mutex> lg(m_pd_mutex);
114
115 auto ret = m_setRPC.setTransformsRPC(transforms);
116 if(!ret)
117 {
118 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to set transformations");
119 return ret;
120 }
121 return ret;
122}
123
125{
126 std::lock_guard <std::mutex> lg(m_pd_mutex);
127
128 auto ret = m_setRPC.deleteTransformRPC(t1, t2);
129 if (!ret)
130 {
131 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to delete transformation");
132 return ret;
133 }
134 return ret;
135}
136
138{
139 std::lock_guard <std::mutex> lg(m_pd_mutex);
140
141 auto ret = m_setRPC.clearAllRPC();
142 if (!ret)
143 {
144 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to clear all transformations");
145 return ret;
146 }
147 return ret;
148}
bool ret
yarp::dev::ReturnValue clearAll() override
Delete all transforms in a storage.
yarp::dev::ReturnValue setTransform(const yarp::math::FrameTransform &transform) override
Save a frame transform in a storage.
yarp::dev::ReturnValue deleteTransform(std::string t1, std::string t2) override
Delete a single transform in the storage.
bool open(yarp::os::Searchable &config) override
Open the DeviceDriver.
yarp::dev::ReturnValue setTransforms(const std::vector< yarp::math::FrameTransform > &transforms) override
Save some frame transforms in a storage.
bool close() override
Close the DeviceDriver.
virtual yarp::dev::ReturnValue deleteTransformRPC(const std::string &src, const std::string &dst)
virtual yarp::dev::ReturnValue clearAllRPC()
virtual yarp::dev::ReturnValue setTransformRPC(const yarp::math::FrameTransform &transform)
virtual yarp::dev::ReturnValue setTransformsRPC(const std::vector< yarp::math::FrameTransform > &transforms)
A mini-server for performing network communication in the background.
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:330
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
Definition Port.cpp:79
bool isOpen() const
Check if the port has been opened.
Definition Port.cpp:631
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 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 yCWarning(component,...)
#define YARP_LOG_COMPONENT(name,...)
For streams capable of holding different kinds of content, check what they actually have.
An interface to the operating system, including Port based communication.