我有一个机器人,我想让这个机器人按照一个预先定义的路径,在外面的一个场地上以八字形的形式出现。机器人不易操控,风等外部因素使机器人很可能不会遵循确切的路径,因此它通常会靠近路径。
我想让它遵循的路径是通过定义五个点并使用三次样条在这些点上创建一条线形成的(我用来定义此路径的代码在此消息下方):
我总是希望能够为机器人提供一个在三次样条线上的转向点。为了能够做到这一点,我认为最简单的方法是:
- 计算三次样条上距离机器人当前位置最近的点
- 沿三次样条线推进
0.2
单元以确定机器人要瞄准的新航点。
例如,如果机器人在上面的网格中的位置是x=0.4, y=-0.5
,则最近的点是近似x=0.4, y=-0.28
的,新的路点将是近似的x=0.22, y=-0.18
:
现在我有三个问题:
- 如何在三次样条上找到最近的点?
- 如何从三次样条上的找到点“前进”0.2 个单位?
- 即使路径在中间交叉,我如何保持在给定的路径上?
欢迎所有提示!
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
x = [-0.5, 0, 0.5, 0.5, 0, -0.5, -0.5, 0, 0.5]
y = [0.25, 0, -0.25, 0.25, 0, -0.25, 0.25, 0, -0.25]
tck, u = interpolate.splprep([x, y], s=0)
unew = np.arange(0, 1.01, 0.01)
out = interpolate.splev(unew, tck)
plt.figure()
plt.plot(x, y, 'o', out[0], out[1])
plt.legend(['Predefined points', 'Cubic Spline'])
plt.axis([-0.75, 0.75, -0.75, 0.75])
plt.show()