程序任务控制

当需要执行一系列的运动指令时,为了方便编辑,可以用机器人的Lua编辑器,编写相应的指令代码,形成一个新场景。
然后通过SDK的启动任务接口,调用Lua场景ID,去执行对应动作指令。
这样操作,对手臂运动轨迹控制的编辑调试更加方便。

启动任务

task_id = lebai.start_task(scene_id, params, dir, is_parallel, loop_to)

调用相应的场景scene_id,执行对应的任务。任务有串行和并行两种模式。

  • 串行任务会排队执行,同一时间最多只能运行一个串行任务,需等待前面的任务完成、失败或终止后,才会运行后续任务。
  • 并行任务会立即执行,可以同时运行多个并行任务,环境变量相互独立; 并行任务类似于多线程执行。
参数类型说明
scene_idstring场景 ID
paramslist传递参数。字符串数组。可选,默认空
dirstring场景所在文件名称。可选,默认根目录(开发中版本的参数)
is_parallelbool是否以并行任务并列执行。可选,默认false 以串行任务执行。
loop_toint重复执行次数。可选,默认 1 次,0 代表无限次
  • 返回

    • task_id 任务的id int类型
  • 示例

import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务

注意

  • 当被启动的场景里包含运动相关接口时,务必以串行任务启动(is_parallel为false)
  • 在串行执行的场景任务中,如果场景中有用Lua API调用子任务,务必以并行任务启动(is_parallel为true),否则将阻塞住

获取全部任务ID

  • 方法:tasks = lebai.get_task_list()
  • 返回值:list 类型。返回全部未完成的任务的ID。
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
print('task_id ',task_id)
tasks = lebai.get_task_list() 
print('tasks ',tasks)

获取串行任务ID

  • 方法:task = lebai.get_main_task_id()
  • 返回值:int 类型。返回正在执行的串行任务的ID。
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
print('task_id ',task_id)
task = lebai.get_main_task_id() 
print('task ',task)

等待任务完成

  • 方法:stdout = lebai.wait_task(task_id)
    参数类型说明
    task_idint任务 ID。可选,默认正在执行的串行任务
  • 返回值:string 类型。返回对应任务的所有print输出。
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
 
output = lebai.wait_task(task_id) 
print('task output ',output)

获取任务状态

  • 方法:state = lebai.get_task_state(task_id)
    参数类型说明
    task_idint任务 ID。可选,默认正在执行的串行任务
  • 返回值:string类型。返回对应任务执行的状态。
    state 任务状态:"NONE"无任务;"WAIT"排队中;"RUNNING"运行中;"PAUSE"暂停中;
    "SUCCESS"运行成功;"INTERRUPTING"停止中;"INTERRUPT"已停止;"FAIL"运行失败
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)

停止任务

  • 方法:lebai.cancel_task(task_id)
    停止指定任务。当停止串行任务时,会自动调用stop_move停止运动
    参数类型说明
    task_idint任务 ID。可选,默认正在执行的串行任务
  • 返回值:无返回值。
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)
lebai.cancel_task(task_id)
state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)

暂停任务

  • 方法:lebai.pause_task(task_id)
    暂停指定任务。当暂停串行任务时,会自动调用pause_move暂停运动。
    参数类型说明
    task_idint任务 ID。可选,默认正在执行的串行任务
  • 返回值:无返回值。
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)
lebai.pause_task(task_id)
state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)

恢复任务

  • 方法:lebai.resume_task(task_id)
    恢复指定任务。当恢复串行任务时,会自动调用resume_move恢复运动。
    参数类型说明
    task_idint任务 ID。可选,默认正在执行的串行任务
  • 返回值:无返回值。
  • 使用示例:
import lebai_sdk
lebai_sdk.init()
import time
import nest_asyncio
nest_asyncio.apply()
robot_ip = "192.168.4.145" 
lebai = lebai_sdk.connect(robot_ip, False)

scene_id = "10000" #需要调用的场景编号
task_id = lebai.start_task(scene_id, None, None, False, 1) #调用场景 启动任务
state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)

lebai.pause_task(task_id)
time.sleep(3)

state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)

lebai.resume_task(task_id)

state = lebai.get_task_state(task_id)  #获取任务状态
print('state',state)