NJointCartesianVelocityControllerWithRamp.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2011-2017, 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 ArmarX
19 * @author Sonja Marahrens( sonja.marahrens at kit dot edu)
20 * @date 2018
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
24#pragma once
25
26#include <VirtualRobot/VirtualRobot.h>
27
28#include <RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityControllerWithRamp.h>
30
34
35namespace armarx
36{
37
39
41 {
42 public:
43 float xVel = 0;
44 float yVel = 0;
45 float zVel = 0;
46 float rollVel = 0;
47 float pitchVel = 0;
48 float yawVel = 0;
49 };
50
52 {
53 WidgetDescription::VBoxLayoutPtr vlayout = new WidgetDescription::VBoxLayout;
54 WidgetDescription::HBoxLayoutPtr hlayout;
55
56 public:
58 {
59 newLine();
60 }
61
62 void
64 {
65 using namespace WidgetDescription;
66 hlayout = new HBoxLayout;
67 vlayout->children.emplace_back(hlayout);
68 }
69
70 void
71 addSlider(const std::string& label, float min, float max, float value)
72 {
73 using namespace WidgetDescription;
74 hlayout->children.emplace_back(new Label(false, label));
75 FloatSliderPtr slider = new FloatSlider;
76 slider->name = label;
77 slider->min = min;
78 slider->defaultValue = value;
79 slider->max = max;
80 hlayout->children.emplace_back(slider);
81 }
82
83 WidgetDescription::VBoxLayoutPtr
84 getLayout() const
85 {
86 return vlayout;
87 }
88 };
89
90 /**
91 * @brief The NJointCartesianVelocityControllerWithRamp class
92 * @ingroup Library-RobotUnit-NJointControllers
93 */
96 NJointCartesianVelocityControllerWithRampControlData>,
97 public NJointCartesianVelocityControllerWithRampInterface
98 {
99 public:
100 using ConfigPtrT = NJointCartesianVelocityControllerWithRampConfigPtr;
102 RobotUnit* robotUnit,
103 const NJointCartesianVelocityControllerWithRampConfigPtr& config,
105
106 // NJointControllerInterface interface
107 std::string getClassName(const Ice::Current&) const override;
108
109 // NJointController interface
110 void rtRun(const IceUtil::Time& sensorValuesTimestamp,
111 const IceUtil::Time& timeSinceLastIteration) override;
112
115 const std::map<std::string, ConstControlDevicePtr>&,
116 const std::map<std::string, ConstSensorDevicePtr>&);
117 static NJointCartesianVelocityControllerWithRampConfigPtr
120 getFunctionDescriptions(const Ice::Current&) const override;
121 void callDescribedFunction(const std::string& name,
122 const StringVariantBaseMap& valueMap,
123 const Ice::Current&) override;
124 WidgetDescription::VBoxLayoutPtr createTargetLayout() const;
125 WidgetDescription::VBoxLayoutPtr createParameterLayout() const;
126
127 static VirtualRobot::IKSolver::CartesianSelection ModeFromString(const std::string mode);
128 static CartesianSelectionMode::CartesianSelection IceModeFromString(const std::string mode);
129 static VirtualRobot::IKSolver::CartesianSelection
130 ModeFromIce(const CartesianSelectionMode::CartesianSelection mode);
131
132 protected:
133 void rtPreActivateController() override;
134 void rtPostDeactivateController() override;
135
136 private:
137 std::vector<ControlTarget1DoFActuatorVelocity*> targets;
138 //std::vector<const SensorValue1DoFActuatorPosition*> sensors;
139 std::vector<const float*> velocitySensors;
140
141 std::string nodeSetName;
142 float jointLimitAvoidanceScale;
143 float KpJointLimitAvoidance;
144 VirtualRobot::IKSolver::CartesianSelection mode = VirtualRobot::IKSolver::All;
145
147
148
149 // NJointCartesianVelocityControllerWithRampInterface interface
150 public:
151 void setMaxAccelerations(float maxPositionAcceleration,
152 float maxOrientationAcceleration,
153 float maxNullspaceAcceleration,
154 const Ice::Current& = Ice::emptyCurrent) override;
155 void setTargetVelocity(float vx,
156 float vy,
157 float vz,
158 float vrx,
159 float vry,
160 float vrz,
161 const Ice::Current&) override;
162 void setJointLimitAvoidanceScale(float jointLimitAvoidanceScale,
163 const Ice::Current&) override;
164 void setKpJointLimitAvoidance(float KpJointLimitAvoidance, const Ice::Current&) override;
165 void immediateHardStop(const Ice::Current&) override;
166 const std::string& getNodeSetName() const;
167 };
168
169} // namespace armarx
int Label(int n[], int size, int *curLabel, MiscLib::Vector< std::pair< int, size_t > > *labels)
Definition Bitmap.cpp:801
#define TYPEDEF_PTRS_HANDLE(T)
WidgetDescription::VBoxLayoutPtr getLayout() const
void addSlider(const std::string &label, float min, float max, float value)
NJointCartesianVelocityControllerWithRamp(RobotUnit *robotUnit, const NJointCartesianVelocityControllerWithRampConfigPtr &config, const VirtualRobot::RobotPtr &)
void setMaxAccelerations(float maxPositionAcceleration, float maxOrientationAcceleration, float maxNullspaceAcceleration, const Ice::Current &=Ice::emptyCurrent) override
static WidgetDescription::WidgetPtr GenerateConfigDescription(const VirtualRobot::RobotPtr &, const std::map< std::string, ConstControlDevicePtr > &, const std::map< std::string, ConstSensorDevicePtr > &)
WidgetDescription::StringWidgetDictionary getFunctionDescriptions(const Ice::Current &) const override
static NJointCartesianVelocityControllerWithRampConfigPtr GenerateConfigFromVariants(const StringVariantBaseMap &values)
static VirtualRobot::IKSolver::CartesianSelection ModeFromString(const std::string mode)
static VirtualRobot::IKSolver::CartesianSelection ModeFromIce(const CartesianSelectionMode::CartesianSelection mode)
void rtPostDeactivateController() override
This function is called after the controller is deactivated.
NJointCartesianVelocityControllerWithRampConfigPtr ConfigPtrT
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
void setJointLimitAvoidanceScale(float jointLimitAvoidanceScale, const Ice::Current &) override
void setKpJointLimitAvoidance(float KpJointLimitAvoidance, const Ice::Current &) override
void setTargetVelocity(float vx, float vy, float vz, float vrx, float vry, float vrz, const Ice::Current &) override
static CartesianSelectionMode::CartesianSelection IceModeFromString(const std::string mode)
void callDescribedFunction(const std::string &name, const StringVariantBaseMap &valueMap, const Ice::Current &) override
void rtPreActivateController() override
This function is called before the controller is activated.
NJointControllerWithTripleBuffer(const NJointCartesianVelocityControllerWithRampControlData &initialCommands=NJointCartesianVelocityControllerWithRampControlData())
The RobotUnit class manages a robot and its controllers.
Definition RobotUnit.h:192
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
::IceInternal::Handle<::armarx::WidgetDescription::Widget > WidgetPtr
::std::map<::std::string, ::armarx::WidgetDescription::WidgetPtr > StringWidgetDictionary
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::map< std::string, VariantBasePtr > StringVariantBaseMap
std::shared_ptr< CartesianVelocityControllerWithRamp > CartesianVelocityControllerWithRampPtr
std::vector< T > max(const std::vector< T > &v1, const std::vector< T > &v2)
std::vector< T > min(const std::vector< T > &v1, const std::vector< T > &v2)