一个计算机器人运动学和可视化轨迹的软件包,只需几行代码
visual-kinematics的Python项目详细描述
视觉运动学
这是一个超级易于使用且非常有用的python包,只需几行代码就可以计算机器人运动学和可视化轨迹。在
你不需要处理向量和矩阵代数或逆运动学。只要有机器人的D-H参数,你就可以走了。在
如果您不熟悉D-H参数,请参考here。在
通过pip安装
pip3 install visual-kinematics
示例代码说明
前进。是的
^{pr2}$要初始化Robot实例,需要提供DH参数。它们应该由一个n*4矩阵给出,其中n是机器人拥有的轴数,通常是6个。在
矩阵应采用以下格式:
d | theta | a | alpha |
---|---|---|---|
x | x | x | x |
x | x | x | x |
... | ... | ... | ... |
在本例中,我们使用Aubo-i10的DH参数。在
theta=np.array([0.,0.,-0.25*pi,0.,0.,0.])f=robot.forward(theta)
要计算正向运动学,我们需要指定6个轴角度。函数返回机器人的结束帧。在
也可以通过调用Robot的属性end_frame来获取结束帧:
robot.end_frame
从帧对象可以很容易地得到不同格式(旋转矩阵、欧拉角、角轴和四元数)的平移部分和旋转部分。在
print("-------forward-------")print("end frame t_4_4:")print(f.t_4_4)print("end frame xyz:")print(f.t_3_1.reshape([3,]))print("end frame abc:")print(f.euler_3)print("end frame rotational matrix:")print(f.r_3_3)print("end frame quaternion:")print(f.q_4)print("end frame angle-axis:")print(f.r_3)
结果:
-------forward-------
end frame t_4_4:
[[ 0.707 -0.707 -0. -0.497]
[-0. 0. -1. -0.295]
[ 0.707 0.707 -0. 1.292]
[ 0. 0. 0. 1. ]]
end frame xyz:
[-0.497 -0.295 1.292]
end frame abc:
[-0. -0.785 1.571]
end frame rotational matrix:
[[ 0.707 -0.707 -0. ]
[-0. 0. -1. ]
[ 0.707 0.707 -0. ]]
end frame quaternion:
[ 0.653 -0.271 0.271 0.653]
end frame angle-axis:
[ 1.482 -0.614 0.614]
我们只需:
robot.show()
结果是:
相反。是的
视觉运动学利用数值方法求解逆运动学,因此不必手动求解解析解。但是,如果您为您的机器人解决了这个问题并希望实现,后面的示例将演示如何实现这一点。毕竟,解析解运行得更快,也更可靠。在
要计算轴角度,需要提供端框。它也可以构造成各种格式(平移矢量+旋转矩阵、欧拉角、角轴或四元数)。这里我们使用ZYX eular角(固有旋转)。在
xyz=np.array([[0.28127],[0.],[1.13182]])abc=np.array([0.5*pi,0.,pi])end=Frame.from_euler_3(abc,xyz)robot.inverse(end)
机器人已经被配置成想要的姿势。为了访问axis值,我们调用属性axis\u values。在
print("axis values: ")print(robot.axis_values)
结果是:
axis values:
[ 0.798 0.422 1.049 -0.943 1.571 0.798]
轨迹。是的
除了求解单个帧的运动学外,视觉运动学还可以用于轨迹可视化。在
为此,我们需要沿着轨迹指定一些帧。在
trajectory=[]trajectory.append(Frame.from_euler_3(np.array([0.5*pi,0.,pi]),np.array([[0.28127],[0.],[1.13182]])))trajectory.append(Frame.from_euler_3(np.array([0.25*pi,0.,0.75*pi]),np.array([[0.48127],[0.],[1.13182]])))trajectory.append(Frame.from_euler_3(np.array([0.5*pi,0.,pi]),np.array([[0.48127],[0.],[0.63182]])))
在本例中,我们使用3帧定义轨迹。要使其形象化,只需:
robot.show_trajectory(trajectory,motion="p2p")
该方法可以是“p2p”或“lin”,代表点对点移动和线性移动。第一种方法在关节空间插值,第二种方法在笛卡尔空间插值。在
(注意:目前不支持为每个分段指定运动类型。未来的发展将集中于此。)
结果是:
分析性投资。是的
在定义机器人时,我们可以设置一个解析解来求解它的逆运动学。在
defaubo10_inv(dh_params,f):# the analytical inverse solution# ...returnthetarobot=Robot(dh_params,analytical_inv=aubo10_inv)
如果您看一下代码,本例中的函数aubo10_inv相当复杂。我们不详细讨论它是如何产生的。只需确保is接受包含所有DH参数和结束帧的n*4矩阵,并返回表示n个轴值的1d数组。在
这次让我们试试线性运动:
robot.show_trajectory(trajectory,motion="lin")
结果:
7轴。是的
与七轴机器人一起工作几乎是一样的。唯一不同的是DH参数变成了^{str1}$7*4矩阵,而不是^{str1}$6*4一个。在
这里我们使用KUKA LBR iiwa 7 R800的DH参数。在
dh_params=np.array([[0.34,0.,0.,-pi/2],[0.,0.,0.,pi/2],[0.4,0.,0.,-pi/2],[0.,0.,0.,pi/2],[0.4,0.,0.,-pi/2],[0.,0.,0.,pi/2],[0.126,0.,0.,0.]])
结果是:
(注意:您只看到4个红点,因为第1和第2轴的帧共享同一原点,因此第3和第4、第5和第6轴也是如此。)
- 项目
标签: