亚洲aⅴ精品,亚洲精品日本,国产精品97色综合国产精品,欧美日韩国产一二三区

EC機器人微段插補

2025-01-22

1.  簡介

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

2.  操作流程

JBI程序介紹


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


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

20240827_925.jbi 加載到內存中去,UNLOADML 指令是把已經加載在內存中的 20240827_925 文件清空。

MOVML 指令是執行一段已經被加載在內存中的 20240827_925 文件。其中 VJ 代表運動到第一個點的

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

文件格式說明

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


說明: 如果 interval[1]ms 當這個時間為 1 的時候,軌跡間隔和機器人控制器執行間隔相

同,當時間大于 1 的正整數的時候,MOVML 指令會在每個給出的軌跡點中間差值,確保控制

器可以每 1ms 拿到一個點位。

LUA代碼演示參考

采集機器人路徑,輸出微段插補文件


--[[
根據差值記錄用戶坐標下的位置數據并寫入文件中
B0=1:開始記錄
B0=2:記錄結束
B0=3:開始寫入文件

jbi程序中連續修改B0狀態的時候中間盡量加個延時

當B0=1前,需要先手動移動到初始點
當B0=1時,程序立馬開始判斷兩個點的間距,當距離大于設定距離時,就開始記錄點

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

--\\按照當前時間生成一個帶.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

--\\傳入一個列表,寫文件
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

--\\持續點位記錄
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()

--!當B0=0時,jbi開始運動
set_global_variable("B0",0)
RecoedPPDis()

repeat
   B0 = get_global_variable("B0")
   elite_print("wait B0 == 3")
   elite_print("采點共:"..#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.  常見問題解答

注意事項:

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





download-669.svg comicon14.svg

電話咨詢

download-397.svg comicon15.svg

免費試用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

準備好突破增長瓶頸,開啟智能制造了嗎?
了解我們的機器人如何幫助您的業務增長
歡迎下載艾利特機器人資料

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

我已知曉并同意艾利特通過電子郵件發送相關資料

提交