坐标换算,定义立柱仰角ALPHA
C为碳杆在效应器与滑车鱼眼关节之间的距离
b为效应器鱼眼至滑车轨迹平面的垂直距离
H为效应器鱼眼至喷嘴的高度
X0 Y0 Z0 为G代码中的世界坐标
对代码进行一番修改 转换到了三棱锥的电机坐标。
做是肯定做的出来,还需要复杂的调试,毕竟三棱锥比三棱柱的坐标换算复杂多了。也不知道MEGA2560的处理性能够不够。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=67560924b8096b6381195e583c338733/d99a0e19ebc4b7452eb9791dc9fc1e178b8215d8.jpg)
// Center-to-center distance of the holes in the diagonal push rods.
#define DELTA_DIAGONAL_ROD 450.0 // mm
// Horizontal offset from middle of printer to smooth rod center.
#define DELTA_SMOOTH_ROD_OFFSET 250.0 // mm
// Horizontal offset of the universal joints on the end effector.
#define DELTA_EFFECTOR_OFFSET 33.0 // mm
// Horizontal offset of the universal joints on the carriages.
#define DELTA_CARRIAGE_OFFSET 18.0 // mm
// Effective horizontal distance bridged by diagonal push rods.
#define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
//增加鱼眼距平台的高度定义
#define DELTA_EFFECTOR_HEIGHT_OFFSET 80 //mm
// Effective X/Y positions of the three vertical towers.
#define SIN_60 0.8660254037844386
#define COS_60 0.5
//增加仰角的三角函数值
#define SIN_ALPHA 0.9702957263 //ALPHA=76
#define TAN_ALPHA 4.0107809335
#define COT_ALPHA 0.249328003
#define CSC_ALPHA 1.03061363
#define DELTA_TOWER1_X -SIN_60*DELTA_RADIUS // front left tower
#define DELTA_TOWER1_Y -COS_60*DELTA_RADIUS
#define DELTA_TOWER2_X SIN_60*DELTA_RADIUS // front right tower
#define DELTA_TOWER2_Y -COS_60*DELTA_RADIUS
#define DELTA_TOWER3_X 0.0 // back middle tower
#define DELTA_TOWER3_Y DELTA_RADIUS
float vertical_effector_tower1_offset=
(sqrt(sq(DELTA_TOWER1_X-cartesian[X_AXIS])- sq(DELTA_TOWER1_Y-cartesian[Y_AXIS]))-(cartesian[Z_AXIS]+DELTA_EFFECTOR_HEIGHT_OFFSET)COT_ALPHA)SIN_ALPHA)
delta[X_AXIS] = sqrt(sq(DELTA_DIAGONAL_ROD)-sq(vertical_effector_tower1_offset)
+vertical_effector_tower1_offset*COT_ALPHA
+(DELTA_EFFECTOR_HEIGHT_OFFSET+cartesian[Z_AXIS])CSC_ALPHA;
float vertical_effector_tower2_offset=
(sqrt(sq(DELTA_TOWER2_X-cartesian[X_AXIS])- sq(DELTA_TOWER2_Y-cartesian[Y_AXIS]))-(cartesian[Z_AXIS]+DELTA_EFFECTOR_HEIGHT_OFFSET)COT_ALPHA)SIN_ALPHA)
delta[X_AXIS] = sqrt(sq(DELTA_DIAGONAL_ROD)-sq(vertical_effector_tower2_offset)
+vertical_effector_tower2_offset*COT_ALPHA
+(DELTA_EFFECTOR_HEIGHT_OFFSET+cartesian[Z_AXIS])CSC_ALPHA;
float vertical_effector_tower3_offset=(sqrt(sq(DELTA_TOWER3_X-cartesian[X_AXIS])- sq(DELTA_TOWER3_Y-cartesian[Y_AXIS]))-(cartesian[Z_AXIS]+DELTA_EFFECTOR_HEIGHT_OFFSET)COT_ALPHA)SIN_ALPHA)
delta[X_AXIS] = sqrt(sq(DELTA_DIAGONAL_ROD)-sq(vertical_effector_tower3_offset)
+vertical_effector_tower3_offset*COT_ALPHA
+(DELTA_EFFECTOR_HEIGHT_OFFSET+cartesian[Z_AXIS])CSC_ALPHA;