|

楼主 |
发表于 2019-3-5 09:13:47
|
显示全部楼层
本帖最后由 XTXB 于 2019-3-5 11:50 编辑
应该是在坐标系XOY中的P和W,要用到正切公式tanφ=K1-K2/(1+K1*K2),φ是夹角,K1和K2是OP和OW的斜率,这是以前做的笔记,你看看:
//起点坐标 position,终点坐标target 圆心相对于起始点的偏移向量offset,弧半径radius,旋转方向 isclockwise
void mc_arc(float *position, float *target, float *offset, uint8_t axis_0, uint8_t axis_1,
uint8_t axis_linear, float feed_rate, uint8_t invert_feed_rate, float radius, uint8_t isclockwise)
{
float center_axis0 = position[axis_0] + offset[axis_0];//圆心坐标
float center_axis1 = position[axis_1] + offset[axis_1];
float linear_travel = target[axis_linear] - position[axis_linear];//起点到终点的轴的进给速率
float r_axis0 = -offset[axis_0]; // Radius vector from center to current location
float r_axis1 = -offset[axis_1];//圆心指向圆弧起点P的向量坐标
float rt_axis0 = target[axis_0] - center_axis0;//圆心指向圆弧终点W的向量坐标
float rt_axis1 = target[axis_1] - center_axis1;
//
// CCW angle between position and target from circle center. Only one atan2() trig computation required.
float angular_travel = atan2(r_axis0*rt_axis1-r_axis1*rt_axis0, r_axis0*rt_axis0+r_axis1*rt_axis1);
//计算圆心角 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|