Sympybotics
Sympybotic是一款使用python语言利用Sympy和Numpy包的开源机器人运动学和动力学的符号推导工具包,在机器人动力学参数辨识中可以用来建立机器人动力学模型,根据所建模型推导动力学最小惯性参数集和观测矩阵,并可以转换为C代码,直接用于实际辨识实验
安装:
git clone https://github.com/cdsousa/SymPyBotics.git
cd sympybotics
python setup.py install
安装成功后,README文件中已经有一个二连杆的例子以供学习使用
Example
定义2连杆机构模型
>>> import sympy
>>> import sympybotics
>>> rbtdef = sympybotics.RobotDef('Example Robot', # robot name
... [('-pi/2', 0, 0, 'q+pi/2'), # list of tuples with Denavit-Hartenberg parameters
... ( 'pi/2', 0, 0, 'q-pi/2')], # (alpha, a, d, theta)
... dh_convention='standard' # either 'standard' or 'modified'
... )
>>> rbtdef.frictionmodel = {'Coulomb', 'viscous'} # options are None or a combination of 'Coulomb', 'viscous' and 'offset'
>>> rbtdef.gravityacc = sympy.Matrix([0.0, 0.0, -9.81]) # optional, this is the default value
>>> rbtdef.dynparms()
[L_1xx, L_1xy, L_1xz, L_1yy, L_1yz, L_1zz, l_1x, l_1y, l_1z, m_1, fv_1, fc_1, L_2xx, L_2xy, L_2xz, L_2yy, L_2yz, L_2zz, l_2x, l_2y, l_2z, m_2, fv_2, fc_2]
L
为惯性张量
l
为质心位置
m
质量
生成运动学、动力学模型
>>> rbt = sympybotics.RobotDynCode(rbtdef, verbose=True)
generating geometric model
generating kinematic model
generating inverse dynamics code
generating gravity term code
generating coriolis term code
generating coriolis matrix code
generating inertia matrix code
generating regressor matrix code
generating friction term code
done
>>> rbt.geo.T[-1]
Matrix([
[-sin(q1)*sin(q2), -cos(q1), sin(q1)*cos(q2), 0],
[ sin(q2)*cos(q1), -sin(q1), -cos(q1)*cos(q2), 0],
[ cos(q2), 0, sin(q2), 0],
[ 0, 0, 0, 1]])
>>> rbt.kin.J[-1]
Matrix([
[0, 0],
[0, 0],
[0, 0],
[0, -cos(q1)],
[0, -sin(q1