EC机器人简单码垛(4点法)
简介
该文档适用于👽漫蛙机🎀器人🕑EC/EA系列机械臂,可【kě】用于一些机械臂码【xiè bì mǎ】垛应用【duǒ yīng yòng】场景。该码垛程序包使用时只需要🏛设置码盘的🍩4个对角点的物【diǎn de wù】料位置【liào wèi zhì】,以及物🥫料总数【liào zǒng shù】🤨,码盘层数【shù】,层高即【céng gāo jí】😋可【kě】,操作简🐔单【dān】🚠,实用易懂。初始程序包是【xù bāo shì】由陈瞭【yóu chén liǎo】编写📶。
1 仅码垛
仅码垛【jǐn mǎ duǒ】💦的意思就是该😖程序只【chéng xù zhī】支持码垛【duǒ】,单点取👮料放入码盘中
1.1 操作步骤及所需变量
(1)使用前需打开以下变量:
V158 //码垛上方位
V159 //码垛位
P150 //码盘第一个点
P151 //码盘第二个点
P152 //码盘第三个点
P153 //码盘第四个点
I 100 //码垛计数
(2)将【jiāng】JBI主程序和子程【hé zǐ chéng】🔣序导入【rù】🕝到机械🚋臂里面【bì lǐ miàn】,LUA程序导入【rù】🕝机械臂并保存设置。
(3)打开JBI子程序【zǐ chéng xù】,更新🌻P150-153这【zhè】4个点位,点位设🌂置示意🧘图如下【tú rú xià】:

(4)设置好子程序🤥里面【lǐ miàn】 I150-153 等参数,参数解【cān shù jiě】析如下Ⓜ:
I150 第一个方向个数(行数)
I151 第二个方向个数(列数)
I152 Z方向层数
I153 单层层高,单位mm
(5)在【zài】🏠JBI主程序🐱里面【lǐ miàn】,设置固定抓取【dìng zhuā qǔ】点,固定抓取【dìng zhuā qǔ】点的🎆位置为第👹17行
(6)将机械【jiāng jī xiè】臂程序【chéng xù】运行模🚚式设置为 “ 连续循环🐃 “ 模式【mó shì】🥀,运行主程序【chéng xù】
1.2 JBI程序
● 主程序
该程序是主运行程序(JBI),无需修改
NOP
CALL JOB:test_pallet_setting
//调用子程序
RESTARTLUA INDEX=1
//B000与后台LUA交互【jiāo hù】
//1:计算码垛【mǎ duǒ】⬜
//2:计算拆垛【duǒ】📁
SET B000 0
//I100 当前码🗾垛【duǒ】📁个数
SET I100 1
LABEL *startpallet
SET B000 1
TIMER T=0.1 S
WAIT B000 = 0
// 此处需增加固【zēng jiā gù】定点抓【dìng diǎn zhuā】🍸取程序⬇
// V158为当前计算得到的码垛【mǎ duǒ】⬜点
// v159 上方偏移【yí】30mm
SET V159 V158
CCOOD CART
ADD V159(2) 30
//码垛【mǎ duǒ】⬜
MOVL V159 V=1000MM/S CR=10.0MM ACC=50 DEC=50
MOVL V158 V=100MM/S CR=0.0MM ACC=50 DEC=50
TIMER T=0.5 S
MOVL V159 V=1000MM/S CR=0.0MM ACC=50 DEC=50
INC I100
JUMP *startpallet IF I100<I159
END
● 子程序
在该程🐮序里面🥢设置码盘【pán】4个对角🍻点点位⭐,码垛层【mǎ duǒ céng】数【shù】,层高,码垛总【mǎ duǒ zǒng】个数【shù】(JBI)
NOP
// 以下为🥟码垛设🔣置部分😀
// **************
// 150-159用于码【yòng yú mǎ】💡垛
// P150 startpose 第一个【dì yī gè】💂点
// P151 rowpose 第一个【dì yī gè】💂方向的🔢末端点【mò duān diǎn】🚼
// P152 columnpose 第二个【dì èr gè】方向的🔢末端点【mò duān diǎn】🚼
// P153 refpose 远端点
//P150---------->P152
// | 第二个【dì èr gè】方向 |
// | |
// | |
//第一个【dì yī gè】💂方向 |
// | |
//P151 -------- P153
SETJOINT P150 -13.5978,-104.8072,145.8060,-129.0093,134.8434,-180.1184
SETJOINT P151 -47.0715,-104.5984,133.2336,-88.6142,125.0733,-222.4587
SETJOINT P152 -5.5062,-53.8769,86.6584,-128.8164,134.5548,-168.7319
SETJOINT P153 -23.4796,-55.2147,81.2515,-104.4537,133.6682,-193.8322
// I150 第一个【dì yī gè】💂方向个【fāng xiàng gè】🖥数【shù】🛅
// I151 第二个【dì èr gè】方向个【fāng xiàng gè】🖥数【shù】🛅
// I152 Z方向层【fāng xiàng céng】👲数【shù】🛅
// I153 单层层【dān céng céng】高【gāo】🐂,单位mm
SET I150 3
SET I151 4
SET I152 2
SET I153 50
// **************
// 以上为码垛【wéi mǎ duǒ】设🔣置部分😀
//以下部分无需【fèn wú xū】设置和修改
JOINTTOPOSE P150 V150
JOINTTOPOSE P151 V151
JOINTTOPOSE P152 V152
JOINTTOPOSE P153 V153
SET I159 I150
MUL I159 I151
MUL I159 I152
INC I159
// I159为码垛【wéi mǎ duǒ】总个数【shù】🛅
TPWRITE FinishSetting
END
1.3 Lua程序
该lua脚本在🎓机器人【jī qì rén】后台运【hòu tái yùn】行即可🛎,无需修🎈改【gǎi】(LUA)
-- 1st pallet direction: startpos--->rowpos
-- 2nd pallet direction: startpos--->columnpos
-- 3rd pallet direction: startpos--->Z direction
-- startpos(1) ------ columnpos(2)
-- |
-- |
-- |
-- rowpos(3) refpos(4)
-- count: current pallet number global variable :I100
-- count_row: total row number global variable :I150
-- count_column: total column nubmer global variable :I151
-- count_layer: total layer nubmer global variable :I152
-- height: single layer height global variable :I153
-- startpos global variable :V150
-- rowpos global variable :V151
-- columnpos global variable :V152
-- refpos global variable :V153
-- outpos : calculation result global variable :V160
function Interpolate_pose(p_from, p_to, alpha)
-- Linear interpolation of tool position
-- When alpha is 0, returns p_from. When alpha is 1, returns p_to. As alpha goes from 0 to 1, returns a
-- pose going in a straight line from p_from to p_to.
-- If alpha is less than 0, returns a point before p_from on the line.
-- If alpha is greater than 1, returns a pose after p_to on the line.
local p = }
local rowpos = get_global_variable(j_rowpos)}
local refpos = get_global_variable(j_refpos)}
p[1] = p_from[1] + (p_to[1] - p_from[1]) * alpha
p[2] = p_from[2] + (p_to[2] - p_from[2]) * alpha
p[3] = p_from[3] + (p_to[3] - p_from[3]) * alpha
p[4] = p_from[4]
p[5] = p_from[5]
p[6] = p_from[6]
return p
end
function WaitUntil(var, value)
--local vtmp =
while get_global_variable(var) ~= value do
sleep(0.05)
end
end
--set_global_variable("B0", 0)
function
PalletCal(j_count,j_row,j_column,j_height,j_startpos,j_rowpos,j_columnpos,j_refpos)
local count = get_global_variable(j_count)
local count_row = get_global_variable(j_row)
local count_column = get_global_variable(j_column)
local layer_height = get_global_variable(j_height)
local startpos = get_global_variable(j_startpos)}
local columnpos = get_global_variable(j_columnpos)}
local current_layer = math.floor((count - 1) / (count_row*count_column))
count = math.fmod(count-1, (count_row*count_column)) +1 --获取在当前层【dāng qián céng】🌡第几个
local current_row = math.fmod(count - 1, count_row) -- 取余数【qǔ yú shù】📒 get residual
local current_column = math.floor((count - 1) / count_row) -- 取整数【qǔ zhěng shù】🐽 get integer+1
if(count_row==1) then
count_row =2
end
if(count_column==1) then
count_column =2
end
local outpos1 = Interpolate_pose(startpos, rowpos, current_row / (count_row - 1))
local outpos2 = Interpolate_pose(columnpos, refpos, current_row / (count_row - 1))
local outpos3 = Interpolate_pose(outpos1, outpos2, current_column / (count_column - 1))
outpos3[3] = outpos3[3] + layer_height * current_layer
return outpos3
end
while true do
local state = get_global_variable('B0')
if state ==1 then
-- 码垛【mǎ duǒ】🎌
local outpos3 =PalletCal("I100","I150","I151","I153","V150","V151","V152","V153")
set_global_variable('V158',outpos3[1],outpos3[2],outpos3[3],outpos3[4],outpos3[5],outpos3[6])
state = 0
set_global_variable("B0", 0)
elseif state == 2 then
-- 拆垛【chāi duǒ】⛎
local outpos3 =PalletCal("I101","I160","I161","I163","V160","V161","V162","V163")
set_global_variable('V168',outpos3[1],outpos3[2],outpos3[3],outpos3[4],outpos3[5],outpos3[6])
state = 0
set_global_variable("B0", 0)
end
sleep(0.01)
end
附件
1. 仅码垛
(1)简易说明
reademe.md
(2)LUA脚本程序
pallet_maduo.lua
(3)JBI程序
主程序:
test_pallet_only_maduo.jbi
子程序:
test_pallet_setting_only_maduo.jbi
2. 码垛与拆垛
(1)简易说明
reademe.md
(2)LUA脚本程序
pallet_calculation2.lua
(3)JBI程序
主程序
test_pallet.jbi
子程序
test_pallet_setting2.jbi