计算笔式绘图仪的x和y速度以确保笔速恒定的方程式

时间:2019-06-05 02:33:22

标签: math linear-algebra

我正在编写控制笔式绘图仪的软件,我希望笔以特定的速度移动。我有两个电机,一个用于x,一个用于y。我需要知道每个笔运行的速度如何才能使笔以速度值移动。这取决于x和y的变化量。我能够以一定的距离和速度运行这些电机。

我想告诉我的绘图仪以每秒100个单位的速度将笔从a点(x1,y1)移到b点(x2,y2)。我无法弄清楚如何计算每秒移动x和y电机达到所需笔速的多少单位,因为笔将以一定角度移动。这比我想的要难得多。

我正在使用的代码

常量

PEN_VIRTUAL_COORDINATES_PER_SECOND = 7
MOTOR_UNITS_PER_VIRTUAL_COORDINATE_X = 3
MOTOR_UNITS_PER_VIRTUAL_COORDINATE_Y = 6

整数变量。这是笔每步需要移动多少个虚拟坐标

delta_x
delta_y

电机控制界面
位置是电机单元行进距离
速度是每秒的电机单位

x_axis_motor.run_to_rel_pos(speed=, position=delta_y*MOTOR_UNITS_PER_VIRTUAL_COORDINATE_Y)

我坚持要计算“速度”

1 个答案:

答案 0 :(得分:0)

随着您使用的API的更新,我看到了这样的消息。您需要移动速度v [mm/s]和增量dx,dy [mm]并逐步移动大小mx,my [mm/step],然后:

deltas

所以我们知道:

a=atan2(dy,dx);
vx=abs(v*cos(a)/mx);
vy=abs(v*sin(a)/my);

其中vx,vy [step/s]是电动机的单个速度,[step/s][Hz]中的频率相同。它只是毕达哥拉斯三角形,其中[mm/s] x,y 轴与整个速度v之间的速比与三角形长度相同,因此sin,cos适用于它们以同样的方式。我刚刚添加了转换[mm/s] -> [step/s] = [Hz]。我也abs的结果,因为您的增量已经有符号...出于同样的原因,您也可以使用atan代替atan2

a=atan(dy/dx);

但是当dx靠近zero时,别忘了处理极端情况!

如果步长大小倒置[step/mm],则只需乘而不是除。

此外,如果您没有测角仪或不想使用它,也可以使用三角相似度:

l = sqrt( dx^2 + dy^2 )
sin(a) = dy/l
cos(a) = dx/l

如此:

vx=abs((v*dx)/(l*mx));
vy=abs((v*dy)/(l*my));

它也可以在整数上计算,并且还应该更快,更精确地进行计算...再次提防被零除(点而不是线),只需将这种情况下的速度(l==0)设置为零对于两个轴。