From 38b834974ce8260820dfe549a0900e186dda8a87 Mon Sep 17 00:00:00 2001 From: Mirko Waechter <mirko.waechter@kit.edu> Date: Fri, 1 Mar 2019 18:34:22 +0100 Subject: [PATCH] KinematicUnitObserver rejects now joint that are not in the joint set instead of throwing an error --- .../components/units/KinematicUnitObserver.cpp | 15 +++++++++++---- .../components/units/KinematicUnitObserver.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.cpp b/source/RobotAPI/components/units/KinematicUnitObserver.cpp index bdf8dc94e..3f8f026aa 100644 --- a/source/RobotAPI/components/units/KinematicUnitObserver.cpp +++ b/source/RobotAPI/components/units/KinematicUnitObserver.cpp @@ -91,11 +91,12 @@ void KinematicUnitObserver::onConnectObserver() throw UserException("RobotNodeSet not defined"); } - VirtualRobot::RobotNodeSetPtr robotNodeSetPtr = robot->getRobotNodeSet(robotNodeSetName); + auto robotNodeSetPtr = robot->getRobotNodeSet(robotNodeSetName); std::vector< VirtualRobot::RobotNodePtr > robotNodes; robotNodes = robotNodeSetPtr->getAllRobotNodes(); - + auto robotNodeNames = robotNodeSetPtr->getNodeNames(); + this->robotNodes = std::set<std::string>(robotNodeNames.begin(), robotNodeNames.end()); // register all channels offerChannel("jointangles", "Joint values of the " + robotNodeSetName + " kinematic chain"); offerChannel("jointvelocities", "Joint velocities of the " + robotNodeSetName + " kinematic chain"); @@ -298,14 +299,20 @@ void KinematicUnitObserver::nameValueMapToDataFields(const std::string& channelN { for (const auto& it : nameValueMap) { - map[it.first] = new Variant(it.second); + if (robotNodes.count(it.first)) + { + map[it.first] = new Variant(it.second); + } } } else { for (const auto& it : nameValueMap) { - map[it.first] = new TimedVariant(new Variant(it.second), IceUtil::Time::microSeconds(timestamp)); + if (robotNodes.count(it.first)) + { + map[it.first] = new TimedVariant(new Variant(it.second), IceUtil::Time::microSeconds(timestamp)); + } } } setDataFieldsFlatCopy(channelName, map); diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.h b/source/RobotAPI/components/units/KinematicUnitObserver.h index 1f306d686..0bbdbb054 100644 --- a/source/RobotAPI/components/units/KinematicUnitObserver.h +++ b/source/RobotAPI/components/units/KinematicUnitObserver.h @@ -155,6 +155,7 @@ namespace armarx Mutex initializedChannelsMutex; private: std::string robotNodeSetName; + std::set<std::string> robotNodes; }; -- GitLab