在lua中使用sdk

EC机器人提供了丰富的sdk接口,可以在https://www.elibot.cn/#/download 搜索 EC_SDK_SOCKET手册,

也可以参考https://bbs.elibot.cn/forum/detail/topic/60.html 

EC机器人的sdk,实质就是用户发送指定字符串(json格式)到机器人,并获取对应返回数据。

使用sdk时,机器人需要处于remote模式。sdk提供的接口比lua接口丰富,包括运动,力控等指令。

对于有些应用场合,没有上位机,不方便使用sdk开发,则可以直接在lua中使用sdk。

具体参考如下代码。

local json = require("json")
local ret
local recv
IPAdd = "192.168.1.200"
local cmd = ""
local para1 = {}
local ret1
local recv1
local id1

function NumToStr(data, num)
    local s = "%." .. num .. "f"
    return string.format(s, data)
end

function WaitUntil(var, value)
    --local vtmp =
    while get_global_variable(var) ~= value do
        sleep(0.1)
    end
end

function Connect1(IPAdd)
    ret = connect_tcp_server(IPAdd, 8055)
end

function SendCMD(IPAdd, cmd, params)
    local out_tmp
    if params == nil then
        out_tmp = json.encode({jsonrpc = "2.0", method = cmd, id = 1}) .. "\n"
    else
        out_tmp = json.encode({jsonrpc = "2.0", method = cmd, params = params, id = 1}) .. "\n"
    end
    ret = client_send_data(IPAdd, out_tmp, 0, 8055)
    ret, recv = client_recv_data(IPAdd, 1, 0, 8055)
    if ret < 0 then
        elite_print("接受8055数据失败")
        return false, nil, nil
    else
        local recv_json = json.decode(recv)
        return true, recv_json.result, recv_json.id
    end
end

function String2Table(str_t)
    local tmp = string.sub(str_t, 2, -2)
    local tmp1 = string.split(tmp, ",")
    local out = {}
    for i = 1, #tmp1, 1 do
        out[i] = tonumber(tmp1[i])
        --out[i] = tonumber(tmp1[i])
    end
    return out
end

sleep(0.3)
Connect1(IPAdd)


while true do
    local ec_state = get_robot_register(66)
    --register66: m528-m543

    if ec_state == 1 then
        cmd = "setVirtualOutput" --控制命令
        para1 = {addr = 552, status = 1} --参数,如果没有,下方SendCMD指令可以不加入para1
        ret1, recv1, id1 = SendCMD(IPAdd, cmd, para1)
        --set_global_variable("B002", 0)
    end

    if ec_state == 2 then
        cmd = "setVirtualOutput"
        para1 = {addr = 552, status = 0}
        ret1, recv1, id1 = SendCMD(IPAdd, cmd, para1)
        --set_global_variable("B002", 0)
        
    end
   
    if ec_state == 10 then
        cmd = "get_joint_pos"
        ret1, recv1, id1 = SendCMD(IPAdd, cmd)
        local joints = String2Table(recv1)
        elite_print("机器人当前角度:", NumToStr(joints[1],2),NumToStr(joints[2],2),NumToStr(joints[3],2),NumToStr(joints[4],2),NumToStr(joints[5],2),NumToStr(joints[6],2))
        --set_global_variable("B002", 0)
    end

    if ec_state == 20 then
        cmd = "get_tcp_pose"
        ret1, recv1, id1 = SendCMD(IPAdd, cmd)
        local pose1 = String2Table(recv1)
        elite_print("机器人当前位姿:", NumToStr(pose1[1],2),NumToStr(pose1[2],2),NumToStr(pose1[3],2),NumToStr(pose1[4],2),NumToStr(pose1[5],2),NumToStr(pose1[6],2))
        --set_global_variable("B002", 0)
    end

    sleep(0.2)
end
点击显示全文
赞同0
发表评论
分享

手机扫码分享
0
935
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
举报
请选择举报理由
举报
举报说明