剧情简介:这个工具箱为Python带来了机器人特有的功能,并充分利用了Python的可移植性、普遍性和支持的优势,以及线性代数(numpy, scipy)、图形(matplotlib, three)的开源生态系统的能力。交互式开发(jupyter,jupyterlab, mybinder.org)和文档(sphinx)。工具箱提供了工具,代表串行连接运动学和动力学的操纵者,您可以轻松地创建自己的Denavit-Hartenberg形式,导入URDF文件,或使用超过30提供模型从Franka-Emika著名当代机器人,Kinova,万能机器人,反思以及古典机器人如彪马560年斯坦福大学的手臂。这个工具箱还将支持移动机器人的功能,包括机器人运动模型(独轮车、自行车)、路径规划算法(bug、距离变换、D*、PRM)、运动动态规划(lattice、RRT)、定位(EKF、粒子滤波)地图构建(EKF)和同步定位和映射(EKF)。工具箱提供了:成熟的代码,并为相同算法的其他实现提供一个比较点;例程通常以简单易懂的方式编写,便于理解,可能会牺牲计算效率;源代码,可以读为学习和教学与MATLAB的机器人工具箱向后兼容这个工具箱利用了Python的空间数学工具箱来提供对诸如SO(n)和SE(n)矩阵、四元数、扭转和空间向量等数据类型的支持。
第一步:安装这个包,通过pycharm安装,先建立一个工程,使用虚拟环境。然后在teminal里面通过pip3 install roboticstoolbox-python进行安装。
第二步:引用库并建立一个机器人变量,并进行打印和观察数据结构。
在Python console输入以下命令,查看建立的机器人的DH参数模型。右侧可以看到这个机器人变量的里面的具体内容。 import roboticstoolbox as rtb robot = rtb.models.DH.Panda() print(robot)
第三步:机器人的正运动学函数
输入机器人正向运动学并查看结果及相关变量结构
T = robot.fkine(robot.qz) # forward kinematics
print(T)
第四步:机器人的反运动学计算
我们可以很容易地解逆运动学。我们首先选择一个SE(3)位姿定义在位置和方向(末端执行器z轴向下(A=-Z)和手指方向平行于Y轴(0=+Y)。
官网上给第例子是下面的,不过ikine_unc函数好像没有,试了其他的也没有弄出来。
from spatialmath import SE3
T = SE3(0.8, 0.2, 0.1) * SE3.OA([0, 1, 0], [0, 0, -1])
sol = robot.ikine_unc(T) # solve IK
print(sol.q) # display joint angles
[-0.01044 7.876 1.557 -6.81 1.571 4.686 0.5169]
print(robot.fkine(sol.q)) # FK shows that desired end-effector pose was achieved
Out[35]:
SE3:┏ ┓
┃-1 -4e-08 0.000521 0.615 ┃
┃ 2.79e-08 1 0.00013 0.154 ┃
┃-0.000521 0.00013 -1 0.105 ┃
┃ 0 0 0 1 ┃
┗ ┛
第五步:绘制三维数据的机器人末端移动。
请注意,因为这个机器人是冗余的,我们没有任何控制手臂的姿势除了endeffector pose,即我们控制不了手肘。我们可以动画一个路径从垂直的qz配置到这个拾取的场景
q_pickup=[-0.01044,7.876,1.557,-6.81,1.571,4.686,0.5169]#官网的例子里面没有定义这个变量,我自己选了第四步的值。
qt = rtb.trajectory.jtraj(robot.qz, q_pickup, 50)
robot.plot(qt.q, movie='panda1.gif')
第六步:绘制一个动态实体机器人
它使用默认的matplotlib后端。灰色箭头表示关节轴,彩色边框表示末端姿势。现在让我们加载同一机器人的URDF模型。运动学表示不再基于DenavitHartenberg参数,它现在是一个刚体树。
robot = rtb.models.URDF.Panda() # load URDF version of the Panda
print(robot) # display the model
符号@表示该链接作为末端执行器,即riqbody树中的叶节点。我们可以在基于浏览器的3d模拟环境中实例化我们的机器人。
env = rtb.backends.Swift() # instantiate 3D browser-based visualizer
env.launch() # activate it
env.add(robot) # add robot to the 3D scene
执行下面的for循环,机器人就会动起来。
for qk in qt.q: # for each joint configuration on trajectory
robot.q = qk # update the robot state
env.step() # update visualization
总结:GitHub上还有其他的例子可以自己尝试。https://github.com/petercorke/robotics-toolbox-python.git