Go to the documentation of this file.
25 #include <VirtualRobot/Robot.h>
33 #include "../ControlTargets/ControlTargetHolonomicPlatformVelocity.h"
41 ramp(cfg->maxPositionAcceleration, cfg->maxOrientationAcceleration)
46 <<
"The actuator " << cfg->platformName <<
" has no control mode "
47 << ControlModes::HolonomicPlatformVelocity;
53 <<
"Sensor value for " << cfg->platformName <<
" has invalid type";
81 "Platform target velocity was not set for a too long time: delay: ")
82 << commandAge.toSecondsDouble()
83 <<
" s, max allowed delay: " <<
maxCommandDelay.toSecondsDouble() <<
" s";
87 Eigen::Vector3f result;
91 const Eigen::Vector3f targetVelocity = Eigen::Vector3f::Zero();
92 result =
ramp.
update(targetVelocity, timeSinceLastIteration.toSecondsDouble());
99 result =
ramp.
update(x, timeSinceLastIteration.toSecondsDouble());
110 float maxPositionAcceleration,
111 float maxOrientationAcceleration)
119 "NJointHolonomicPlatformVelocityControllerWithRamp");
122 float maxOrientationAcceleration) :
123 maxPositionAcceleration(maxPositionAcceleration),
124 maxOrientationAcceleration(maxOrientationAcceleration)
141 Eigen::Vector3f delta =
target - state;
144 Eigen::Vector2f posDelta = delta.block<2, 1>(0, 0);
145 float posFactor = posDelta.norm() / maxPositionAcceleration /
dt;
146 factor =
std::max(factor, posFactor);
148 float oriFactor =
std::abs(delta(2)) / maxOrientationAcceleration /
dt;
149 factor =
std::max(factor, oriFactor);
151 state += delta / factor;
158 this->maxPositionAcceleration = maxPositionAcceleration;
164 this->maxOrientationAcceleration = maxOrientationAcceleration;
const NJointHolonomicPlatformVelocityControllerControlData & rtGetControlStruct() const
Eigen::Vector3f update(const Eigen::Vector3f &target, float dt)
ControlTargetBase * useControlTarget(const std::string &deviceName, const std::string &controlMode)
Declares to calculate the ControlTarget for the given ControlDevice in the given ControlMode when rtR...
NJointControllerRegistration< NJointHolonomicPlatformVelocityControllerWithRamp > registrationNJointHolonomicPlatformVelocityControllerWithRamp("NJointHolonomicPlatformVelocityControllerWithRamp")
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
NJointControllerConfigPtr ConfigPtrT
std::vector< T > abs(const std::vector< T > &v)
void init(const Eigen::Vector3f &state)
armarx::core::time::DateTime Time
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
The RobotUnit class manages a robot and its controllers.
void setMaxOrientationAcceleration(float maxOrientationAcceleration)
void setMaxPositionAcceleration(float maxPositionAcceleration)
This file offers overloads of toIce() and fromIce() functions for STL container types.
Cartesian2DimVelocityRamp(float maxPositionAcceleration, float maxOrientationAcceleration)
const SensorValueBase * useSensorValue(const std::string &sensorDeviceName) const
Get a const ptr to the given SensorDevice's SensorValue.
std::shared_ptr< class Robot > RobotPtr