我正在进行机器人模拟,并试图计算机器人沿着某个规划好的轨迹与目标之间的距离。轨迹曲线是为了避开障碍物,它由一个坐标列表给出。为了找到进度,我需要找到从当前位置到目标的弧长。我熟悉一个函数的弧长方程:
“我打算用的方法是,用NumPy的多项式,通过多项式拟合,求出轨迹函数的多项式近似值,然后求出它的导数,求平方,加1,求平方根,最后求积分。但是,多项式的平方根并不总是存在的,所以这种方法并不总是有效。”
有没有更好的方法来解决这个问题?我对数值积分很熟悉,但不确定它是否/如何能应用于这个问题。
编辑:找到了如何用数值计算的方法,这要快得多。用numpy.gradient/numpy.diff计算数值导数,将导数中的每个元素插入sqrt(1 +(dy/dx)^2),然后用numpy.trapz/scipy.integrate.simpson计算数值积分。
1条答案
按热度按时间jdzmm42g1#
您的机器人将如何从一个点移动到另一个点?
如果它是一条直线,它足以做
np.sum(np.sqrt(np.diff(x)**2 + np.diff(y)**2))
如果没有,你应该先计算出机器人要走的路径,然后用这些方程进行解析积分,或者对曲线上的点进行采样。对于光滑的路径,尺寸上的误差往往是
O(1/n^2)
,其中n是你在插值中使用的点数。