Skip to content
Snippets Groups Projects
Commit bafa5e1c authored by Tobias Gröger's avatar Tobias Gröger
Browse files

Implement controller

parent 53181419
No related branches found
No related tags found
1 merge request!451Improve armar7 platform movement
...@@ -29,10 +29,9 @@ ...@@ -29,10 +29,9 @@
namespace armarx namespace armarx
{ {
NJointHolonomicPlatformVelocityControllerWithRamp:: NJointHolonomicPlatformVelocityControllerWithRamp::
NJointHolonomicPlatformUnitVelocityPassThroughController( NJointHolonomicPlatformVelocityControllerWithRamp(RobotUnit* prov,
RobotUnit* prov, ConfigPtrT cfg,
NJointHolonomicPlatformUnitVelocityPassThroughControllerConfigPtr cfg, const VirtualRobot::RobotPtr&) :
const VirtualRobot::RobotPtr&) :
maxCommandDelay(IceUtil::Time::milliSeconds(500)) maxCommandDelay(IceUtil::Time::milliSeconds(500))
{ {
target = useControlTarget(cfg->platformName, ControlModes::HolonomicPlatformVelocity) target = useControlTarget(cfg->platformName, ControlModes::HolonomicPlatformVelocity)
...@@ -41,16 +40,26 @@ namespace armarx ...@@ -41,16 +40,26 @@ namespace armarx
<< "The actuator " << cfg->platformName << " has no control mode " << "The actuator " << cfg->platformName << " has no control mode "
<< ControlModes::HolonomicPlatformVelocity; << ControlModes::HolonomicPlatformVelocity;
NJointHolonomicPlatformVelocityControllerWithRampControlData initialSettings;
initialSettings.velocityX = cfg->initialVelocityX; initialSettings.velocityX = cfg->initialVelocityX;
initialSettings.velocityY = cfg->initialVelocityY; initialSettings.velocityY = cfg->initialVelocityY;
initialSettings.velocityRotation = cfg->initialVelocityRotation; initialSettings.velocityRotation = cfg->initialVelocityRotation;
reinitTripleBuffer(initialSettings); reinitTripleBuffer(initialSettings);
// init velocity ramp
Eigen::VectorXf state(6);
state << initialSettings.velocityX, initialSettings.velocityY, 0, 0, 0,
initialSettings.velocityRotation;
ramp.setState(state, VirtualRobot::IKSolver::CartesianSelection::All);
ramp.setMaxPositionAcceleration(cfg->maxPositionAcceleration);
ramp.setMaxOrientationAcceleration(cfg->maxOrientationAcceleration);
} }
void void
NJointHolonomicPlatformVelocityControllerWithRamp::rtRun( NJointHolonomicPlatformVelocityControllerWithRamp::rtRun(
const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& sensorValuesTimestamp,
const IceUtil::Time&) const IceUtil::Time& timeSinceLastIteration)
{ {
auto commandAge = sensorValuesTimestamp - rtGetControlStruct().commandTimestamp; auto commandAge = sensorValuesTimestamp - rtGetControlStruct().commandTimestamp;
...@@ -66,9 +75,14 @@ namespace armarx ...@@ -66,9 +75,14 @@ namespace armarx
} }
else else
{ {
target->velocityX = rtGetControlStruct().velocityX; Eigen::VectorXf x(6);
target->velocityY = rtGetControlStruct().velocityY; x << rtGetControlStruct().velocityX, rtGetControlStruct().velocityY, 0, 0, 0,
target->velocityRotation = rtGetControlStruct().velocityRotation; rtGetControlStruct().velocityRotation;
Eigen::VectorXf result = ramp.update(x, timeSinceLastIteration.toSecondsDouble());
target->velocityX = result(0);
target->velocityY = result(1);
target->velocityRotation = result(5);
} }
} }
...@@ -85,6 +99,15 @@ namespace armarx ...@@ -85,6 +99,15 @@ namespace armarx
writeControlStruct(); writeControlStruct();
} }
void
NJointHolonomicPlatformVelocityControllerWithRamp::setMaxAccelerations(
float maxPositionAcceleration,
float maxOrientationAcceleration)
{
ramp.setMaxPositionAcceleration(maxPositionAcceleration);
ramp.setMaxOrientationAcceleration(maxOrientationAcceleration);
}
IceUtil::Time IceUtil::Time
NJointHolonomicPlatformVelocityControllerWithRamp::getMaxCommandDelay() const NJointHolonomicPlatformVelocityControllerWithRamp::getMaxCommandDelay() const
{ {
...@@ -99,6 +122,6 @@ namespace armarx ...@@ -99,6 +122,6 @@ namespace armarx
} }
NJointControllerRegistration<NJointHolonomicPlatformVelocityControllerWithRamp> NJointControllerRegistration<NJointHolonomicPlatformVelocityControllerWithRamp>
registrationNJointHolonomicPlatformUnitVelocityPassThroughController( registrationNJointHolonomicPlatformVelocityControllerWithRamp(
"NJointHolonomicPlatformVelocityControllerWithRamp"); "NJointHolonomicPlatformVelocityControllerWithRamp");
} // namespace armarx } // namespace armarx
...@@ -43,6 +43,9 @@ namespace armarx ...@@ -43,6 +43,9 @@ namespace armarx
float initialVelocityX; float initialVelocityX;
float initialVelocityY; float initialVelocityY;
float initialVelocityRotation; float initialVelocityRotation;
float maxPositionAcceleration;
float maxOrientationAcceleration;
}; };
TYPEDEF_PTRS_HANDLE(NJointHolonomicPlatformVelocityControllerWithRampControlData); TYPEDEF_PTRS_HANDLE(NJointHolonomicPlatformVelocityControllerWithRampControlData);
...@@ -65,15 +68,18 @@ namespace armarx ...@@ -65,15 +68,18 @@ namespace armarx
public: public:
using ConfigPtrT = NJointHolonomicPlatformVelocityControllerWithRampConfigPtr; using ConfigPtrT = NJointHolonomicPlatformVelocityControllerWithRampConfigPtr;
NJointHolonomicPlatformVelocityControllerWithRampConfig(RobotUnit* prov, NJointHolonomicPlatformVelocityControllerWithRamp(RobotUnit* prov,
ConfigPtrT config, ConfigPtrT config,
const VirtualRobot::RobotPtr&); const VirtualRobot::RobotPtr&);
void rtRun(const IceUtil::Time&, const IceUtil::Time&) override; void rtRun(const IceUtil::Time& sensorValuesTimestamp,
const IceUtil::Time& timeSinceLastIteration) override;
//for the platform unit //for the platform unit
void setVelocites(float velocityX, float velocityY, float velocityRotation); void setVelocites(float velocityX, float velocityY, float velocityRotation);
void setMaxAccelerations(float maxPositionAcceleration, float maxOrientationAcceleration);
//ice interface //ice interface
std::string std::string
getClassName(const Ice::Current& = Ice::emptyCurrent) const override getClassName(const Ice::Current& = Ice::emptyCurrent) const override
...@@ -84,12 +90,12 @@ namespace armarx ...@@ -84,12 +90,12 @@ namespace armarx
IceUtil::Time getMaxCommandDelay() const; IceUtil::Time getMaxCommandDelay() const;
void setMaxCommandDelay(const IceUtil::Time& value); void setMaxCommandDelay(const IceUtil::Time& value);
protected: protected:
IceUtil::Time maxCommandDelay; IceUtil::Time maxCommandDelay;
CartesianVelocityRamp ramp; CartesianVelocityRamp ramp;
ControlTargetHolonomicPlatformVelocity* target; ControlTargetHolonomicPlatformVelocity* target;
NJointHolonomicPlatformVelocityControllerWithRampControlData initialSettings;
}; };
} // namespace armarx } // namespace armarx
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment