队列运动接口

1 queue_motion_set_status - 打开队列运动模式

方法: queue_motion_set_status(socketFd, status)

参数:

  • socketfd:连接句柄
  • status:bool型 True打开,False关闭

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

Python
import nrc_interface as nrc
import time
#建立连接
socket_fd = nrc.connect_robot("192.168.1.13", "6001")

nrc.queue_motion_set_status(socket_fd, True)
ret = nrc.queue_motion_set_status(socket_fd, mode)
print(f"设置模式返回值(ret)={ret}")

2 queue_motion_set_status - 关闭队列运动模式

方法: queue_motion_set_status(socketFd, status)

参数:

  • socketfd:连接句柄
  • status:bool型 True打开,False关闭

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

Python
import nrc_interface as nrc
import time
#建立连接
socket_fd = nrc.connect_robot("192.168.1.13", "6001")

nrc.queue_motion_set_status(socket_fd, False)
ret = nrc.queue_motion_set_status(socket_fd, mode)
print(f"设置模式返回值(ret)={ret}")

3 queue_motion_send_to_controller - 将本地队列的前size个数据发送到控制器

方法: queue_motion_send_to_controller(socketFd, size, isContinue=False)

参数:

  • socketfd:连接句柄
  • size:要发送的队列大小,size=0时将当前运动队列全部指令发送,范围[0,31]

返回值:

  • int:执行结果
    • 0:成功
    • -1:失败
    • -2:未连接机器人
    • -3:传入的size超过队列长度

使用示例:

参考示例7。注意:控制器接受到队列后,将会立马开始运动。调用前请先调用queue_motion_set_status(true);是否选择继续发送,true-继续;false-不继续,继续发送时可以继续发送点位,机器人不运动;不继续时机器人接收点位后立刻运动,默认为false

4 queue_motion_push_back_moveJ - 队列运动模式的本地队列最后插入一条moveJ运动

方法: queue_motion_push_back_moveJ(socketFd, MoveCmd)

参数:

  • socketfd:连接句柄
  • MoveCmd:参数配置

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

参考示例7

5 queue_motion_push_back_moveC - 队列运动模式的本地队列最后插入一条moveC运动

方法: queue_motion_push_back_moveC(socketFd,MoveCmd);

参数:

  • socketfd:连接句柄
  • MoveCmd:参数配置

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见附录1

使用示例: 参考示例7

注意: movec的前一条指令应该是movej或者movel

例如修改示例7main部分为:

Python
#打开队列模式
if __name__=='__main__':
    #建立连接
    arm_test=ArmTest()
    socket_fd=nrc.connect_robot("192.168.1.13", "6001")
    nrc.queue_motion_set_status(socket_fd,True)
    time.sleep(2)#打开队列
    nrc.set_speed(socket_fd,80)#运行速度
    #运动队列
    arm_test.queue_moveJ(socket_fd=socket_fd,pos_list=[230,0.0,244,
                         3.14,0.0,0.0,0.0],coord=1)
    arm_test.queue_moveC(socket_fd=socket_fd,pos_list=[250,0.0,260.0,
                         3.14,0.0,0.0,0.0],coord=1)
    arm_test.queue_moveC(socket_fd=socket_fd,pos_list=[300.0,0.0,243.0,
                         3.14,0.0,0.0,0.0],coord=1)
    nrc.queue_motion_send_to_controller(socket_fd,3)#发送3个队列信息
    time.sleep(20)
    nrc.queue_motion_set_status(socket_fd,False)#关闭队列模式

6 queue_motion_push_back_moveS - 队列运动模式的本地队列最后插入一条moveS运动

方法: queue_motion_push_back_moveS(socketFd,MoveCmd);

参数:

  • socketfd:连接句柄
  • MoveCmd:参数配置

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见附录1

使用示例: 参考moveC

注意: moveS的前一条指令应该是movej或者movel

例如修改示例7main部分为:

Python
#打开队列模式
if__name__=='__main__':
#建立连接
arm_test=ArmTest()
socket_fd=nrc.connect_robot("192.168.1.13","6001")
nrc.queue_motion_set_status(socket_fd,True)
time.sleep(2)#打开队列
nrc.set_speed(socket_fd,80)#运行速度
#运动队列
arm_test.queue_moveJ(socket_fd=socket_fd,pos_list=[230,0.0,244,
3.14,0.0,0.0,0.0],coord=1)
arm_test.queue_moveS(socket_fd=socket_fd,pos_list=[250,0.0,260.0,
3.14,0.0,0.0,0.0],coord=1)
arm_test.queue_moveS(socket_fd=socket_fd,pos_list=[300.0,0.0,243.0,
3.14,0.0,0.0,0.0],coord=1)
nrc.queue_motion_send_to_controller(socket_fd,3)#发送3个队列信息
time.sleep(20)
nrc.queue_motion_set_status(socket_fd,False)#关闭队列模式

 

7 队列运动指令使用示例

Python
import  nrc_interface  as  nrc
import  time

class  ArmTest:      
  def  queue_moveJ(self,  pos_list,  socket_fd=None,  coord=0,  velocity=10,  acc=20,  dec=20,  pl=0):
                """
                队列运动模式:插入  MoveJ  并发送
                :param  socket_fd:  可选,优先使用传入的,没有则用实例默认的
                """
                fd  =  socket_fd

                pos  =  nrc.VectorDouble(len(pos_list))
                for  i,  val  in  enumerate(pos_list):
                        pos[i]  =  val

                moveCmd  =  nrc.MoveCmd()
                moveCmd.coord  =  coord
                moveCmd.targetPosType  =  nrc.PosType_data
                moveCmd.targetPosValue  =  pos
                moveCmd.velocity  =  velocity
                moveCmd.acc  =  acc
                moveCmd.dec  =  dec
                moveCmd.pl  =  pl

      
                nrc.queue_motion_push_back_moveJ(fd,  moveCmd)
                ret  =  nrc.queue_motion_get_status(fd,  True)
                
                print(f"队列  MoveJ  返回值(ret)  =  {ret}")
                return  ret
        #  ======================  队列控制:MoveC  ======================
        def  queue_moveC(self,  pos_list,  socket_fd=None,  coord=0,  velocity=10,  acc=100,  dec=100,  pl=5):
                """
                队列运动模式:插入  MoveC  并发送
                :param  socket_fd:  可选,优先使用传入的,没有则用实例默认的
                """
                fd  =  socket_fd

                pos  =  nrc.VectorDouble(len(pos_list))
                for  i,  val  in  enumerate(pos_list):
                        pos[i]  =  val

                moveCmd  =  nrc.MoveCmd()
                moveCmd.coord  =  coord
                moveCmd.targetPosType  =  nrc.PosType_data
                moveCmd.targetPosValue  =  pos
                moveCmd.velocity  =  velocity
                moveCmd.acc  =  acc
                moveCmd.dec  =  dec
                moveCmd.pl  =  pl

      
                nrc.queue_motion_push_back_moveC(fd,  moveCmd)
                ret  =  nrc.queue_motion_get_status(fd,  True)
                
                print(f"队列  MoveC  返回值(ret)  =  {ret}")
                return  ret
        def  queue_moveS(self,  pos_list,  socket_fd=None,  coord=0,  velocity=10,  acc=20,  dec=20,  pl=0):
                """
                队列运动模式:插入  MoveS  并发送
                :param  socket_fd:  可选,优先使用传入的,没有则用实例默认的
                """
                fd  =  socket_fd

                pos  =  nrc.VectorDouble(len(pos_list))
                for  i,  val  in  enumerate(pos_list):
                        pos[i]  =  val

                moveCmd  =  nrc.MoveCmd()
                moveCmd.coord  =  coord
                moveCmd.targetPosType  =  nrc.PosType_data
                moveCmd.targetPosValue  =  pos
                moveCmd.velocity  =  velocity
                moveCmd.acc  =  acc
                moveCmd.dec  =  dec
                moveCmd.pl  =  pl

      
                nrc.queue_motion_push_back_moveC(fd,  moveCmd)
                ret  =  nrc.queue_motion_get_status(fd,  True)
                
                print(f"队列  MoveS  返回值(ret)  =  {ret}")
                return  ret
if  __name__  ==  '__main__':
        #  建立连接
      arm_test  =  ArmTest()
      socket_fd  =  nrc.connect_robot("192.168.1.13", "6001")
      nrc.queue_motion_set_status(socket_fd,  True)#打开队列模式
      time,sleep(2)
      nrc.set_speed(socket_fd,40)#运行速度
      arm_test.queue_moveJ(socket_fd=socket_fd,pos_list=[50.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])#本示例从零点开始运动,到j1=50度,回零点
      arm_test.queue_moveJ(socket_fd=socket_fd,pos_list=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
      nrc.queue_motion_send_to_controller(socket_fd,2)#发送二个目标位置
      time.sleep(20)
      nrc.queue_motion_set_status(socket_fd,  False)#关闭队列模式