用于机器人教育和研究的Python库

roboticstoolbox-python的Python项目详细描述


Python机器人工具箱

PyPI versionPyPI - Python VersionLanguage grade: PythonBuild StatusCoverageLicense: MITBinderQUT Centre for Robotics Open Source

A Python implementation of the Robotics Toolbox for MATLAB®

概要

这个工具箱为Python带来了特定于机器人的功能,并利用 Python的普遍性和可移植性的优势 线性代数(numpy,scipy)的开源生态系统,图形 (matplotlib,三.js,WebGL),交互式开发(jupyter,jupyterlab, mybinder.org网站),和文档(斯芬克斯)。在

工具箱提供了用于表示 串行链接操纵器-你可以很容易地创建你自己在德纳维哈滕伯格 形成、导入一个URDF文件,或者使用30多个提供的知名模型 来自Franka Emika、Kinova、Universal Robotics的当代机器人 以及经典的机器人,如彪马560和斯坦福手臂。在

工具箱还将支持具有机器人运动模型功能的移动机器人 (独轮车,自行车),路径规划算法(错误,距离变换,D*, PRM)、动力学规划(lattice,RRT)、定位(EKF、粒子滤波)、, 地图生成(EKF)和同步定位与制图(EKF)。在

工具箱提供:

  • 成熟的代码,为其他代码提供了一个比较点 相同算法的实现
  • 通常以直截了当的方式编写的例程 允许容易理解,也许以计算为代价 效率
  • 可供学习和教学阅读的源代码
  • 与MATLAB机器人工具箱的向后兼容性

代码示例

我们将加载一个Franka Emika熊猫机器人的模型 修改(克雷格公约)德纳维特-哈滕贝格表示法

importroboticstoolboxasrtbrobot=rtb.models.DH.Panda()print(robot)┏━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓aⱼ₋₁₋₁θⱼdⱼqq┣━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━╋━━━━━━━━━╋━━━━━━━━┫0.00.0°q10.333-166.0°166.0°0.0-90.0°q20.0-101.0°101.0°0.090.0°q30.316-166.0°166.0°0.082590.0°q40.0-176.0°-4.0°-0.0825-90.0°q50.384-166.0°166.0°0.090.0°q60.0-1.0°215.0°0.08890.0°q70.107-166.0°166.0°┗━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━━━┻━━━━━━━━━┻━━━━━━━━┛┌─────┬───────────────────────────────────────┐toolt=0,0,0.1;rpy/xyz=-45°,0°,0°└─────┴───────────────────────────────────────┘┌─────┬─────┬────────┬─────┬───────┬─────┬───────┬──────┐nameq0q1q2q3q4q5q6├─────┼─────┼────────┼─────┼───────┼─────┼───────┼──────┤qz0°0°0°0°0°0°0°qr0°-17.2°0°-126°0°115°45°└─────┴─────┴────────┴─────┴───────┴─────┴───────┴──────┘T=robot.fkine(robot.qz)# forward kinematicsprint(T)0.7071070.70710700.0880.707107-0.7071070000-10.8230001

(不显示Python提示以便于复制和粘贴代码,控制台输出缩进)

我们可以很容易地解逆运动学。我们首先选择一个SE(3)姿势 根据位置和方向(末端执行器z轴向下(A=-z)和手指定义 平行于y轴的方向(O=+y)。在

^{pr2}$

请注意,因为这个机器人是冗余的,我们除了末端执行器姿势外,对手臂的配置没有任何控制,也就是说,我们无法控制肘部的高度。在

我们可以设置从垂直qz配置到这个拾取配置的路径

qt=rtb.trajectory.jtraj(robot.qz,q_pickup,50)robot.plot(qt.q,movie='panda1.gif')

Panda trajectory animation

它使用默认的matplotlib后端。灰色箭头显示关节轴,彩色框架显示末端效应器姿势。在

现在让我们加载同一个机器人的URDF模型。运动表示不再存在 基于Denavit-Hartenberg参数,它现在是一个刚体树。在

robot=rtb.models.URDF.Panda()# load URDF version of the Pandaprint(robot)# display the model┌───┬──────────────┬─────────────┬──────────────┬─────────────────────────────────────────────┐idlinkparentjointETS├───┼──────────────┼─────────────┼──────────────┼─────────────────────────────────────────────┤0panda_link0-1panda_link1panda_link0panda_joint1tz(0.333)*Rz(q0)2panda_link2panda_link1panda_joint2Rx(-90°)*Rz(q1)3panda_link3panda_link2panda_joint3ty(-0.316)*Rx(90°)*Rz(q2)4panda_link4panda_link3panda_joint4tx(0.0825)*Rx(90°)*Rz(q3)5panda_link5panda_link4panda_joint5tx(-0.0825)*ty(0.384)*Rx(-90°)*Rz(q4)6panda_link6panda_link5panda_joint6Rx(90°)*Rz(q5)7panda_link7panda_link6panda_joint7tx(0.088)*Rx(90°)*Rz(q6)8@panda_link8panda_link7panda_joint8tz(0.107)└───┴──────────────┴─────────────┴──────────────┴─────────────────────────────────────────────┘

我们可以在基于浏览器的三维仿真环境中实例化我们的机器人。在

env=rtb.backends.Swift()# instantiate 3D browser-based visualizerenv.launch()# activate itenv.add(robot)# add robot to the 3D sceneforqkinqt.q:# for each joint configuration on trajectoryrobot.q=qk# update the robot stateenv.step()# update visualization

URDF Panda trajectory animation

开始吧

安装

您需要Python>;=3.6

使用pip

从PyPI安装快照

pip3 install roboticstoolbox-python

可用选项包括:

  • ^{cd2}安装后端
  • vpython安装VPython后端
  • collision使用pybullet安装冲突检查

将选项放在逗号分隔的列表中,如下所示

pip3 install roboticstoolbox-python[optionlist]

Swift-sim,一个基于web的可视化工具,是 作为机器人工具箱的一部分安装。在

来自GitHub

从GitHub安装最新版本

git clone https://github.com/petercorke/robotics-toolbox-python.git
cd robotics-toolbox-python
pip3 install -e .

举几个例子

^{}文件夹包含一些Jupyter教程笔记本,您可以在GitHub上浏览这些笔记本。在

或者你可以运行它们,在mybinder.org上进行实验。在

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

推荐PyPI第三方库


热门话题
java FileHandle在libgdx中的行为异常   java JSONObject文本必须在1[字符2第1行]处以“{”开头,在使用HTTPClient自动化API时出现此错误   java如何删除域下不同路径的所有cookie   项目间的java Log4j共享   java propertyChangeListeners连锁反应,导致溢出   java gradle测试错误:retrolambda。oldJdk   java IDE没有给出错误,但ArrayList无法工作   web服务Java大字符串压缩安全方法   java如何从奥地利ecard将ResponseADU解码为XML?   java RxJava 2将事件并行化以执行,并产生副作用   java在jni的CallStaticObjectMethod的引用上使用DeleteLocalRef   java递归查找字符串中出现的字母数   java为什么SBT想要获得组织。scalasbt是否已安装?   java如何动态地增加布局,并知道用户点击了哪个布局?   条形图上未设置java截击响应数据