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

这篇具有很好参考价值的文章主要介绍了python机器人库(robotics-toolbox-python)的运用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

Python 机器人库的运用



前言

找了半天发现网上关于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) 矩阵、四元数、扭曲和空间向量等数据类型的支持

二、必要的库的安装

  1. 需要 Python >= 3.6
  2. spatialmath-python
  3. numpy
  4. numpy-stl
  5. vpython(这个库确实不知道怎么安装,但是安装不上也不影响后续,如果有知道到的可以,一起交流)
  6. 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

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

2.正逆运动的实现

步骤一;载入库

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

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

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

输出内容
python机器人库(robotics-toolbox-python)的运用

步骤三:模型验证
使用 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)

python机器人库(robotics-toolbox-python)的运用
这里我是没弄出来,查了一下,网上说是可能是机器人工具箱本身存在的问题,有解决的也可以互相交流。
验证我是通过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()

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

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

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

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

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

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

python机器人库(robotics-toolbox-python)的运用
可见所得角度与之前设定的qr角度差别很小,逆运动成功,逆运动自己写也可以,我运用的是数值解,下次和正运动一起写。

DH参数

  1. 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、符合人的习惯

python机器人库(robotics-toolbox-python)的运用
确定好坐标系过后就通过上面这张图进行DH参数的确定
python机器人库(robotics-toolbox-python)的运用
标准DH中矩阵带入参数来确定相邻两关节关系。

三、总结

主要是介绍python机器人工具箱的应用,DH参数顺便记录一下文章来源地址https://www.toymoban.com/news/detail-403519.html

到了这里,关于python机器人库(robotics-toolbox-python)的运用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动

    b站上有一个非常好的ros教程234仿真之URDF_link标签简介-机器人系统仿真_哔哩哔哩_bilibili,推荐去看原视频。 视频教程的相关文档见:6.7.1 机器人运动控制以及里程计信息显示 · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 本文对视频教程第六章的主要内容做一个总

    2024年02月03日
    浏览(49)
  • 基于Robot Studio的工业机器人汽车喷涂仿真设计

    近几年,随着汽车普及程度的提高,消费者对汽车的外形、性能要求也越来越高,各大汽车制造商纷纷对传统的油漆生产线进行改造,以提高生产效率、节约生产成本。喷射机器人的出现和它的使用,在汽车涂装生产线上起着举足轻重的作用。本文利用ABB自主开发的Robot Stu

    2024年02月07日
    浏览(55)
  • 机器人提示词工程师 Robotics Prompt Engineer

    还没毕业,在校学习的各项技能都已经没用了,也别急着焦虑和忧伤,工业时代到信息时代,信息时代到智能时代,换代对每个普通人都是非常具有挑战性的,也是新一轮洗牌的开始。 机器人提示词工程师的核心竞争力包括以下四方面: 技术能力:机器人提示词工程师需要

    2024年02月08日
    浏览(47)
  • [足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

    本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 课程链接 : https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 机器人—— 运动能力 、计算能力、感知决策能力 的机电系统 Steady-state error : e s s = lim ⁡ t → ∞ θ e ( t ) e_{m

    2024年02月03日
    浏览(46)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月15日
    浏览(39)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 二分

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月11日
    浏览(49)
  • 机器人C++库(10)Robotics Library 之碰撞检测算法

    RL库中集成了以下开源含碰撞检测功能的库: 1.bullet3:https://pybullet.org/wordpress/ 2.FCL:https://github.com/flexible-collision-library/fcl 3.ODE:http://www.ode.org/ 4.PQP:http://gamma.cs.unc.edu/SSV/

    2023年04月08日
    浏览(43)
  • 机器人控制算法——TEB算法—Obstacle Avoidance and Robot Footprint Model(避障与机器人足迹模型)

    1.1处罚条款 避障是作为整体轨迹优化的一部分来实现的。显然,优化涉及到找到指定成本函数(目标函数)的最小成本解(轨迹)。简单地说:如果一个计划的(未来)姿势违反了与障碍物的期望分离,那么成本函数的成本必须增加。理想情况下,在这些情况下,成本函数值

    2024年02月06日
    浏览(49)
  • 协作机器人(Collaborative-Robot)安全碰撞的速度与接触力

    协作机器人(Collaborative-Robot)的安全碰撞速度和接触力是一个非常重要的安全指标。在设计和使用协作机器人时,必须确保其与人类或其他物体的碰撞不会对人员造成伤害。 对于协作机器人的安全碰撞速度,一般会设定一个上限值,以确保机器人在与人类或其他物体发生碰

    2024年02月03日
    浏览(46)
  • App Inventor 2 语音交互机器人Robot,使用讯飞语音识别引擎

    App Inventor 2 语音识别及交互App。识别语言指令并控制机器人运动,主要用到语音识别器及文本朗读器组件,语音识别相关开发最佳入门。代码逻辑简单,App交互性及趣味性非常强~ 视频预览 教程入口:App Inventor 2 中文网(www.fun123.cn) - 登陆 - “项目指南” - 语音机器人Ro

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包