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;