[color=rgba(0, 0, 0, 0.65)]一直在纠结是先讲头部运动,还是先讲空间坐标系,后来决定还是先讲头部运动,让大家先感受一下机械臂在空间中是怎么定位的,然后我们下一节将详细介绍机械臂的空间坐标是怎么回事。空间坐标是一项非常复杂且需要深度理解的东西,学好空间坐标才能学好机械臂的各种运动。为了更好的体验一下机械臂的空间定位,我们先从这个机械臂头部运动开始,让大家体验一下空间坐标及运动。 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)](1)send_coords([x,y,z,rx,ry,rz],speed,model)是用来控制机械臂头部以指定姿态移动到指定点。它主要用于实现智能规划机械臂头部从一个位置到另一个指定位置。X,Y,Z 表示的是机械臂头部在空间中的位置(该坐标系为直角坐标系),rx,ry,rz 表示的是机械臂头部在该点的姿态(该坐标系为欧拉坐标)。 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]函数功能:智能规划路线,让机械臂头部从原来点移动到指定点。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]参数说明: x,y,z 是空间直角坐标系,[rx,ry,rz]表示的是机械臂头部的姿态,是欧拉坐标系。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]speed:表示机械臂运动的速度。取值范围为 0~100,值越大速度越快。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]model:取值限定 0 和 1。0 表示机械臂头部移动随机规划,只要机械臂头移动到指定点即可。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]1 表示机械臂头部让机械臂头部以直线的方式移动到指定点。 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)](2)get_coords() [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]函数功能:获取此时机械臂头部的空间坐标以及当前姿态。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]返回值:返回的类型是包含六个 float 元素的 list 集合,前三个坐标为 x,y,z 表示机械臂头部的坐标,后三个坐标 rx,ry,rz 表示机械臂头部的姿态。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]我们还是老方法,一边实验,一边学习。打开一个终端窗口输入python,先导入我们必须API函数。 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]from pymycobot.mycobot import MyCobot [color=rgba(0, 0, 0, 0.65)]from pymycobot.genre import Coord [color=rgba(0, 0, 0, 0.65)]from pymycobot import PI_PORT, PI_BAUD [color=rgba(0, 0, 0, 0.65)]import time [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]让头部以线性的方式到达[59.9,-65.8,250.7]这个坐标,以及保持[-50.99,83.14,-52.42]这个姿态 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]mc = MyCobot(PI_PORT, PI_BAUD) [color=rgba(0, 0, 0, 0.65)]mc.send_coords([59.9, -65.8, 250.7, -50.99, 83.14, -52.42], 80, 1) [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]可能你做完这一段代码导到的形状跟我这个不一样,也没关系。因为只要头部到达这个位置就可以,因为他是以头部规划的线路,各个关节即使有各种形状,也没关系。我们执行一下get_coords获取一下此时的坐标数据: [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]coords = mc.get_coords() [color=rgba(0, 0, 0, 0.65)]print(coords) [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]如下图: [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] 这个值与我们传递的值不一样,主要原因是这是机器内部误差,这个值接近我们传递的数值。 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]第二个例子:我们输入: [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]mc.send_angles([88.68, -138.51, 155.65, -128.05, -9.93, -15.29], 50) [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]状态变成这个样子,然后我们再输入之前的头部坐标: [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]mc.send_coords([59.9, -65.8, 250.7, -50.99, 83.14, -52.42], 80, 1) [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] 机械臂变成了这个样子,让我们再取一下机械臂的坐标: [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]coords = mc.get_coords() [color=rgba(0, 0, 0, 0.65)]print(coords) [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]我们得到的坐标为:[59.5, -66.0, 251.1, -49.56, 83.14, -50.92]如下图。 [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]这说明头部空间坐标只要达到所在位置,各关节的状态可能每次都不一样。 [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)](3)说明书中提供的测试小程序: [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]#!/usr/bin/python3 [color=rgba(0, 0, 0, 0.65)]#-*- coding: UTF-8 -*- [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]from pymycobot.mycobot import MyCobot [color=rgba(0, 0, 0, 0.65)]from pymycobot.genre import Coord [color=rgba(0, 0, 0, 0.65)]from pymycobot import PI_PORT, PI_BAUD [color=rgba(0, 0, 0, 0.65)]import time [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]mc = MyCobot(PI_PORT, PI_BAUD) [color=rgba(0, 0, 0, 0.65)]# 获取当前头部的角度以及姿态 [color=rgba(0, 0, 0, 0.65)]coords = mc.get_coords() [color=rgba(0, 0, 0, 0.65)]print(coords) [color=rgba(0, 0, 0, 0.65)]# 智能规划路线,让头部以线性的方式到达[59.9,-65.8,250.7]这个坐标,以及保持[-50.99,83.14,-52.42]这个姿态 [color=rgba(0, 0, 0, 0.65)]mc.send_coords([59.9, -65.8, 250.7, -50.99, 83.14, -52.42], 80, 1) [color=rgba(0, 0, 0, 0.65)]# 设置等待时间 [color=rgba(0, 0, 0, 0.65)]time.sleep(1.5) [color=rgba(0, 0, 0, 0.65)]# 智能规划路线,让头部以线性的方式到达[59.9,-65.8,350.7]这个坐标,以及保持[-50.99,83.14,-52.42]这个姿态 [color=rgba(0, 0, 0, 0.65)]mc.send_coords([59.9, -65.8, 350.7, -50.99, 83.14, -52.42], 80, 1) [color=rgba(0, 0, 0, 0.65)]# 设置等待时间 [color=rgba(0, 0, 0, 0.65)]time.sleep(1.5) [color=rgba(0, 0, 0, 0.65)]# 仅改变头部的x坐标,设置头部的x坐标为-40。让其智能规划路线让头部移动到改变后的位置 [color=rgba(0, 0, 0, 0.65)]mc.send_coord(Coord.X.value, -40, 70) [color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]同样,你可以将这段代码保存成4.py,然后,你开一个新的窗口,执行: [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] [color=rgba(0, 0, 0, 0.65)]python 4.py [color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]就可以连续运行这段代码了。
本文来自于:CSDN的BBM的开源HUB分享,使用大象机器人mycobot机械臂
|