Scipy插值函数
在机器人控制控制过程中,当我们规划频率太低(规划的点时间间隔太大),而控制底层需要较高的控制频率,这时往往通过插值的方式实现低频率到高频率的转换。常用的插值函数有线性插值、梯形插值、三次多项式插值、五次多项式插值、拉格朗日插值、三次样条插值等,其中常用的是三次样条插值和五次多项式插值。自己编写插值函数难度也不是特别大,我将在“协作机器人控制栏”如何自己编写插值函数,但是对于小白或想快速编写插值函数,我们可以直接调用Scipy中的插值模块实现。
导入插值模块
可以通过下面方法导入插值模块
#导入插值模块
from scipy import interpolate
通过查询interpolate/interpolate.py文件,可以知道插值函数包括一维插值、二维插值、样条插值等
__all__ = ['interp1d', 'interp2d', 'spline', 'spleval', 'splmake', 'spltopp',
'ppform', 'lagrange', 'PPoly', 'BPoly', 'RegularGridInterpolator',
'interpn']
一维插值函数interp1d
使用interp1d一维插值函数是指单变量函数,给定一维自变量x和因变量y,创建一个连续函数f,通过函数f(new_x)求取函数中对应的数值点。
y1 = interp1d(x, y, kind='linear')
第一个x参数x是自变量,第二个参数y是因变量,第三个参数 kind是阶次,分别有[‘zero’, ‘linear’, ‘quadratic’, ‘cubic’],零,线性,二次,立方等插值技术。
线面是代码实现
#!/usr/bin/env python
#-*-coding:utf-8-*-
#本文档用于scipy学习
#程序员:飞龙
#版权:哈尔滨工业大学(深圳)
#日期:2020年5月30号
import numpy as np
import matplotlib.pyplot as plt
#导入插值模块
from scipy.interpolate import interp1d
#生成数据
x = np.linspace(0, 1, 30)
y = np.sin(5*x) + np.cos(10*x)
#**一维插值函数***#
#零次插值
y0 = interp1d(x, y, kind='zero')
#一次插值
y1 = interp1d(x, y, kind='linear')
#二次插值
y2 = interp1d(x, y, kind='quadratic')
#三次插值
y3 = interp1d(x, y, kind='cubic')
#新变量
new_x