25#include <VirtualRobot/Robot.h>
42 ramp(cfg->maxPositionAcceleration, cfg->maxOrientationAcceleration)
47 <<
"The actuator " << cfg->platformName <<
" has no control mode "
48 << ControlModes::HolonomicPlatformVelocity;
54 <<
"Sensor value for " << cfg->platformName <<
" has invalid type";
71 const IceUtil::Time& sensorValuesTimestamp,
72 const IceUtil::Time& timeSinceLastIteration)
82 "delay: %f, s, max allowed delay: %f s",
83 commandAge.toSecondsDouble(),
90 const Eigen::Vector3f targetVelocity = Eigen::Vector3f::Zero();
91 Eigen::Vector3f result =
92 ramp.update(targetVelocity, timeSinceLastIteration.toSecondsDouble());
93 target->velocityX = result(0);
94 target->velocityY = result(1);
95 target->velocityRotation = result(2);
99 Eigen::Vector3f result;
103 const Eigen::Vector3f targetVelocity = Eigen::Vector3f::Zero();
104 result =
ramp.update(targetVelocity, timeSinceLastIteration.toSecondsDouble());
111 result =
ramp.update(
x, timeSinceLastIteration.toSecondsDouble());
114 target->velocityX = result(0);
115 target->velocityY = result(1);
116 target->velocityRotation = result(2);
122 float maxPositionAcceleration,
123 float maxOrientationAcceleration)
125 ramp.setMaxPositionAcceleration(maxPositionAcceleration);
126 ramp.setMaxOrientationAcceleration(maxOrientationAcceleration);
131 "NJointHolonomicPlatformVelocityControllerWithRamp");
133 Cartesian2DimVelocityRamp ::Cartesian2DimVelocityRamp(
float maxPositionAcceleration,
134 float maxOrientationAcceleration) :
135 maxPositionAcceleration(maxPositionAcceleration),
136 maxOrientationAcceleration(maxOrientationAcceleration)
153 Eigen::Vector3f delta = target - state;
156 Eigen::Vector2f posDelta = delta.block<2, 1>(0, 0);
157 float posFactor = posDelta.norm() / maxPositionAcceleration /
dt;
158 factor = std::max(factor, posFactor);
160 float oriFactor = std::abs(delta(2)) / maxOrientationAcceleration /
dt;
161 factor = std::max(factor, oriFactor);
163 state += delta / factor;
170 this->maxPositionAcceleration = maxPositionAcceleration;
176 this->maxOrientationAcceleration = maxOrientationAcceleration;
#define ARMARX_RT_LOGF_WARNING(...)
void setMaxOrientationAcceleration(float maxOrientationAcceleration)
void setMaxPositionAcceleration(float maxPositionAcceleration)
void init(const Eigen::Vector3f &state)
Eigen::Vector3f update(const Eigen::Vector3f &target, float dt)
const SensorValueBase * useSensorValue(const std::string &sensorDeviceName) const
Get a const ptr to the given SensorDevice's SensorValue.
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...
const NJointHolonomicPlatformVelocityControllerControlData & rtGetControlStruct() const
The RobotUnit class manages a robot and its controllers.
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
std::shared_ptr< class Robot > RobotPtr
This file offers overloads of toIce() and fromIce() functions for STL container types.
NJointControllerRegistration< NJointHolonomicPlatformVelocityControllerWithRamp > registrationNJointHolonomicPlatformVelocityControllerWithRamp("NJointHolonomicPlatformVelocityControllerWithRamp")