JointPositionControl.cpp
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2014-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5 *
6 * ArmarX is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * ArmarX is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * @package RobotSkillTemplates::MotionControlGroup
19 * @author Peter Kaiser ( peter dot kaiser at kit dot edu )
20 * @date 2014
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
24
26
27#include <RobotAPI/interface/units/KinematicUnitInterface.h>
29
31
32using namespace armarx;
33using namespace MotionControlGroup;
34
35// DO NOT EDIT NEXT LINE
36JointPositionControl::SubClassRegistry
37 JointPositionControl::Registry(JointPositionControl::GetName(),
39
42 JointPositionControlGeneratedBase<JointPositionControl>(stateData)
43{
44}
45
46void
50
51void
53{
55 getContext<MotionControlGroupStatechartContext>();
56
57 auto targetValues = in.getJointTargetValues();
58 std::map<std::string, float> distances;
59
60 for (auto& pair : targetValues)
61 {
62 DataFieldIdentifierBasePtr dataFieldIdentifier = new DataFieldIdentifier(
63 context->getKinematicUnitObserverName(), "jointangles", pair.first);
64
65 if (!dataFieldIdentifier)
66 {
67 continue;
68 }
69
70 VariantBasePtr dataField =
71 context->getKinematicUnitObserver()->getDataField(dataFieldIdentifier);
72
73 if (!dataField || !dataField->getInitialized())
74 {
75 continue;
76 }
77
78 float currentValue = dataField->getFloat();
79 distances[pair.first] = pair.second - currentValue;
80 }
81
82 out.setJointFinalDistancesToTarget(distances);
83}
84
85// DO NOT EDIT NEXT FUNCTION
DataFieldIdentifier provide the basis to identify data field within a distributed ArmarX scenario.
JointPositionControl(XMLStateConstructorParams stateData)
static XMLStateFactoryBasePtr CreateInstance(XMLStateConstructorParams stateData)
custom implementation of the StatechartContext for a statechart
Class for legacy to stay compatible with old statecharts.
Definition XMLState.h:147
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceInternal::Handle< DataFieldIdentifierBase > DataFieldIdentifierBasePtr
::IceInternal::Handle<::armarx::VariantBase > VariantBasePtr
IceInternal::Handle< XMLStateFactoryBase > XMLStateFactoryBasePtr
Definition XMLState.h:64