机器人DH参数可以通过示教器的“参数设置”-DH获取。
机器人经过Leica激光仪标定,实际DH参数与理论值有差异,请使用机器人实际DH参数。
下图为机器人实际连杆参数,注:以下连杆参数使用以下公式转化到对应标准DH参数的a alpha,d和theta
d1 = 连杆参数 d1
a2 = 连杆参数 d3
a3 = 连杆参数 d5
d4 = 连杆参数 d2 - 连杆参数 d4 + 连杆参数 d6
d5 = 连杆参数 d7
d6 = 连杆参数 d8
也可使用以下lua代码,直接获取机器人实际DH参数,获取到的结果存储到对应ECxxDHpara.txt文件中。
-- Author: chenliao@elibot.cn
-- 字符串分割 function string.split(str,delimiter) if str == nil or str == '' or delimiter == nil then return nil end local result = {} for match in (str..delimiter):gmatch("(.-)"..delimiter) do table.insert(result,match) end return result end function SaveRealDHPara(DH) --Elibot using DH modeling, d→θ →a→α (TzRzTxRx) -- d1 = link parameter d1 -- a2 = link parameter d3 -- a3 = link parameter d5 -- d4 = link parameter d2 - link parameter d4 + link parameter d6 -- d5 = link parameter d7 -- d6 = link parameter d8 local d = {0, 0, 0, 0, 0, 0} local a = {0, 0, 0, 0, 0, 0} local theta = {0, 0, 0, 0, 0, 0} local alpha = {-math.pi / 2, 0, 0, -math.pi / 2, -math.pi / 2, 0} d[1] = DH[1] a[2] = DH[3] a[3] = DH[5] d[4] = DH[2] - DH[4] + DH[6] d[5] = DH[7] d[6] = DH[8] local robot_name = '' if(a[2]<280) then robot_name='EC63' elseif(a[2]<450) then robot_name='EC66' else robot_name='EC612' end file = io.open(robot_name.."DHpara.txt", "w") io.output(file) io.write('Elibot using DH modeling, d→θ →a→α (TzRzTxRx)\n') io.write(robot_name..' robot DH parameters\n') io.write('theta\td\ta\talpha\n') for i=1,6,1 do io.write(NumToStr(theta[i],2)..'\t'..NumToStr(d[i],2)..'\t'..NumToStr(a[i],2)..'\t'..NumToStr(alpha[i],2)..'\n') end -- 关闭打开的文件 io.close(file) sleep(0.3) elite_print('机器人实际DH参数已经保存到'..robot_name.."DHpara.txt") end function DealJson(recv_str) local Data = string.split(recv_str,',') local Data1 = string.split(Data[2],'"') return tonumber(Data1[4]) end function GetRobotDHPar() local ret local recv local send_str = '' local DHPar = {} ret=connect_tcp_server(IPAdd ,8055) for i=1,8,1 do send_str = '{\"jsonrpc\": \"2.0\", \"method\": \"getDH\", \"params\": {\"index\": '..(i-1)..'}, \"id\": '..i..'}\n' ret=client_send_data(IPAdd,send_str,0,8055) ret ,recv=client_recv_data (IPAdd ,3,0,8055) while ret<0 do ret=connect_tcp_server(IPAdd ,8055) ret=client_send_data(IPAdd,send_str,0,8055) ret ,recv=client_recv_data (IPAdd ,3,0,8055) end -- elite_print(ret,recv) DHPar[i] = DealJson(recv) end return DHPar end IPAdd ='192.168.1.200' -- Modify robot IP DH = {139.897, 119.493, 270.993, 114.007, 256.585, 97.993, 97.974, 89.004} -- current robot link parameter --Elibot using DH modeling, d→θ →a→α (TzRzTxRx) -- d1 = link parameter d1 -- a2 = link parameter d3 -- a3 = link parameter d5 -- d4 = link parameter d2 - link parameter d4 + link parameter d6 -- d5 = link parameter d7 -- d6 = link parameter d8 sleep(0.5) DH = GetRobotDHPar() SaveRealDHPara(DH)