diff --git a/manifest.xml b/manifest.xml
index 0590dbe..3282231 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -3,17 +3,16 @@
Cpp helper library for Orocos RTT
Janosch Machowinski/janosch.machowinski@dfki.de
-
+ Malte Wirkus/malte.wirkus@dfki.de
+ Malte Wirkus/malte.wirkus@dfki.de
https://github.com/rock-cpp/orocos_cpp
needs_opt
-
-
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 522d8a7..876a422 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,7 +2,6 @@ find_package( Boost COMPONENTS thread system filesystem regex)
rock_library(orocos_cpp
SOURCES
ConfigurationHelper.cpp
- TransformerHelper.cpp
TypeRegistry.cpp
LoggingHelper.cpp
LoggerProxy.cpp
@@ -17,7 +16,6 @@ rock_library(orocos_cpp
OrocosCppConfig.hpp
HEADERS
ConfigurationHelper.hpp
- TransformerHelper.hpp
TypeRegistry.hpp
LoggingHelper.hpp
Spawner.hpp
@@ -26,7 +24,6 @@ rock_library(orocos_cpp
Deployment.hpp
PkgConfigHelper.hpp
PluginHelper.hpp
- TransformationProvider.hpp
PkgConfigRegistry.hpp
orocos_cpp.hpp
OrocosCppConfig.hpp
@@ -37,9 +34,6 @@ rock_library(orocos_cpp
orocos-rtt-mqueue-${OROCOS_TARGET}
orocos-rtt-corba-${OROCOS_TARGET}
typelib
- transformer
- transformer-typekit-gnulinux
- smurf
lib_config
backward
DEPS_PLAIN
diff --git a/src/ConfigurationHelper.hpp b/src/ConfigurationHelper.hpp
index 89d4e09..4e0c9c9 100644
--- a/src/ConfigurationHelper.hpp
+++ b/src/ConfigurationHelper.hpp
@@ -4,6 +4,7 @@
#include
#include
#include
+#include
#include
diff --git a/src/LoggerProxy.cpp b/src/LoggerProxy.cpp
index c7c1dde..21efbd0 100644
--- a/src/LoggerProxy.cpp
+++ b/src/LoggerProxy.cpp
@@ -5,7 +5,6 @@
#include
#include
-#include
#include "PluginHelper.hpp"
diff --git a/src/TransformationProvider.hpp b/src/TransformationProvider.hpp
deleted file mode 100644
index c7b34cb..0000000
--- a/src/TransformationProvider.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include
-
-class TransformationProvider : public transformer::TransformationElement
-{
-public:
- TransformationProvider(const std::string& sourceFrame, const std::string& targetFrame, const std::string &providerName, const std::string &portName) : TransformationElement(sourceFrame, targetFrame), providerName(providerName), portName(portName)
- {
- }
-
- virtual bool getTransformation(const base::Time& atTime, bool doInterpolation, transformer::TransformationType& tr)
- {
- return false;
- };
-
- std::string providerName;
- std::string portName;
-};
diff --git a/src/TransformerHelper.cpp b/src/TransformerHelper.cpp
deleted file mode 100644
index a807cb6..0000000
--- a/src/TransformerHelper.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-#include "TransformerHelper.hpp"
-#include "TransformationProvider.hpp"
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-using namespace orocos_cpp;
-
-TransformerHelper::TransformerHelper(const smurf::Robot& robotConfiguration): conPolicy(RTT::ConnPolicy::buffer(DEFAULT_CONNECTION_BUFFER_SIZE)), robotConfiguration(robotConfiguration)
-{
-}
-
-
-bool TransformerHelper::configureTransformer(RTT::TaskContext* task)
-{
- const std::string opName("getNeededTransformations");
-
- //test if the task actually uses the transformer
- if(!task->provides()->hasMember(opName))
- //does not, we take this as successfully configured
- return true;
-
- RTT::OperationInterfacePart *op = task->getOperation(opName);
- RTT::OperationCaller< ::std::vector< transformer::TransformationDescription >() > caller(op);
-
- ::std::vector< transformer::TransformationDescription > neededTransforms = caller();
-
- transformer::TransformationTree tree;
-
- ::std::vector< ::base::samples::RigidBodyState > staticTransforms;
-
- for(const auto tr : robotConfiguration.getStaticTransforms())
- {
- base::samples::RigidBodyState transform;
- // NOTE: In the smurf loader classes source and target frame is interpreted the other way around. The transformation however is the same.
- transform.sourceFrame = tr->getTargetFrame().getName();
- transform.targetFrame = tr->getSourceFrame().getName();
- transform.setTransform(tr->getTransformation());
- tree.addTransformation(new transformer::StaticTransformationElement(tr->getTargetFrame().getName(), tr->getSourceFrame().getName(), transform));
- staticTransforms.push_back(transform);
- }
-
- for(const auto tr : robotConfiguration.getDynamicTransforms())
- {
- // NOTE: In the smurf loader classes source and target frame is interpreted the other way around. The transformation however is the same.
- tree.addTransformation(new TransformationProvider(tr->getTargetFrame().getName(), tr->getSourceFrame().getName(), tr->getProviderName(), tr->getProviderPortName()));
- }
-
- RTT::base::PortInterface *dynamicTransformsPort = task->getPort("dynamic_transformations");
- if(!dynamicTransformsPort)
- {
- std::cout << "Error, given task " << task->getName() << " has not input port 'dynamic_transformations' " << std::endl;
- throw std::runtime_error("Error, given task " + task->getName() + " has not input port 'dynamic_transformations' ");
- return false;
- }
-
- for( const transformer::TransformationDescription &rbs : neededTransforms)
- {
- std::vector result;
- if(!tree.getTransformationChain(rbs.sourceFrame, rbs.targetFrame, result))
- {
- std::cout << "Error, there is no known transformation from " << rbs.sourceFrame << " to " << rbs.targetFrame << " which is needed by the component " << task->getName() << std::endl;
- throw std::runtime_error("Error, there is no known transformation from " + rbs.sourceFrame + " to " + rbs.targetFrame + " which is needed by the component " + task->getName());
- return false;
- }
-
- for(const transformer::TransformationElement *elem: result)
- {
- const transformer::InverseTransformationElement *inv = dynamic_cast(elem);
- if(inv)
- {
- elem = inv->getElement();
- }
-
- std::cout << " " << elem->getSourceFrame() << "2" << elem->getTargetFrame() << std::endl;
- const TransformationProvider *prov = dynamic_cast(elem);
- if(!prov)
- {
- continue;
- }
-
- //get task context and connect them
- RTT::corba::TaskContextProxy *proxy = NULL;
- try {
- proxy = RTT::corba::TaskContextProxy::Create(prov->providerName, false);
- } catch (...) {
- //if below handles the error, nothing to do here
- }
-
- if(!proxy)
- {
- std::cout << "Error, could not connect to transformation provider '" << prov->providerName << "' needed by the task '" << task->getName() << "'" << std::endl;
- throw std::runtime_error("Error, could not connect to transformation provider '" + prov->providerName + "' needed by the task '" + task->getName() + "'");
- return false;
- }
-
- RTT::base::PortInterface *port = proxy->getPort(prov->portName);
- if(!port)
- {
- std::cout << "Error, task " << prov->providerName << " has not port named '" << prov->portName << "'"<< std::endl;
- throw std::runtime_error("Error, task " + prov->providerName + " has not port named '" + prov->portName + "'");
- return false;
- }
- if(!port->connectTo(dynamicTransformsPort, conPolicy))
- {
- throw std::runtime_error("Error, could not connect " + prov->providerName + "." + prov->portName + " to " + task->getName() + "." + dynamicTransformsPort->getName() );
- }
- }
- }
-
- //write static stransformations
- RTT::base::PropertyBase *pStaticTransformationsProperty = task->getProperty("static_transformations");
- if(!pStaticTransformationsProperty)
- {
- throw std::runtime_error("Error, could not get Property 'static_transformations' for transformer task " + task->getName());
- }
-
- RTT::Property< ::std::vector< ::base::samples::RigidBodyState > > *staticTransformationsProperty = dynamic_cast > *>(pStaticTransformationsProperty);
- if(!staticTransformationsProperty)
- {
- throw std::runtime_error("Error, property 'static_transformations' of task " + task->getName() + " has wrong type (not RTT::Property< ::std::vector< ::base::samples::RigidBodyState > >)");
- }
-
- staticTransformationsProperty->set(staticTransforms);
-
- return true;
-}
-
-const RTT::ConnPolicy& TransformerHelper::getConnectionPolicy()
-{
- return conPolicy;
-}
-
-void TransformerHelper::setConnectionPolicy(RTT::ConnPolicy& policy)
-{
- conPolicy = policy;
-}
-
diff --git a/src/TransformerHelper.hpp b/src/TransformerHelper.hpp
deleted file mode 100644
index 3f0a6bb..0000000
--- a/src/TransformerHelper.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef TRANSFORMERHELPER_H
-#define TRANSFORMERHELPER_H
-
-#include
-#include
-
-namespace orocos_cpp
-{
-
-class TransformerHelper
-{
-private:
- static const size_t DEFAULT_CONNECTION_BUFFER_SIZE = 2500;
- RTT::ConnPolicy conPolicy;
- smurf::Robot robotConfiguration;
-public:
- TransformerHelper(const smurf::Robot &robotConfiguration);
-
- bool configureTransformer(RTT::TaskContext *task);
-
- const RTT::ConnPolicy &getConnectionPolicy();
- void setConnectionPolicy(RTT::ConnPolicy &policy);
-};
-
-}//end of namespace
-#endif // TRANSFORMERHELPER_H
diff --git a/src/main3.cpp b/src/main3.cpp
index 112c855..398502a 100644
--- a/src/main3.cpp
+++ b/src/main3.cpp
@@ -3,7 +3,7 @@
#include
#include "Spawner.hpp"
-#include "TransformerHelper.hpp"
+//#include "TransformerHelper.hpp"
#include "PluginHelper.hpp"
using namespace orocos_cpp;
@@ -36,10 +36,10 @@ int main(int argc, char**argv)
ConfigurationHelper helper;
- smurf::Robot foo;
- TransformerHelper trHelper(foo);
+// smurf::Robot foo;
+// TransformerHelper trHelper(foo);
- trHelper.configureTransformer(proxy);
+// trHelper.configureTransformer(proxy);
if(!helper.applyConfig(proxy, "default", "ground_based_sweeping"))
std::cout << "APPLY FAILED" << std::endl;
diff --git a/src/orocos_cpp.cpp b/src/orocos_cpp.cpp
index 53d29f4..d0d345f 100644
--- a/src/orocos_cpp.cpp
+++ b/src/orocos_cpp.cpp
@@ -1,6 +1,7 @@
#include "orocos_cpp.hpp"
#include
#include
+#include
#include "PluginHelper.hpp"
@@ -61,11 +62,33 @@ bool set_corba_ns_host(std::string hostname_or_ip){
return ret;
}
+bool setMaxMessageSize(size_t bytes){
+ std::string env_str = "ORBgiopMaxMsgSize="+std::to_string(bytes);
+ char *cstr = &(env_str[0]);
+ if( putenv(cstr) !=0 )
+ {
+ fprintf(stderr,"putenv failed\n");
+ return false;
+ }
+ return true;
+}
+
bool initializeCORBA(int argc, char**argv, std::string host="")
{
+ //Set set CORBA nameserver
if(!host.empty()){
set_corba_ns_host(host);
}
+
+ //Set CORBA max message size only if it was not set by the user
+ if(getenv("ORBgiopMaxMsgSize")) {
+ //It's already set by the user. Don't do anything
+ } else {
+ //Set to 100MB
+ bool st = setMaxMessageSize(100*1000*1000);
+ }
+
+ //Do the initialization
bool orb_st = RTT::corba::ApplicationServer::InitOrb(argc, argv);
if(!orb_st){
@@ -147,4 +170,9 @@ bool OrocosCpp::loadAllTypekitsForModel(std::string packageOrTaskModelName)
{
return orocos_cpp::PluginHelper::loadAllTypekitsForModel(packageOrTaskModelName);
}
+
+std::string OrocosCpp::applyStringVariableInsertions(const std::string &cnd_yaml)
+{
+ return libConfig::YAMLConfigParser::applyStringVariableInsertions(cnd_yaml);
+}
}
diff --git a/src/orocos_cpp.hpp b/src/orocos_cpp.hpp
index f95027d..2661519 100644
--- a/src/orocos_cpp.hpp
+++ b/src/orocos_cpp.hpp
@@ -19,6 +19,7 @@ class OrocosCpp{
bool initialize(const OrocosCppConfig& config, bool quiet=true);
RTT::corba::TaskContextProxy* getTaskContext(std::string name);
inline bool loadAllTypekitsForModel(std::string packageOrTaskModelName);
+ static std::string applyStringVariableInsertions(const std::string& cnd_yaml);
PkgConfigRegistryPtr package_registry;
TypeRegistryPtr type_registry;