27 #include <VirtualRobot/RobotConfig.h>
28 #include <VirtualRobot/RobotNodeSet.h>
32 #include "../MotionControlGroupStatechartContext.h"
35 using namespace MotionControlGroup;
52 getContext<MotionControlGroupStatechartContext>();
59 int decelerationTime = in.getDecelerationTime();
61 if (decelerationTime != 0)
63 setTimeoutEvent(decelerationTime, createEventTimeout());
66 std::string kinematicChain =
"";
68 if (in.isKinematicChainNameSet())
70 kinematicChain = in.getKinematicChainName();
73 Ice::StringSeq nodeNames, realJointNames;
75 if (kinematicChain.empty())
81 VirtualRobot::RobotNodeSetPtr nodeSet =
84 for (
size_t i = 0; i < nodeSet->getSize(); ++i)
86 nodeNames.push_back(nodeSet->getNode(i)->getName());
91 Term zeroVeloCondition;
94 ChannelRegistryEntry& channelEntry = channels[
"jointvelocities"];
97 for (
auto& nodeName : nodeNames)
99 if (channelEntry.dataFields.count(nodeName) == 0 ||
100 !channelEntry.dataFields[nodeName].value->getInitialized())
105 jointVelocities[nodeName] = channelEntry.dataFields[nodeName].value->getFloat();
111 realJointNames.push_back(nodeName);
115 installConditionForZeroVelocityReached(zeroVeloCondition);
116 out.setJointNames(realJointNames);
123 getContext<MotionControlGroupStatechartContext>();
126 std::string kinematicChain =
"";
128 if (in.isKinematicChainNameSet())
130 kinematicChain = in.getKinematicChainName();
147 ChannelRegistryEntry& channelEntry = channels[
"jointvelocities"];
149 Ice::StringSeq validJoints;
151 for (
auto& node : jointMap)
153 if (channelEntry.dataFields.count(node.first) == 0 ||
154 !channelEntry.dataFields[node.first].value->getInitialized())
159 jointVelocities[node.first] = channelEntry.dataFields[node.first].value->getFloat();
160 validJoints.push_back(node.first);
164 while (!isRunningTaskStopped())
167 for (
auto& jointName : validJoints)
181 getContext<MotionControlGroupStatechartContext>();
183 auto nodes = out.getJointNames();
184 Ice::StringSeq activeJoints;
185 std::vector<float> jointTargets;
187 for (
auto nodeName : nodes)
189 auto it = config.find(nodeName);
191 if (it != config.end())
194 jointTargets.push_back(it->second);
195 activeJoints.push_back(it->first);
199 out.setJointNames(activeJoints);
200 out.setCurrentJointPositions(jointTargets);