动力学参数辨识的关键是动力学模型的求解与线性化,动力学模型求解较为简单,然而动力学模型线性化较为困难。借助sympybotics机器人工具箱将有效实现动力学模型的线性化从而获得观测矩阵Y和最小待辨识参数集P。
如此好用的工具箱是Pyhton环境下使用的,不过使用,要先配置一下相关的环境
首先要安装Pyhton和GIT,相关的安装方法不咋赘述;
安装sympybotics
在python和windows系统的命令窗口下复制以下命令:
git clone https://github.com/cdsousa/SymPyBotics.git
cd sympybotics
python setup.py install
运行sympybotics还需要安装sysmpy 和numpy
安装命令为;
pip list #查看python已安装的工具包
pip install 需要安装的工具包
#symbotics需要安装的工具包
pip install sympy==0.7.5 #必须是0.7.5否则会报错
pip install numpy
安装完成以后运行例:
import sympy
import numpy
import sympybotics
# 建立机器人模型
rbtdef = sympybotics.RobotDef('Example Robot', # robot name
[('0', 0, 0.400, 'q'), # list of tuples with Denavit-Hartenberg parameters
('-pi/2', 0, 0, 'q'),
('0', 0.360, 0, 'q'),
('-pi/2', 0.050, 0.360, 'q'),
('pi/2', 0, 0, 'q'),
('-pi/2', 0, 0.090, 'q')], # (alpha, a, d, theta)
dh_convention='modified' # either 'standard' or 'modified'
)
# 设定重力加速度的值(沿z轴负方向)
rbtdef.gravityacc=sympy.Matrix([0.0, 0.0, -9.81])
# 设定摩擦力 库伦摩擦与粘滞摩擦
rbtdef.frictionmodel = {'Coulomb', 'viscous'}
# 显示动力学全参数
print(rbtdef.dynparms())
# 构建机器人动力学模型
rbt = sympybotics.RobotDynCode(rbtdef, verbose=True)
# 计算最小参数
rbt.calc_base_parms()
rbt.dyn.baseparms
# 打印最小参数集P
print(rbt.dyn.baseparms)
rbt.Hb_code
print(rbt.Hb_code)#打印观测矩阵
Yr = sympybotics.robotcodegen.robot_code_to_func('C', rbt.Hb_code, 'H', 'Hb_code', rbtdef)
print(Yr) #打印显示转换为C代码后的观测矩阵Yr
#输出观测矩阵
ob_Yr=open("H.txt","w+")
print(Yr,file=ob_Yr)
ob_Yr.close()
#输出最小参数集
min_inertia=open("P.txt",'w+')
print(rbt.dyn.baseparms,file=min_inertia)
min_inertia.close()