外部移动
参数说明
移动步骤基本参数
发送路径点
默认勾选,即向接收者(如:机器人)发送当前路径点。取消勾选后,将不发送当前路径点,但此路径点仍在规划的路径之中。
尝试平滑通过其后的非移动类步骤
勾选后,不需要等待当前移动步骤运行结束就可以继续往下执行,以此规避机器人停顿的问题,保证机器人运行动作流畅,但可能会导致步骤提前结束。
为何会导致步骤提前结束?
Mech-Viz软件运行时会同时发给机器人多个路径点,软件只判断发送给机器人的最后一个路径点是否与机器人当前返回的关节角相同,如果相同则认为机器人已经移动到最后一个路径点。
例如,一段路径由10个移动步骤组成,其中第5个移动步骤与最后一个移动步骤对应的位姿相同。当机器人运行速度较慢时,移动到第5个路径点后会将当前关节角发送给Mech-Viz。由于第5个移动步骤与最后一个移动步骤的位姿相同,Mech-Viz软件可能误判机器人已到达所有路径点,导致指令提前结束。
不检查与已放置工件的碰撞
在碰撞检测面板中开启工件碰撞检测后,如果勾选此选项,将不再检测机器人、末端工具与已经放置的工件之间的碰撞。在抓放设置为放的步骤的后一个移动步骤中,通常勾选该参数以避免碰撞误检测。
应用示例:
吸盘的TCP通常不设置在吸盘表面,而是在模型内部。这样在抓取箱子时,吸盘模型会与箱子模型发生嵌套。不过,软件不会检测末端工具与已抓取工件的碰撞,因此抓取时不会触发碰撞报警。当机器人放下箱子后,被抓取的箱子模型变为场景模型,此时软件会检测到末端工具与箱子的场景模型发生碰撞,并发出碰撞报警,导致无法完成码垛任务。
勾选此参数后,软件不再检测机器人、末端工具与已经放置的工件模型之间的碰撞,从而解决上述问题。
点云碰撞检查模式
一般选择自动模式,即直接应用碰撞检测面板中点云碰撞检测的设置。对于机器人抓取后至放置前的所有移动步骤,一般可选择检查模式。
自动 |
默认值。当开启碰撞检测面板中的点云碰撞检测时,仅检测“视觉移动”步骤及依赖于“视觉移动”步骤的“相对移动”步骤的点云碰撞,不检测其他的移动类步骤。 |
不检查 |
不检测所有移动步骤的点云碰撞。 |
检查 |
检测所有移动步骤的点云碰撞。 |
忽略工件对称性
该参数仅在移动步骤的目标类型为工件位姿时可见。
此处的工件对称性为在工件库中设置碰撞模型时预先配置的已持有工件旋转对称。
无 |
默认值,不忽略任何对称性设置。 |
绕工件坐标系Z轴 |
仅忽略绕Z轴的对称性。 |
绕工件坐标系X和Y轴 |
仅忽略绕X轴和绕Y轴对称性。 |
绕所有轴 |
忽略所有对称性,机器人将严格按照工件位姿放置工件。 |
当移动步骤用于放置工件时,应用旋转对称后无法保证工件放置位姿的一致性。如果希望所有工件严格按照某一规则放置,请忽略绕所有轴的工件对称性。 |
规划失败出口
勾选此参数后,步骤将增加规划失败出口。
若当前步骤的路径规划成功,工作流程沿成功出口继续执行。若当前步骤的路径规划失败,工作流程沿规划失败出口继续执行。若同一条规划历史条目中包含多个存在规划失败出口的移动类步骤,工程沿第一个移动类步骤的规划失败出口继续执行。
已持有工件碰撞检测设置
配置前,请在碰撞检测面板中开启工件碰撞检测。
不检测碰撞会增加碰撞风险,请谨慎开启以下选项。 |
不检查与场景物体的碰撞
勾选该选项后,将不检测已持有工件与场景模型的碰撞,减少软件碰撞检测计算量,提升路径规划速度,优化整体节拍。
不检查与机器人的碰撞
勾选该选项后,将不检测已持有工件与机器人的碰撞,减少软件碰撞检测计算量,提升路径规划速度,优化整体节拍。
不检查与点云的碰撞
在碰撞检测面板中开启点云碰撞检测后,如果勾选此选项,将不再检测已持有工件与点云的碰撞,减少软件计算量,缩短路径规划时间,提升整体节拍。
使用外部服务提供的关节角
默认不勾选,软件规划路径的初始位置将使用上次规划结束的位置。 勾选后,软件规划路径的初始位置将更新为从外部获取的机器人关节位置,通常在 Mech-Viz 不完全控制机器人运动的情况下使用。
接口示例
class CustomOuterMoveService(OuterMoveService):
def gather_targets(self, di, jps, flange_pose):
self.add_target(self.move_target_type, [0.189430,-0.455540,0.529460,-0.079367,0.294292,-0.952178,0.021236])
CustomOuterMoveService类继承自OuterMoveService类。self.move_target_type表示移动点类型,取值为0、1或2,其中0表示JPs,1表示TCP,2表示物体位姿。Mech-Viz 运行到外部移动步骤时就会调用 getMoveTargets()。不同外部移动步骤之间通过服务名称进行区分。
def _register_service(self):
self.outer_move_service = CustomOuterMoveService()
self._outer_move_server, port = register_service(outer_move_service, port)
当self.move_target_type为2(表示物体位姿)时,外部移动步骤前面需要有一个步骤表示抓取,否则会报错误:“- 未持有物体时物体姿态无效!” 。 |