MyCobot機(jī)械臂頭部智能規(guī)劃路線(四)
一直在糾結(jié)是先講頭部運(yùn)動(dòng),還是先講空間坐標(biāo)系,后來決定還是先講頭部運(yùn)動(dòng),讓大家先感受一下機(jī)械臂在空間中是怎么定位的,然后我們下一節(jié)將詳細(xì)介紹機(jī)械臂的空間坐標(biāo)是怎么回事??臻g坐標(biāo)是一項(xiàng)非常復(fù)雜且需要深度理解的東西,學(xué)好空間坐標(biāo)才能學(xué)好機(jī)械臂的各種運(yùn)動(dòng)。為了更好的體驗(yàn)一下機(jī)械臂的空間定位,我們先從這個(gè)機(jī)械臂頭部運(yùn)動(dòng)開始,讓大家體驗(yàn)一下空間坐標(biāo)及運(yùn)動(dòng)。
(1)send_coords([x,y,z,rx,ry,rz],speed,model)是用來控制機(jī)械臂頭部以指定姿態(tài)移動(dòng)到指定點(diǎn)。它主要用于實(shí)現(xiàn)智能規(guī)劃機(jī)械臂頭部從一個(gè)位置到另一個(gè)指定位置。X,Y,Z 表示的是機(jī)械臂頭部在空間中的位置(該坐標(biāo)系為直角坐標(biāo)系),rx,ry,rz 表示的是機(jī)械臂頭部在該點(diǎn)的姿態(tài)(該坐標(biāo)系為歐拉坐標(biāo))。
函數(shù)功能:智能規(guī)劃路線,讓機(jī)械臂頭部從原來點(diǎn)移動(dòng)到指定點(diǎn)。
參數(shù)說明: x,y,z 是空間直角坐標(biāo)系,[rx,ry,rz]表示的是機(jī)械臂頭部的姿態(tài),是歐拉坐標(biāo)系。
speed:表示機(jī)械臂運(yùn)動(dòng)的速度。取值范圍為 0~100,值越大速度越快。
model:取值限定 0 和 1。0 表示機(jī)械臂頭部移動(dòng)隨機(jī)規(guī)劃,只要機(jī)械臂頭移動(dòng)到指定點(diǎn)即可。
1 表示機(jī)械臂頭部讓機(jī)械臂頭部以直線的方式移動(dòng)到指定點(diǎn)。
(2)get_coords()
函數(shù)功能:獲取此時(shí)機(jī)械臂頭部的空間坐標(biāo)以及當(dāng)前姿態(tài)。
返回值:返回的類型是包含六個(gè) float 元素的 list 集合,前三個(gè)坐標(biāo)為 x,y,z 表示機(jī)械臂頭部的坐標(biāo),后三個(gè)坐標(biāo) rx,ry,rz 表示機(jī)械臂頭部的姿態(tài)。
我們還是老方法,一邊實(shí)驗(yàn),一邊學(xué)習(xí)。打開一個(gè)終端窗口輸入python,先導(dǎo)入我們必須API函數(shù)。
from pymycobot.mycobot import MyCobot
from pymycobot.genre import Coord
from pymycobot import PI_PORT, PI_BAUD
import time
讓頭部以線性的方式到達(dá)[59.9,-65.8,250.7]這個(gè)坐標(biāo),以及保持[-50.99,83.14,-52.42]這個(gè)姿態(tài)
mc = MyCobot(PI_PORT, PI_BAUD)
mc.send_coords([59.9, -65.8, 250.7, -50.99, 83.14, -52.42], 80, 1)
可能你做完這一段代碼導(dǎo)到的形狀跟我這個(gè)不一樣,也沒關(guān)系。因?yàn)橹灰^部到達(dá)這個(gè)位置就可以,因?yàn)樗且灶^部規(guī)劃的線路,各個(gè)關(guān)節(jié)即使有各種形狀,也沒關(guān)系。我們執(zhí)行一下get_coords獲取一下此時(shí)的坐標(biāo)數(shù)據(jù):
coords = mc.get_coords()
print(coords)
如下圖:
這個(gè)值與我們傳遞的值不一樣,主要原因是這是機(jī)器內(nèi)部誤差,這個(gè)值接近我們傳遞的數(shù)值。
第二個(gè)例子:我們輸入:
mc.send_angles([88.68, -138.51, 155.65, -128.05, -9.93, -15.29], 50)
狀態(tài)變成這個(gè)樣子,然后我們再輸入之前的頭部坐標(biāo):
mc.send_coords([59.9, -65.8, 250.7, -50.99, 83.14, -52.42], 80, 1)
機(jī)械臂變成了這個(gè)樣子,讓我們再取一下機(jī)械臂的坐標(biāo):
coords = mc.get_coords()
print(coords)
我們得到的坐標(biāo)為:[59.5, -66.0, 251.1, -49.56, 83.14, -50.92]如下圖。
這說明頭部空間坐標(biāo)只要達(dá)到所在位置,各關(guān)節(jié)的狀態(tài)可能每次都不一樣。
(3)說明書中提供的測試小程序:
#!/usr/bin/python3
#-*- coding: UTF-8 -*-
from pymycobot.mycobot import MyCobot
from pymycobot.genre import Coord
from pymycobot import PI_PORT, PI_BAUD
import time
mc = MyCobot(PI_PORT, PI_BAUD)
# 獲取當(dāng)前頭部的角度以及姿態(tài)
coords = mc.get_coords()
print(coords)
# 智能規(guī)劃路線,讓頭部以線性的方式到達(dá)[59.9,-65.8,250.7]這個(gè)坐標(biāo),以及保持[-50.99,83.14,-52.42]這個(gè)姿態(tài)
mc.send_coords([59.9, -65.8, 250.7, -50.99, 83.14, -52.42], 80, 1)
# 設(shè)置等待時(shí)間
time.sleep(1.5)
# 智能規(guī)劃路線,讓頭部以線性的方式到達(dá)[59.9,-65.8,350.7]這個(gè)坐標(biāo),以及保持[-50.99,83.14,-52.42]這個(gè)姿態(tài)
mc.send_coords([59.9, -65.8, 350.7, -50.99, 83.14, -52.42], 80, 1)
# 設(shè)置等待時(shí)間
time.sleep(1.5)
# 僅改變頭部的x坐標(biāo),設(shè)置頭部的x坐標(biāo)為-40。讓其智能規(guī)劃路線讓頭部移動(dòng)到改變后的位置
mc.send_coord(Coord.X.value, -40, 70)
同樣,你可以將這段代碼保存成4.py,然后,你開一個(gè)新的窗口,執(zhí)行:
python 4.py
就可以連續(xù)運(yùn)行這段代碼了。