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 return true;
83}
84
86{
87 if(m_thriftPort.isOpen())
88 {
89 m_thriftPort.close();
90 }
91 return true;
92}
93
95{
96 std::lock_guard <std::mutex> lg(m_pd_mutex);
97
98 auto ret = m_setRPC.setTransformRPC(transform);
99 if(!ret)
100 {
101 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to set transformation");
102 return ret;
103 }
104 return ret;
105}
106
107ReturnValue FrameTransformSet_nwc_yarp::setTransforms(const std::vector<yarp::math::FrameTransform>& transforms)
108{
109 std::lock_guard <std::mutex> lg(m_pd_mutex);
110
111 auto ret = m_setRPC.setTransformsRPC(transforms);
112 if(!ret)
113 {
114 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to set transformations");
115 return ret;
116 }
117 return ret;
118}
119
121{
122 std::lock_guard <std::mutex> lg(m_pd_mutex);
123
124 auto ret = m_setRPC.deleteTransformRPC(t1, t2);
125 if (!ret)
126 {
127 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to delete transformation");
128 return ret;
129 }
130 return ret;
131}
132
134{
135 std::lock_guard <std::mutex> lg(m_pd_mutex);
136
137 auto ret = m_setRPC.clearAllRPC();
138 if (!ret)
139 {
140 yCError(FRAMETRANSFORMSETNWCYARP, "Unable to clear all transformations");
141 return ret;
142 }
143 return ret;
144}
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:363
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:677
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 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.