BaseSolution(){};
BaseSolution(Config*){};
virtual ~BaseSolution() {};
- virtual void cartesian_to_actuator( float[], float[] ) = 0;
- virtual void actuator_to_cartesian( float[], float[] ) = 0;
+ virtual void cartesian_to_actuator(const float[], float[] ) = 0;
+ virtual void actuator_to_cartesian(const float[], float[] ) = 0;
typedef std::map<char, float> arm_options_t;
virtual bool set_optional(const arm_options_t& options) { return false; };
virtual bool get_optional(arm_options_t& options) { return false; };
#include "CartesianSolution.h"
#include <math.h>
-void CartesianSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] ){
+void CartesianSolution::cartesian_to_actuator( const float cartesian_mm[], float actuator_mm[] ){
actuator_mm[ALPHA_STEPPER] = cartesian_mm[X_AXIS];
actuator_mm[BETA_STEPPER ] = cartesian_mm[Y_AXIS];
actuator_mm[GAMMA_STEPPER] = cartesian_mm[Z_AXIS];
}
-void CartesianSolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] ){
+void CartesianSolution::actuator_to_cartesian( const float actuator_mm[], float cartesian_mm[] ){
cartesian_mm[ALPHA_STEPPER] = actuator_mm[X_AXIS];
cartesian_mm[BETA_STEPPER ] = actuator_mm[Y_AXIS];
cartesian_mm[GAMMA_STEPPER] = actuator_mm[Z_AXIS];
public:
CartesianSolution(){};
CartesianSolution(Config*){};
- void cartesian_to_actuator( float millimeters[], float steps[] );
- void actuator_to_cartesian( float steps[], float millimeters[] );
+ void cartesian_to_actuator( const float millimeters[], float steps[] );
+ void actuator_to_cartesian( const float steps[], float millimeters[] );
};
arm_length_squared = powf(arm_length, 2);
}
-void ExperimentalDeltaSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] ){
+void ExperimentalDeltaSolution::cartesian_to_actuator(const float cartesian_mm[], float actuator_mm[] ){
float alpha_rotated[3], rotated[3];
if( sin_alpha == 0 && cos_alpha == 1){
actuator_mm[GAMMA_STEPPER] = solve_arm( rotated );
}
-void ExperimentalDeltaSolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] ){
+void ExperimentalDeltaSolution::actuator_to_cartesian(const float actuator_mm[], float cartesian_mm[] ){
// unimplemented
}
return sqrtf(arm_length_squared - powf(cartesian_mm[X_AXIS] - arm_radius, 2) - powf(cartesian_mm[Y_AXIS], 2)) + cartesian_mm[Z_AXIS];
}
-void ExperimentalDeltaSolution::rotate(float in[], float out[], float sin, float cos ){
+void ExperimentalDeltaSolution::rotate(const float in[], float out[], float sin, float cos ){
out[X_AXIS] = cos * in[X_AXIS] - sin * in[Y_AXIS];
out[Y_AXIS] = sin * in[X_AXIS] + cos * in[Y_AXIS];
out[Z_AXIS] = in[Z_AXIS];
class ExperimentalDeltaSolution : public BaseSolution {
public:
ExperimentalDeltaSolution(Config*);
- void cartesian_to_actuator( float[], float[] );
- void actuator_to_cartesian( float[], float[] );
+ void cartesian_to_actuator(const float[], float[] );
+ void actuator_to_cartesian(const float[], float[] );
float solve_arm( float millimeters[] );
- void rotate( float in[], float out[], float sin, float cos );
+ void rotate(const float in[], float out[], float sin, float cos );
private:
float arm_length;
#include "HBotSolution.h"
#include <math.h>
-void HBotSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] ){
+void HBotSolution::cartesian_to_actuator(const float cartesian_mm[], float actuator_mm[] ){
actuator_mm[ALPHA_STEPPER] = cartesian_mm[X_AXIS] + cartesian_mm[Y_AXIS];
actuator_mm[BETA_STEPPER ] = cartesian_mm[X_AXIS] - cartesian_mm[Y_AXIS];
actuator_mm[GAMMA_STEPPER] = cartesian_mm[Z_AXIS];
}
-void HBotSolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] ){
+void HBotSolution::actuator_to_cartesian(const float actuator_mm[], float cartesian_mm[] ){
cartesian_mm[X_AXIS] = 0.5F * (actuator_mm[ALPHA_STEPPER] + actuator_mm[BETA_STEPPER]);
cartesian_mm[Y_AXIS] = 0.5F * (actuator_mm[ALPHA_STEPPER] - actuator_mm[BETA_STEPPER]);
cartesian_mm[Z_AXIS] = actuator_mm[GAMMA_STEPPER];
public:
HBotSolution();
HBotSolution(Config*){};
- void cartesian_to_actuator( float[], float[] );
- void actuator_to_cartesian( float[], float[] );
+ void cartesian_to_actuator(const float[], float[] );
+ void actuator_to_cartesian(const float[], float[] );
};
delta_tower3_y = (delta_radius + tower3_offset) * sinf((90.0F + tower3_angle) * PIOVER180);
}
-void LinearDeltaSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] )
+void LinearDeltaSolution::cartesian_to_actuator(const float cartesian_mm[], float actuator_mm[] )
{
actuator_mm[ALPHA_STEPPER] = sqrtf(this->arm_length_squared
) + cartesian_mm[Z_AXIS];
}
-void LinearDeltaSolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] )
+void LinearDeltaSolution::actuator_to_cartesian(const float actuator_mm[], float cartesian_mm[] )
{
// from http://en.wikipedia.org/wiki/Circumscribed_circle#Barycentric_coordinates_from_cross-_and_dot-products
// based on https://github.com/ambrop72/aprinter/blob/2de69a/aprinter/printer/DeltaTransform.h#L81
class LinearDeltaSolution : public BaseSolution {
public:
LinearDeltaSolution(Config*);
- void cartesian_to_actuator( float[], float[] );
- void actuator_to_cartesian( float[], float[] );
+ void cartesian_to_actuator(const float[], float[] );
+ void actuator_to_cartesian(const float[], float[] );
bool set_optional(const arm_options_t& options);
bool get_optional(arm_options_t& options);
return radians*(180.0F/3.14159265359f);
}
-void MorganSCARASolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] )
+void MorganSCARASolution::cartesian_to_actuator(const float cartesian_mm[], float actuator_mm[] )
{
float SCARA_pos[2],
}
-void MorganSCARASolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] ) {
+void MorganSCARASolution::actuator_to_cartesian(const float actuator_mm[], float cartesian_mm[] ) {
// Perform forward kinematics, and place results in cartesian_mm[]
float y1, y2,
class MorganSCARASolution : public BaseSolution {
public:
MorganSCARASolution(Config*);
- void cartesian_to_actuator( float[], float[] );
- void actuator_to_cartesian( float[], float[] );
+ void cartesian_to_actuator(const float[], float[] );
+ void actuator_to_cartesian(const float[], float[] );
bool set_optional(const arm_options_t& options);
bool get_optional(arm_options_t& options);
cos_alpha = cosf(alpha_angle);
}
-void RotatableCartesianSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] ){
+void RotatableCartesianSolution::cartesian_to_actuator(const float cartesian_mm[], float actuator_mm[] ){
rotate( cartesian_mm, actuator_mm, sin_alpha, cos_alpha );
}
-void RotatableCartesianSolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] ){
+void RotatableCartesianSolution::actuator_to_cartesian(const float actuator_mm[], float cartesian_mm[] ){
rotate( actuator_mm, cartesian_mm, - sin_alpha, cos_alpha );
}
-void RotatableCartesianSolution::rotate(float in[], float out[], float sin, float cos ){
+void RotatableCartesianSolution::rotate(const float in[], float out[], float sin, float cos ){
out[ALPHA_STEPPER] = cos * in[X_AXIS] - sin * in[Y_AXIS];
out[BETA_STEPPER ] = sin * in[X_AXIS] + cos * in[Y_AXIS];
out[GAMMA_STEPPER] = in[Z_AXIS];
class RotatableCartesianSolution : public BaseSolution {
public:
RotatableCartesianSolution(Config*);
- void cartesian_to_actuator( float[], float[] );
- void actuator_to_cartesian( float[], float[] );
+ void cartesian_to_actuator(const float[], float[] );
+ void actuator_to_cartesian(const float[], float[] );
- void rotate( float in[], float out[], float sin, float cos );
+ void rotate(const float in[], float out[], float sin, float cos );
float sin_alpha;
float cos_alpha;
z_calc_offset = (delta_z_offset - tool_offset - delta_ee_offs)*-1.0F;
}
-void RotatableDeltaSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] )
+void RotatableDeltaSolution::cartesian_to_actuator(const float cartesian_mm[], float actuator_mm[] )
{
//We need to translate the Cartesian coordinates in mm to the actuator position required in mm so the stepper motor functions
float alpha_theta = 0.0F;
}
-void RotatableDeltaSolution::actuator_to_cartesian( float actuator_mm[], float cartesian_mm[] )
+void RotatableDeltaSolution::actuator_to_cartesian(const float actuator_mm[], float cartesian_mm[] )
{
//Use forward kinematics
delta_calcForward(actuator_mm[ALPHA_STEPPER], actuator_mm[BETA_STEPPER ], actuator_mm[GAMMA_STEPPER], cartesian_mm[X_AXIS], cartesian_mm[Y_AXIS], cartesian_mm[Z_AXIS]);
class RotatableDeltaSolution : public BaseSolution {
public:
RotatableDeltaSolution(Config*);
- void cartesian_to_actuator( float[], float[] );
- void actuator_to_cartesian( float[], float[] );
+ void cartesian_to_actuator(const float[], float[] );
+ void actuator_to_cartesian(const float[], float[] );
bool set_optional(const arm_options_t& options);
bool get_optional(arm_options_t& options);