程序任务控制
当需要执行一系列的运动指令时,为了方便编辑,可以用机器人的Lua编辑器,编写相应的指令代码,形成一个新场景。
然后通过SDK的启动任务接口,调用Lua场景ID,去执行对应动作指令。
这样操作,对手臂运动轨迹控制的编辑调试更加方便。
启动任务
task_id = lebai.start_task(scene_id, params, dir, is_parallel, loop_to)
调用相应的场景scene_id,执行对应的任务。任务有串行和并行两种模式。
- 串行任务会排队执行,同一时间最多只能运行一个串行任务,需等待前面的任务完成、失败或终止后,才会运行后续任务。
- 并行任务会立即执行,可以同时运行多个并行任务,环境变量相互独立; 并行任务类似于多线程执行。
参数 | 类型 | 说明 |
---|---|---|
scene_id | string | 场景 ID |
params | list | 传递参数。字符串数组。可选,默认空 |
dir | string | 场景所在文件名称。可选,默认根目录(开发中版本的参数) |
is_parallel | bool | 是否以并行任务并列执行。可选,默认false 以串行任务执行。 |
loop_to | int | 重复执行次数。可选,默认 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_id int 任务 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_id int 任务 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_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) #调用场景 启动任务
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_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) #调用场景 启动任务
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_id int 任务 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)