亚洲无码三级大黄_两个男生开车哭声声音_美女裸体无遮挡扒开尿囗_欧美毛多水多肥妇

EC機(jī)器人微段插補(bǔ)

2025-01-22

1.  簡介

微段插補(bǔ)(Micro-segment Interpolation) 是一種用于機(jī)器人精確軌跡控制的技術(shù),尤其在路徑復(fù)雜或精度要求高的任務(wù)中表現(xiàn)出色。微段插補(bǔ)通過將機(jī)器人運(yùn)動路徑劃分為多個(gè)微小的線段,逐段進(jìn)行插補(bǔ)計(jì)算,使得機(jī)器人能夠平滑且精確地沿著預(yù)定軌跡運(yùn)動,多用在涂膠領(lǐng)域。

2.  操作流程

JBI程序介紹


LOADML JOB:20240827_925
TIMER T=1.0 S
MOVEML VJ=50% IN#(0) JOB:20240827_925
UNLOADML JOB:20240827_925


MOVML 指令可以被用于機(jī)器人的離線軌跡規(guī)劃。其中 LOADML 指令是把離線軌跡文件

20240827_925.jbi 加載到內(nèi)存中去,UNLOADML 指令是把已經(jīng)加載在內(nèi)存中的 20240827_925 文件清空。

MOVML 指令是執(zhí)行一段已經(jīng)被加載在內(nèi)存中的 20240827_925 文件。其中 VJ 代表運(yùn)動到第一個(gè)點(diǎn)的

速度,IN#(0) 代表指令運(yùn)行需要被觸發(fā)的 Digital Input 變量,(0)就代表 Di0。

文件格式說明

微段插補(bǔ)程序,就是加載微段插補(bǔ)JBI文件,文件格式如下


說明: 如果 interval[1]ms 當(dāng)這個(gè)時(shí)間為 1 的時(shí)候,軌跡間隔和機(jī)器人控制器執(zhí)行間隔相

同,當(dāng)時(shí)間大于 1 的正整數(shù)的時(shí)候,MOVML 指令會在每個(gè)給出的軌跡點(diǎn)中間差值,確保控制

器可以每 1ms 拿到一個(gè)點(diǎn)位。

LUA代碼演示參考

采集機(jī)器人路徑,輸出微段插補(bǔ)文件


--[[
根據(jù)差值記錄用戶坐標(biāo)下的位置數(shù)據(jù)并寫入文件中
B0=1:開始記錄
B0=2:記錄結(jié)束
B0=3:開始寫入文件

jbi程序中連續(xù)修改B0狀態(tài)的時(shí)候中間盡量加個(gè)延時(shí)

當(dāng)B0=1前,需要先手動移動到初始點(diǎn)
當(dāng)B0=1時(shí),程序立馬開始判斷兩個(gè)點(diǎn)的間距,當(dāng)距離大于設(shè)定距離時(shí),就開始記錄點(diǎn)

!功能:
!   根據(jù)空間上兩個(gè)點(diǎn)的距離差 連續(xù)記錄 其在用戶坐標(biāo)系 下的數(shù)據(jù)g
!   生成一個(gè)后綴為jbi的ml文件
!   ml的頭文件格式可以根據(jù)需要自動生成
]]--
sleep(0.5)
--\\定義要計(jì)算的空間上的兩點(diǎn)間距差  單位:mm
PPD_value = 0.1                
folder="glue_path"             --存放記錄path文件的文件夾名
user_frame={}
user_frame=get_user_frame(1)    --用戶坐標(biāo)系
elite_print(user_frame[1],user_frame[2],user_frame[3],user_frame[4],user_frame[5],user_frame[6])
----------------------------------------------------------------------------------
--\\計(jì)算兩點(diǎn)(x/y/z)之間的間距差
function PPDistance(p1,p2)
   --兩點(diǎn)空間上的距離
   return 

math.sqrt(((p1[1]-p2[1])*(p1[1]-p2[1]))+((p1[2]-p2[2])*(p1[2]-p2[2]))+((p1[3]-p2[3])*(p1[3]-p2[3])))
end

--\\ml文件title
function MovemlTitle(interval,refJointPos,length,postype,refFrame)
   io.write("//trajfile\n")
   io.write("version2.15.0\n")
   io.write("interval ["..interval.."]ms\n")
   io.write("refJointPos ["..refJointPos[1]..","..refJointPos[2]..","..refJointPos[3]..","..refJointPos[4]..","..refJointPos[5]..","..refJointPos[6].."]\n")
   io.write("length ["..length.."]\n")
   io.write("postype ["..postype.."]\n")
   io.write("outputNumber [2]\n")
   io.write("refFrame ["..refFrame[1]..","..refFrame[2]..","..refFrame[3]..","..refFrame[4]..","..refFrame[5]..","..refFrame[6].."]\n")
end

--\\按照當(dāng)前時(shí)間生成一個(gè)帶.jbi后;件名
function CreateFilename()
   local date = os.date("*t")
   return date.year..string.format("%02d",date.month)..string.format("%02d",date.day).."_"..date.hour..date.min..".jbi"
end

--\\傳入一個(gè)列表,寫文件
function Writefile(lists,ref_Frame)
   user_pose={}
   for i=1,#lists  do
       -- io.write("["..write_pose[i][1]..","..write_pose[i][2]..","..write_pose[i][3]..","..write_pose[i][4]..","..write_pose[i][5]..","..write_pose[i][6].."]")
       user_pose = pose_mul(pose_inv(ref_Frame),lists[i])
       io.write("["..user_pose[1]..","..user_pose[2]..","..user_pose[3]..","..user_pose[4]..","..user_pose[5]..","..user_pose[6].."]")
       io.write("\n")
   end
end

--\\持續(xù)點(diǎn)位記錄
function RecoedPPDis()
   repeat
       B0 = get_global_variable("B0")
       Now_pose = get_robot_pose()
       if(PPDistance(Begin_pose,Now_pose) >= PPD_value)  then
           write_pose[i] = Now_pose
           Begin_pose = Now_pose
           i = i+1
       end
       elite_print("Recording, wait B0 == 2")
   until(B0 == 2)
end
----------------------------------初始化--------------------------------
set_global_variable("B0",0)
Begin_pose = {}
Begin_joint = {}
Now_pose = {}
write_pose = {}
i = 1
-----------------------------------Main---------------------------------
repeat
   B0 = get_global_variable("B0")
   elite_print("wait B0 == 1")
until(B0 == 1)
Begin_pose = get_robot_pose()
Begin_joint = get_robot_joint()

--!當(dāng)B0=0時(shí),jbi開始運(yùn)動
set_global_variable("B0",0)
RecoedPPDis()

repeat
   B0 = get_global_variable("B0")
   elite_print("wait B0 == 3")
   elite_print("采點(diǎn)共:"..#write_pose)
until(B0 == 3)

----------------------------------------寫文件--------------------------------------------
elite_print("write file begin")
elite_print("please wait")
filename = CreateFilename()
elite_print(filename:sub(13))
file = io.open(filename,"w+")
io.output(file)

--\\ml文件的title
MovemlTitle(1,Begin_joint,#write_pose,"pose",user_frame)


Writefile(write_pose,user_frame)
elite_print("write file done")
io.close()


3.  常見問題解答

注意事項(xiàng):

如果機(jī)器人運(yùn)行離線軌跡時(shí)明顯震動,說明加速太猛,時(shí)間和距離不對等,需要對 interval [*]ms 即采樣時(shí)間進(jìn)行更改,例如將 interval [1]ms改為interval[10]ms。





download-669.svg comicon14.svg

電話咨詢

download-397.svg comicon15.svg

免費(fèi)試用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

準(zhǔn)備好突破增長瓶頸,開啟智能制造了嗎?
了解我們的機(jī)器人如何幫助您的業(yè)務(wù)增長
歡迎下載艾利特機(jī)器人資料

我已閱讀并同意艾利特《隱私政策》《法律聲明》

我已知曉并同意艾利特通過電子郵件發(fā)送相關(guān)資料

提交