检测机器人当前是否在机械原点或等待位置

检测机器人当前是否在机械原点

  • 获取机器人当前关节数据jointdata,与预定义的机械原点在一个自定义的范围内作对比。
  • RAPID程序
    ! description 					   : 检测机器人当前是否在机械原点,默认机械原点各轴位置为0
    ! optional param {num} errorRange : 可选参数,容错范围,默认值是0.5毫米(线性轴)或度(旋转轴)
    ! return {bool}				   : 若机器人当前在以机械原点为中心的区间内,返回TRUE,否则返回FALSE
    FUNC bool isRobotAtHome(\num errorRange)
        ! 记录各个轴对比的计数器
        VAR num counter := 0;
        ! 定义容错范围
        VAR num errRange := 0.5;
        ! 定义当前关节数据
        VAR jointtarget curJointTar;
        VAR robjoint curRobJ;
        
        ! 检测是否启用可选参数
        IF Present(errorRange) errRange := errorRange;
        ! 获取当前关节数据
        curJointTar := CJointT();
        curRobJ := curJointTar.robax;
        
        ! 各个轴与以机械原点为中心的区间(-errRange, errRange)进行对比
        IF curRobJ.rax_1>-errRange AND curRobJ.rax_1<errRange Incr counter;
        IF curRobJ.rax_2>-errRange AND curRobJ.rax_2<errRange Incr counter;
        IF curRobJ.rax_3>-errRange AND curRobJ.rax_3<errRange Incr counter;
        IF curRobJ.rax_4>-errRange AND curRobJ.rax_4<errRange Incr counter;
        IF curRobJ.rax_5>-errRange AND curRobJ.rax_5<errRange Incr counter;
        IF curRobJ.rax_6>-errRange AND curRobJ.rax_6<errRange Incr counter;
        RETURN counter = 6;
    ENDFUNC
    

检测机器人当前是否在等待位置

  • 获取机器人当前位置数据robtarget,与指定的等待位置在一个自定义的范围内作对比。
  • RAPID程序
    ! description                     : 检测机器人当前是否在等待位置
    ! param {robtarget} waitPos       : 等待位置
    ! param {tooldata} toolOnWaitPos  : 创建等待位置的工具数据
    ! param {wobjdata} wobjOnWaitPos  : 创建等待位置的工件数据
    ! optional param {num} transRange : 可选参数,位置坐标的容错范围
    ! optional param {num} rotRange   : 可选参数,姿态数据四元数的容错范围
    ! return {bool}                   : 若机器人当前在以等待位置为中心的区间内,返回TRUE,否则返回FALSE
    FUNC bool isRobotAtWaitPos(robtarget waitPos,INOUT tooldata toolOnWaitPos,INOUT wobjdata wobjOnWaitPos,\num transRange,\num rotRange)
        ! 进行位置数据对比的计数器
        VAR num counter:=0;
        ! 定义默认的位置坐标区间范围,姿态数据区间范围
        VAR num tRange:=25;
        VAR num rRange:=0.1;
        ! 定义当前位置数据
        VAR robtarget curPos;
    
        ! 检测是否启用可选参数
        IF Present(transRange) tRange:=transRange;
        IF Present(rotRange) rRange:=rotRange;
        ! 获取当前位置数据
        curPos := CRobT(\Tool:=toolOnWaitPos, \WObj:=wobjOnWaitPos);
        
        ! 对比位置坐标和姿态数据
        IF curPos.trans.x>waitPos.trans.x-tRange AND curPos.trans.x<waitPos.trans.x+tRange Incr counter;
        IF curPos.trans.y>waitPos.trans.y-tRange AND curPos.trans.y<waitPos.trans.y+tRange Incr counter;
        IF curPos.trans.z>waitPos.trans.z-tRange AND curPos.trans.z<waitPos.trans.z+tRange Incr counter;
        IF curPos.rot.q1>waitPos.rot.q1-rRange AND curPos.rot.q1<waitPos.rot.q1+rRange Incr counter;
        IF curPos.rot.q2>waitPos.rot.q2-rRange AND curPos.rot.q2<waitPos.rot.q2+rRange Incr counter;
        IF curPos.rot.q3>waitPos.rot.q3-rRange AND curPos.rot.q3<waitPos.rot.q3+rRange Incr counter;
        IF curPos.rot.q4>waitPos.rot.q4-rRange AND curPos.rot.q4<waitPos.rot.q4+rRange Incr counter;
        
        RETURN counter=7;
    ENDFUNC
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值