【精选】python机器人库(robotics

您所在的位置:网站首页 universal机械手 【精选】python机器人库(robotics

【精选】python机器人库(robotics

2023-11-19 01:39| 来源: 网络整理| 查看: 265

python机器人库(robotics-toolbox-python)的运用

Python 机器人库的运用

文章目录 python机器人库(robotics-toolbox-python)的运用前言一、相关概要二、必要的库的安装1.创建机械臂模型2.正逆运动的实现 DH参数三、总结

前言

找了半天发现网上关于python机器人库的资料很少,而目前我的项目要用到相关的东西,查询官网过后总结一下。

一、相关概要

这个工具箱为 Python 带来了机器人特定的功能,并利用 Python 的可移植性、普遍性和支持性的优势,以及线性代数(numpy、scipy)、图形(matplotlib、three.js、WebGL)的开源生态系统的能力,交互式开发(jupyter、jupyterlab、mybinder.org)和文档(sphinx)。

工具箱提供了用于表示串行链接机械手的运动学和动力学的工具 - 您可以轻松地以 Denavit-Hartenberg 形式创建自己的工具,导入 URDF 文件,或使用来自 Franka-Emika 的 30 多种提供的知名当代机器人模型, Kinova、Universal Robotics、Rethink 以及 Puma 560 和 Stanford arm 等经典机器人。

该工具箱还将支持具有机器人运动模型(独轮车、自行车)、路径规划算法(bug、距离变换、D*、PRM)、运动动力学规划(晶格、RRT)、定位(EKF、粒子滤波器)等功能的移动机器人,地图构建 (EKF) 和同时定位和映射 (EKF)。

工具箱提供:

成熟的代码,为相同算法的其他实现提供一个比较点; 例程通常以简单明了的方式编写,易于理解,但可能以牺牲计算效率为代价; 可供学习和教学阅读的源代码; 与 Robotics Toolbox for MATLAB 的向后兼容性 该工具箱利用Python 的空间数学工具箱来提供对 SO(n) 和 SE(n) 矩阵、四元数、扭曲和空间向量等数据类型的支持

二、必要的库的安装 需要 Python >= 3.6spatialmath-pythonnumpynumpy-stlvpython(这个库确实不知道怎么安装,但是安装不上也不影响后续,如果有知道到的可以,一起交流)python机器人工具箱 % git clone https://github.com/petercorke/robotics-toolbox-python.git % cd robotics-toolbox-python % pip install -e . 1.创建机械臂模型

步骤一:在模型库里面创建一个名为’MYROBOT.py’的文件,其中MYROBOT是机器人的描述性名称,它是一个有效的文件名和Python类名。 E:\pyproject\defecate\robotics-toolbox-python\roboticstoolbox\models\DH\MYROBOT.py这是我的地址

步骤二:加载库

from math import pi import numpy as np from roboticstoolbox import DHRobot, RevoluteDH, PrismaticDH, RevoluteMDH, PrismaticMDH

最后一行很重要,它定义了所有可能的类的可能。不会全部使用它们,为了保持整洁,你可以删除那些你不用的。这就是他们的目的;

‘RevoluteDH’用于使用标准DH参数的转动关节

‘PrismaticDH’用于使用标准DH参数的移动关节

‘RevoluteMDH’用于使用MDH参数的转动关节

‘PrismaticMDH’用于使用MDH参数的移动关节

步骤三:描述机械臂,记录下使用的单位、DH参数以及对模型来源的引用。

class MYROBOT(DHRobot): """ Create model of MYROBOT manipulator KR5()是一个用标准DH约定对Kuka KR5机器人建模并描述其运动学特征的类。 . 定义的关节构型为: qk1,公称工作位置1 qk2,公称工作位置2 qk3,公称工作位置3. :notes: .使用国际计量单位米 .包括一个11.5厘米的工具在z方向 . :references: . . . """

步骤四:在’init_’,通过创建适当的链接类的实例来定义一组链接变量

def __init__(self): deg = pi/180 L0 = RevoluteDH( d=0, # link length (Dennavit-Hartenberg notation) a=0, # link offset (Dennavit-Hartenberg notation) alpha=pi/2, # link twist (Dennavit-Hartenberg notation) I=[0, 0.35, 0, 0, 0, 0], # inertia tensor of link with respect to # center of mass I = [L_xx, L_yy, L_zz, # L_xy, L_yz, L_xz] r=[0, 0, 0], # distance of ith origin to center of mass [x,y,z] # in link reference frame m=0, # mass of link Jm=200e-6, # actuator inertia G=-62.6111, # gear ratio B=1.48e-3, # actuator viscous friction coefficient (measured # at the motor) Tc=[0.395, -0.435], # actuator Coulomb friction coefficient for # direction [-,+] (measured at the motor) qlim=[-160*deg, 160*deg]) # minimum and maximum joint angle L1 = RevoluteDH( d=0, a=0.4318, alpha=0, qlim=[-45*deg, 225*deg]) . . .

其中包含DH四参数以及一些动力学参数,一般只考虑动力学参数的话,仅仅需要DH参数接可以了,也可以加一些关节极限qlim()。 我们提供尽可能多的参数。上述L0的定义包括运动学参数和动力学参数,而L1只有运动学参数。最小的要求是运动学参数,你甚至不需要知道关节极限,它们只需要一些工具箱函数。对于一个有N个关节的机器人,你必须定义N个关节实例。接下来,我们调用super函数来完成繁重的工作。

super().__init__( [L0, L1, L2, L3, L4, L5], name="MYROBOT", manufacturer="COMPANY THAT BUILDS MYROBOTs")

步骤五:创建实例属性,准备两个位姿,为后续正逆运动的验证做准备

# 零角度,L形姿势 self._MYCONFIG = np.array([1, 2, 3, 4, 5, 6]) # 创建实例属性 self.addconfiguration("qz", np.array([0,0,0,0,0,0 ])) # 零角度,L形姿势 self.addconfiguration("qr", np.array([0.610865,1.047198,0.785398,1.134464,0.628319,0 ]))

'MYCONFIG’是这个特定配置的名称。它必须是一个有N个元素的NumPy数组。然后定义一个返回该属性的属性。

@property def MYCONFIG(self): return self._MYCONFIG

步骤六:底部要有一个main函数

if __name__ == '__main__': robot = MYROBOT() print(robot) print(robot._MYCONFIG)

步骤七:将建立的模型添加到工具箱内,编辑此文件夹中的文件’init.py’。添加一行如下,同时_all[]中也要添加模型名称

from roboticstoolbox.models.DH.MYROBOT import MYROBOT

在这里插入图片描述

2.正逆运动的实现

步骤一;载入库

import roboticstoolbox as rtb import numpy as np from math import pi

步骤二:验证机械臂参数是否能正确调用

robot = rtb.models.DH.MYROBOT() #机械臂信息 print(robot)

输出内容 机械臂信息

步骤三:模型验证 使用 matplotlib 图形将机器人显示为线条。matplotlib 是 Python 最普遍的图形库,可在所有平台上运行。

import roboticstoolbox as rtb robot = rtb.models.DH.MYROBOT() qt = rtb.tools.trajectory.jtraj(robot.qz, robot.qr, 50) robot.plot(qt.q)

在这里插入图片描述 这里我是没弄出来,查了一下,网上说是可能是机器人工具箱本身存在的问题,有解决的也可以互相交流。 验证我是通过matlab进行仿真验证的

clc clear % theta d a alpha sigma L1=Link([ 0 0.044 0 pi/2 0 ],'standard'); L2=Link([ 0 0 0.14 0 0 ],'standard'); L3=Link([ 0 0 0.0455 pi/2 0 ],'standard'); L4=Link([ 0 0.1311 0 -pi/2 0 ],'standard'); L5=Link([ 0 0 0.04945 pi/2 0 ],'standard'); L6=Link([ 0 0.05585 0 0 0 ],'standard'); L2.offset = pi/2 L5.offset = -pi/2 %%取名 robot = SerialLink([L1 L2 L3 L4 L5 L6],'name','standard DH'); %读取角度信息 filename = '.\数据.txt'; [theta1, theta2,theta3, theta4, theta5 ,theta6] = textread(filename , '%f %f %f %f %f %f', 1); theta = [theta1, theta2,theta3, theta4, theta5 theta6]; % theta = [0.523599 1.047189 1.047189 0.523599 1.5070796 ] % theta1 = theta(1); % theta2 = theta(2); % theta3 = theta(3); % theta4 = theta(4); % theta5 = theta(5); du=pi/180; ra=180/pi; % -2.5946 0.0224 1.5707 -1.5930 2.5946 %定义关节范围 % L(1).qlim =[-170, 170]*du; % L(2).qlim =[60-70, 60+70]*du;%-10,130 % L(3).qlim =[-70-70,-70+70]*du;%-140,0 % L(4).qlim =[-70,70]*du; % L(5).qlim =[-170, 170]*du; L1.qlim =[-180, 180]*du; L2.qlim =[-180, 180]*du; L3.qlim =[-180, 180]*du; L4.qlim =[-180, 180]*du; L5.qlim =[-180, 180]*du; L6.qlim =[-180, 180]*du; robot.teach()

在这里插入图片描述

步骤四:正运动(已知关节角度,求解末端位姿)

#正向运动 T = robot.fkine(robot.qr)

这里的qr,是建立的机械臂模型中两个姿态设定的其中一个姿态,分别是qz与qr,qz设置的是零角度姿态,qr是随意设置的一个姿态 前向运动学 (FK) 是给定关节坐标的末端执行器的位姿。可以为DHRobot或ERobot类的机器人计算 正运动学:总的来说就是末端位姿相对于基座标的位置关系,用矩阵表示,这种位置关系通过关节坐标来传递T = T01T12T23T34T45*T56,而这T矩阵就是通过DH参数表示出来的,具体操作下一个文章再说,这里简单讲一下。读者也可以自己写一下。 出来的结果如下: 在这里插入图片描述 这是一个末端位姿相对于极坐标的位置的矩阵,第四列代表X,Y,Z坐标,中间三行三列代表航偏角、俯仰角、滚轮角,至此正运动学算出。

步骤五:逆运动学 逆运动学 (IK) 是实现给定末端执行器姿势所需的关节坐标。功能不是唯一的,可能没有解决办法。(已知末端位姿求解关节角度) 这里给出一些python版本和matlab版本机器人工具箱的差别 在这里插入图片描述 我选择的是ikine_LMS()

TT = robot.ikine_LMS(T) print(TT)

在这里插入图片描述 可见所得角度与之前设定的qr角度差别很小,逆运动成功,逆运动自己写也可以,我运用的是数值解,下次和正运动一起写。

DH参数

1建立坐标系

1)确定Zi轴

作为第i+1个关节的驱动轴,其方向和关节轴线方向保持一致。例如Z0是第1个关节的驱动轴,Z1是第2个关节的驱动轴。可能看上去有点混乱,但是符合规则的,这保证了:当关节i被驱动时,连杆i以及与其相连的坐标系 OiXiYiZi,将会经历一个对应的运动。

另外 Zi轴的方向符合右手定则,注意和关节的转动方向对应!

2)确定基础坐标系

由前面的讨论可知,满足DH建模约束条件的坐标变换可以用

四个参数得到! 基础坐标系的选择近乎是任意的,我们可以选择将基础坐标系的原点 Oo放置在Z0 轴上任何一点。然后,可以通过任意方便的方式来选择X0轴和Y0轴。但是建立0坐标系时,要尽可能使得最后的DH参数简单。

3)确定 Xi方向

a.轴 Zi-1和轴Zi不共面

那么轴Zi-1和轴Zi的公垂线定义了Xi轴,并且它于轴Zi的交点即为原点Oi。

b.轴Zi-1平行于轴Zi

这种情况下,轴Zi-1和轴Zi之间存在无穷多个共同法线。将穿过原点Oi-1的法线选作Xi轴, Oi是该法线和Zi轴的交点。

c.轴Zi-1和轴Zi相交

选择Xi垂直于由Zi-1和Zi组成的平面。原点Oi一般设为Zi-1和Zi的交点。不过,轴线Zi上的任意一点都可以被选作原点。

4)确定坐标系N

以上的三个步骤适用于坐标系0,…N-1。最终的坐标系通常被称为末端执行器或者工具坐标系。最常见的是,将原点Oi以对称方式布置在夹具的中间, Zi轴方向沿着末端移动方向(最后一个关节伸缩的方向)。Xi轴方向沿着夹具的上下开合方向。

因为有很多情况可以随意选择坐标系 Xi轴的方向,这就导致了不同的DH参数。为了规范DH建模方法,总结“使得DH参数简单”的一些法则。

1、确定Xi轴方向时,如果有很多种选择,尽可能选择与Xi-1相同的方向

2、确定坐标系0时,使得关节变量1的取值为零。如果是转动关节,关节变量就是;如果是平动关节,关节变量是d 3、符合人的习惯

在这里插入图片描述 确定好坐标系过后就通过上面这张图进行DH参数的确定 在这里插入图片描述 标准DH中矩阵带入参数来确定相邻两关节关系。

三、总结

主要是介绍python机器人工具箱的应用,DH参数顺便记录一下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3