taskflow以任务节点启动任务

一、json文件编写要求

1.任务指令

一般情况下,一个指令表示一个机器动作,为机器语言最小单元。少部分指令为了兼容复合路径(覆盖路径规划后为两条指令,且两条指令中间需要一些额外设备操作),该类指令包含多个机器动作,如movet的clean和flush属性指令,表示过渡路径+力控操作+擦拭路径等组合。

enum class BasicCommandId
{cmd_abort = -3, //任务中断,不可跳过指令,程序内部使用cmd_skip = -2,      //跳过指令,内部执行转义cmd_none = -1,cmd_movej = 0,      //机械臂关节运动指令cmd_movel,          //机械臂直线运动指令cmd_movet,          //机械臂连续点位运动指令cmd_moved,          //机械臂预插补连续点位指令,由movet或movej plan转义cmd_timer,          //机械臂定时指令cmd_chassis_move,   //底盘移动指令cmd_lift_move,      //升降台运动指令cmd_retool_op = 100,    //更换工具号指令cmd_force_op,           //力控操作指令cmd_gpio_op,            //末端io指令cmd_cam_op,             //相机操作指令,如匹配cmd_sub_task = 200,     //子任务指令cmd_global_set,         //全局设置指令-2022-7-11新增,用于设置任务对象cmd_device_op = 400     //设备操作指令,如末端io,泵阀等
};

2.任务节点

一个任务节点表示一组动作,由一条或多条指令组合。表示一个比较具体的任务,比如更换工具、卸载工具或清洁某个对象。通过任务指令的cmd_tree-group指定每一条指令所属节点,同一节点的指令必须两两相邻,当相邻指令cmd_tree-group不同时,则表示为两个节点。
使用任务节点且任务节点设计符合规范时,则可在taskflow中指定任务节点启动任务,一是为了机器执行任务中断时,快速从当前执行的步骤继续执行任务,二是方便研发人员进行相关功能调试,避免需要等待机器运行完大部分与调试功能无关的任务而浪费时间,提高调试效率。
以下是任务节点的设计规范:

1).指定节点

除了cmd_abort/cmd_skip/cmd_none等内部指令无需指定cmd_tree-group,所有其他指令均需要指定cmd_tree-group,该json项为string数据,不可指定为“none”或为空"",否则不可以节点启动任务。

{//初始化设备状态"cmd_tree" : {"group" : "device_init","main" : "none","option" : "none","sub" : "none","unique" : "none"},"describe" : "subtask","id" : "cmd_sub_task","key" : {"name" : "sub_device_init"},"strategy" : {"skip" : "none"}}
2).使用子文件表示一个任务节点

避免主任务文件过长,主文件中尽可能只存在cmd_sub_task指令,子文件以sub_为前缀命名。程序解析json文件时,若相邻指令的cmd_tree-group项不同,则该任务节点加1,若未指定cmd_tree-group项,则该指令节点为"none",当使用以节点启动任务(runNode)或继续运行(continueTask)接口时,若存在节点为"none"或为空,则不可以节点启动任务,程序会抛出相应的警告。
清洁小便池0主程序:

更换工具节点(子程序):

最小指令需要指定cmd_tree-group:(tree的第三项为group项)

3).公共子节点

公共子结点只与机器和环境相关,与实际任务无关,如更换工具,升降台运动,底盘运动至marker点等,这类子节点设计时需要尽可能通用,保证一个环境下同一个机器可以公用。此外,节点启动任务时,额外增加的更换工具、回安全位置、底盘移动、匹配等节点都是来源于这些公用节点,由于目前节点启动任务额外增加的节点在程序代码中指定(后续改为配置项),因此,同一环境同一机器的公用节点需要严格设计,保证智能启动时机器运动的安全性。

4).子节点安全点

每一个包含运动指令(底盘/升降台/机械臂)的节点,第一条指令必须为机械臂movej指令,即机械臂关节运动指令,且目标点位为standby_safe_pose/standby_tool_pose/standby_plan_pose其中一个,这是出于安全考虑,因为以节点启动任务时,机械臂总是以规划的方式去到standby_tool_pose,而机械臂可从standby_tool_pose以无规划的方式直接运行至standby_safe_pose/standby_tool_pose/standby_plan_pose,这样保证每个节点的启动都是安全可靠的。

3.以节点启动任务程序设计

1)程序设计

2)生成指令优化项

当节点工作高度为360mm时

  1. 更换工具必须在升降台360mm处进行,360mm匹配动作在机械臂无工具时进行
  2. 若底盘位置接近marker位置,底盘无需移动,则chassis_cmd_list为空
  3. 若在节点marker的匹配信息已存在,即上一次在该marker点匹配后底盘和升降台未移动,则无需匹配指令,match_cmd_list为空
  4. 当chassis_cmd_list和match_cmd_list都为空时,即无需匹配和底盘移动,则判断机械臂当前工具号是否与节点工具号一致,若一致,则无需添加更换工具的指令

当节点工作高度为650mm时:

  1. 更换工具或底盘运动都需要在升降台为360mm处进行,若无需更换工具,且底盘无需运动,则升降台直接运行至650mm
  2. 650mm匹配动作机械臂可带工具

4. 以节点启动任务使用说明

1)taskflow提供一个查询任务文件节点信息接口和两个以节点启动任务接口,分别是:
1. showTaskNode(string task_name, string task_dir) //task dir 可为空,为空时默认索引配置文件中的json文件夹

例:在carm_task_flow终端输入showTaskNode(‘urinal_0’, ‘’),回车,终端显示:

蓝色字体tool x表示该节点第一条指令使用的工具号

2. runNode(string task_name, string task_dir, int current_tool, string node_name, int node_id)

例:针对urinal_0任务,假如想直接从喷洗小便池节点开始任务,通过showTaskNode查询到喷水节点flush_urinal_0的节点索引号为8,观察到机械臂末端挂载了工具2,则可在终端输入以下指令并回车:

input >>runNode('urinal_0', '', 2, '', 8)

此时机械臂先进行预估匹配,并规划运动至安全规划点stanby_tool_pose,然后卸载工具2->底盘移动->匹配->加载工具2,然后机器执行节点8之后(包含节点8)的所有指令。
注意:目前建议使用节点索引号启动节点,因为一个任务文件可能存在多个同名节点,若指定的节点名存在多个时,目前程序只会启动最先找到的节点。

3. continueTask(int tool_index)

例:针对urinal_0任务,当机械臂在取工具号时3时,即任务运行至节点7,此时出现机械臂末端压尖问题,程序报力过大或碰撞错误,机器运动中断,此时可通过键盘事件dragTeaching(true)/xarm studio/上位机开启机械臂拖动模式,将机械臂拖至无障碍位姿,此时机械臂未携带工具,即末端工具号为0,此时复位task flow至可运行状态,然后在终端输入以下指令并回车:

input >>continueTask(0)

此时机械臂先进行预估匹配,并规划运动至安全规划点stanby_tool_pose,然后机器执行节点7之后(包含节点7)的所有指令。

为了保证安全,使用节点启动任务在启动时的第一个动作都是预估匹配(若当前marker点的匹配信息可用则不用预估匹配),然后回安全位置stanby_tool_pose,因此,在以节点启动任务前,需要将设备移动至环境无障碍的地方,尤其机械臂不可太靠近障碍物,保证规划的可行性。特别要注意某些更换工具的机械臂运动使得6轴关节角超过180度,而规划约束6轴角度在180度以内,因此若启动时报规划起始点错误,则要着重检查6轴的关节角。

2)实例场景
  1. 场景1:某测试人员在煲机,机器执行任务过程中出现错误停止运行,首先记录问题,然后开启机械臂拖动模式,将机器拖至无障碍区域,确认末端工具号,使用continueTask(后续接到按键上触发)继续执行任务。
  2. 场景2:某研发人员今天项测试擦拭路径的效果,不想运行擦拭前繁琐的更换工具等其他无关动作,又不详额外写json测试文件,则可通过给机械臂手动装上擦拭对应的工具,然后使用runNode指令直接运动擦拭节点,当机器第一次底盘移动到达marker点且进行匹配后,此后只要不移动底盘,所有清洁任务(规划)都无需再进行匹配。

taskflow以任务节点启动任务相关推荐

  1. 比特币SPV节点启动流程图

    2019独角兽企业重金招聘Python工程师标准>>> 比特币SPV节点启动流程图 图小点击右键在新窗口打开 转载于:https://my.oschina.net/penghaozh ...

  2. ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器

    3.1.2 ROS节点启动时调用gdb调试器 我们需要一个启动文件(launch)去启动节点,如下: 想要在节点启动时调用gdb调试器,需要添加launch-prefix="xterm -e ...

  3. ros多个小乌龟_Ros 小乌龟节点启动

    小乌龟节点启动 1. 启动小乌龟模拟器节点 rosrun turtlesim turtlesim_node 2. 启动小乌龟键盘输入节点 rosrun turtlesim turtle_teleop_ ...

  4. ros launch文件编写和节点启动顺序控制

    ROS可以通过launch文件进行节点的管理.初始参数的设置,但是launch文件不能指定节点的启动顺序,因此本文简单介绍下通过launch进行节点启动管理,通过shell来控制节点启动顺序. 1,我 ...

  5. was控制台及节点启动

    Was中间件控制台及节点启动位置基本固定. 1.控制台启动: 启动文件路径:cd /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/ 启动文件:./st ...

  6. oracle em 性能点不进,oracle em节点启动不成功问题处理总结

    客户数据库项目从oracle 9i数据库升级到oracle10g后,oracle em在节点1启动不成功,节点2可以正常启动. 节点1启动时报错如下: [oracle@zhgsdb1 ~]$ emct ...

  7. 怎么控制节点启动_最全的软启动器接线图文

    电机软启动器的主接线图 电机软启动器的主接线方法: 1.在线型: 所有软启动器的控制器都有电动机过载保护,当软启动器在线运行时软启动器的控制器能对电机进行过载保护,不要加装热过载继电器.由于经过可控硅 ...

  8. oracle rac 节点启动,Oracle 10g RAC 节点自动重启故障处理

    将数据库集群升级到10.2.0.5之后,双节点服务器不断重启,查询Oracle oprocd进程日志,信息如下: Jul 03 08:16:34.702 | INF | monitoring star ...

  9. Weblogic 节点启动

    1.启动管理理节点 export JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.xml.namespace.QName.useCompatibleSerialV ...

最新文章

  1. Hadoop学习笔记一 简要介绍
  2. (原+转)linux安装rtl 8812au驱动
  3. JavaScript里的...(三个点)操作符
  4. swift5主线程延迟操作的几种写法
  5. k8s-自动横向伸缩pod 根据CPU使用率,QPS访问数监控指标
  6. 【Linux】Aria2 一键安装管理脚本 BT\PT一键安装包
  7. 1.Ubuntu Server下搭建LAMP环境
  8. php代码审计实战(一)
  9. CrossPHP 1.5.5 发布了
  10. 1999年考研数学一解析pdf
  11. 在 ABT 节点部署 RPG 制作大师游戏指南 | ArcBlock 博客
  12. 计算机word题目设置标题,word文档标题怎么设置?word设置标题样式的方法
  13. 倾角传感器和陀螺仪传感器的区别
  14. BZOJ[1984]月下“毛景树” 树链剖分+线段树
  15. 《果然新鲜》电商项目(25)- 会员唯一登录
  16. ubuntu 从刷机到yolov5环境搭建训练记录
  17. Hopefield神经网络
  18. 查看僵尸进程并杀掉僵尸进程
  19. Redis的key为什么中间要用冒号隔开
  20. SCOI2012 Blinker的仰慕者 BZOJ 2757

热门文章

  1. DOM操作造成的页面卡顿问题及解决
  2. unity中怎么做河流_unity3d怎么绘制海洋河流湖泊并添加水面倒影?
  3. Jenkins的构建结果通知到飞书群
  4. BigDecimal三目运算判断
  5. java jhat_JVM学习笔记——jhat的使用
  6. python画建筑分析图_教你用GH绘制酷炫的流线分析图 | 建筑学院
  7. netplier全部源码解析
  8. 2020二建押题-中业考前小灶划书
  9. 【从零开始游戏开发】MVC 、 ECS 、MMVM模式 | 全面总结 |建议收藏
  10. Java基础之nextInt()与nextLine()区别(包括nextInt之后无法nextLine无法读取下一行的数据)