一个计算机器人运动学和可视化轨迹的软件包,只需几行代码

visual-kinematics的Python项目详细描述


视觉运动学

这是一个超级易于使用且非常有用的python包,只需几行代码就可以计算机器人运动学和可视化轨迹。在

你不需要处理向量和矩阵代数或逆运动学。只要有机器人的D-H参数,你就可以走了。在

如果您不熟悉D-H参数,请参考here。在

通过pip安装

pip3 install visual-kinematics

示例代码说明

前进。是的

^{pr2}$

要初始化Robot实例,需要提供DH参数。它们应该由一个n*4矩阵给出,其中n是机器人拥有的轴数,通常是6个。在

矩阵应采用以下格式:

dthetaaalpha
xxxx
xxxx
............

在本例中,我们使用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轴也是如此。)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener