FC和SC的起始位置是随机的。一旦FC到达 SCS(
linear_distance < 1e-3
加速是根据速度计算的,位置为 也根据速度更新。从加速开始我的计算并从 加速到速度,然后从速度到位置变得太复杂了,并且 很难调试,但我愿意给它另一个机会。我失败的算法(Python): 第1部分。线性速度计算:
for step in range(cycles):
axis_distance = np.array(current_scs[:3]) - np.array(current_fcs[:3])
linear_distance = np.linalg.norm(axis_distance)
breaking_distance = (linear_velocity[-1]**2) / (2 * max_deceleration)
# Acceleration or constant velocity phase
if linear_distance > breaking_distance:
if np.abs(max_velocity - linear_velocity[-1]) > max_acceleration * cycle_time: # Preventing overshooting max_velocity
linear_velocity.append(linear_velocity[-1] + max_acceleration * cycle_time)
else:
linear_velocity.append(max_velocity)
# Deceleration phase
else:
if linear_velocity[-1] > max_deceleration * cycle_time: # Preventing overshooting 0
linear_velocity.append(linear_velocity[-1] - max_deceleration * cycle_time)
else:
linear_velocity.append(0)
linear_acceleration.append((linear_velocity[-1] - linear_velocity[-2]) / cycle_time)
for i in range(3):
factor = axis_distance[i] / linear_distance if linear_distance != 0 else 0
new_axis_velocity = linear_velocity[-1] * factor
if velocity[i][-1] < new_axis_velocity:
velocity[i].append(velocity[i][-1] + np.min([max_acceleration * cycle_time, new_axis_velocity - velocity[i][-1]]))
#print(f"{step} accelerating at axis {i}")
elif velocity[i][-1] > new_axis_velocity:
velocity[i].append(velocity[i][-1] - np.min([max_deceleration * cycle_time, velocity[i][-1] - new_axis_velocity]))
#print(f"{step} decelerating at axis {i}")
else:
velocity[i].append(velocity[i][-1])
#print(f"{step} target velocity for axis {i} reached")
acceleration[i].append((velocity[i][-1] - velocity[i][-2]) / cycle_time)
current_fcs[i] += velocity[i][-1] * cycle_time
SCS reached at 5574 : linear_distance = 0.0008199809854013105, linear_velocity = 2.7999999999649416
SCS reached at 9163 : linear_distance = 0.0008934633980521272, linear_velocity = 0.7999999999478358
分开后,这是线性速度
关注:
我可以继续尝试修复它,但是我不确定这是否是正确的方法。我缺乏控制理论和运动计划的背景。
我正在寻找有关解决我所面临的问题的反馈和任何建议!
如果您在离散空间或固定时间步骤中执行此操作,则需要考虑以下内容:
速度可以是梯形,或者,如果未达到最大速度,则鉴于A和距离D的加速度为d,三角形的v_max以下V_max。三角形速度正好在v_max处达到峰值。
对于移动目标,需要某种控制法。最佳解决方案取决于您要解决的问题的各种细节。