碰撞检测

​RoboDK碰撞检测功能可帮助你在实际操作中预防碰撞。该功能可通过多种方式实现,例如:可视化碰撞检查、机器人加工项目的自动避障,或通过PRM算法生成无碰撞路径图来自动创建无碰撞程序。​​

本节涵盖以下主题:

如何为仿真启用碰撞检查

如何定义碰撞地图

如何为机器加工项目启用自动碰撞检测与避障

如何使用 PRM 算法自动创建无碰撞程序,实现目标点间或程序间的安全衔接

Important:RoboDK虚拟环境可能与实际场景存在差异。建议设置安全容差来可靠预防碰撞,例如加载简化放大的3D模型(专用于碰撞检测)。举例:可将主轴简化为立方体模型进行碰撞检测。

碰撞检测

在菜单栏中选择:工具➔Collision Avoidance - 图片 1 检查碰撞,打开或关闭碰撞检测。如果启用了碰撞检测,当检测到碰撞时,所有程序和机器人运动都将停止。当仿真处于碰撞状态时,所有处于碰撞状态的物体、工具和机器人链接都将以红色高亮显示。

安全检查程序是否发生碰撞的步骤:

1.右键单击当前的程序。

2.选择这个选项:检查路径和碰撞(Shift+F5)。该选项可快速检查路径是否可行(与检查路径 - F5 相同),然后验证是否存在碰撞。

Collision Avoidance - 图片 2

Important:在菜单栏中选择:工具→选项→运动选项卡,取消勾选“当检测到碰撞时停止机器人”选项。

Tip:确保在RoboDK中准确建模机器人单元。同时建议将3D几何模型放大,以安全地预防碰撞。

Note:如果希望在检测到碰撞仍能继续仿真程序,可进入工具➔选项➔运动,取消勾选"当检测到碰撞时停止机器人"选项。

碰撞地图

可自定义任意物体间的碰撞检测关系。​

选择工具➔Collision Avoidance - 图片 3 碰撞地图,可查看工作站中所有运动物体间的碰撞检测状态。双击矩阵单元格即可激活/关闭特定物体对的碰撞检测。双击机器人单元可启用或关闭该关系的碰撞检查。选择 "设置默认选择 "可自动启用保守检测方案。

默认情况下,RoboDK 会检查站内所有移动物体之间的碰撞,包括所有机器人链接、物体和工具。作为例外,连续的机器人关节不会被检查碰撞,因为它们可能始终处于接触状态。

Tip:双击矩阵对角线上的单元格,可一键切换该物体与所有其他物体的碰撞检测状态

Tip:若碰撞检测导致仿真卡顿,可减少检测对象数量以降低CPU负载

Collision Avoidance - 图片 4

碰撞检测加速

碰撞检测速度受多重因素影响:

1.碰撞地图中的检查对数:碰撞地图中启用的检测对越少,速度越快。

2.碰撞检测的步长:碰撞步长可在工具➔ 选项➔运动菜单中设置。直线运动的步长以毫米为单位,关节运动的步长以度为单位。步长越大,检测越快,但精度会降低。

3.计算机算力:CPU 性能越强,或者线程数越多,检测越快。

4.3D模型复杂程度:曲面等精细几何结构会增加计算负荷,减少三角面片数量可提速

Tip:工具-选项-CAD中调整STEP/IGES导入精度,降低模型细节层级。这将在你的 RoboDK 项目中创建更轻的物体。具有较轻物体的工作站将帮助你加快仿真和碰撞检查的速度。你还将获得更小的 RDK 文件。

优化建议:

1.优先选用STEP/IGES格式而非STL(性能更优)。

2.尽可能简化几何形状。

3.使用简化网格插件自动简化复杂几何体:https://robodk.com.cn/addin/cn/com.robodk.app.simplifymesh

4.开启边界框的预览(工具➔选项➔其他➔绘制边界框)检查模型分组合理性。

5.禁止使用工具➔选项➔显示中的"简化对象…"功能(会导致生成超大边界框)。

6.在环境中设置碰撞专用物体:复制物体并移除无法触及的表面,或导入几何形状更简单的版本(如凸壳)。仅将原始物体用于视觉目的,并将其排除在碰撞图之外。

7.通过API动态控制碰撞检测对象。

机器人加工的碰撞规避

你可以为机器人加工项目启用自动避碰功能。RoboDK将自动旋转工具以寻找无碰撞路径。

Tip:机器人加工路径的碰撞检测可能需要较长时间计算。请务必合理缩小碰撞地图范围,以加速碰撞检测与避障过程。

请按照以下步骤为机器加工项目启用自动碰撞检查和防碰撞功能:

1.在菜单栏中选择:工具➔ 选项➔CAM选项卡

2.在默认参数区域勾选:允许自动避免碰撞

Collision Avoidance - 图片 5

3.双击当前的机器加工项目、3D 打印项目、曲线跟踪项目或点跟踪项目。

4.勾选优化参数模块:避障:这将按照优化参数中的描述,通过围绕 Z 轴更换刀具方向,启用自动避免碰撞功能。

Collision Avoidance - 图片 6

Important:此选项将通过绕刀具的Z轴旋转来自动避免碰撞。请确保未将刀具切削刃设置为与零件进行碰撞检测。如需检测刀柄与零件之间的碰撞,可能需要将主轴拆分为两个刀具(一个用于碰撞检测,另一个包含切削刃等额外可视化信息)。

无碰撞运动规划器

运动规划功能可在机器人工作空间内自动生成无碰撞路径。在RoboDK中,该功能采用​“概率路线图”(Probabilistic Roadmaps, PRM)​算法实现。

首先,绘制机器人工作空间地图。然后,在机器人编程过程中,利用该地图在编程时实时计算无碰撞轨迹。。

PRM 算法具有以下两个特性:

概率性​:在构型空间​(机器人所有可能运动位置的集合)中随机采样点,而非均匀覆盖整个空间,因此计算速度显著快于传统方法。

路线图​:首先生成全局工作空间的拓扑路线图,再基于此规划路径。

这篇博文有关机器人运动规划的介绍,请参阅本博文

Video:介绍RoboDK的无碰撞运动规划功能https://www.youtube.com/watch?v=KPR2aOZn924&list=PLjiA6TvRACQd8pL0EnE9Djc_SCH7wxxXl&index=10

使用PRM运动规划

在RoboDK中,PRM运动规划分为两个独立阶段,这种分离设计显著提升了算法效率。速度较慢的 "构建阶段 "只需执行一次,而速度较快的 "查询阶段 "则可重复精度多次:

这两个阶段是

  1. 构建阶段(较慢)​​:PRM算法在机器人自由工作空间内随机布点,并尝试连接这些点,形成无碰撞路径的路线图。
  2. 查询阶段(快速)​​:利用已构建的路线图,快速计算两个目标点之间的最短无碰撞路径。

关于RoboDK PRM算法原理详见本篇博文

本节将以焊接工作站为例,演示如何在RoboDK程序中应用这两个阶段。

设置运动规划

要使用运动规划器,必须有一个机器人,同时配备工具。工作空间中至少需要一个物体,否则无需进行碰撞规避。建议至少设置两个目标点作为生成的避障路径的起点和终点位置。

示例焊接设置可通过以下流程创建:

1.选择一个机器人:

a.在菜单栏中选择:文件➔Collision Avoidance - 图片 7打开机器人库

b.使用筛选器查找机器人。例如,选择 ABB IRB 2600-12/1.85(选择以下筛选条件:ABB(品牌)、10-20 千克负载和1500-2000 毫米触距

c.选择 "下载",双击文件,机器人会显示在RoboDK工作站中

2.选择工具:

a.从同一在线资源库中,按类型筛选➔工具(先点击:重置筛选器,删除之前的筛选器)

b.下载工具,如 " Weld Gun"

c.双击文件,工具会自动连接到机器人上

d.加载工具后,可关闭在线资源库

3.添加参考坐标系:

a.选择程序➔Collision Avoidance - 图片 8 添加参考坐标系

b.在工作站中选择新的参考坐标系,按 F2 将其重命名为 "Obstacle Reference”

4.添加一些物体:

a.在菜单栏中选择:文件➔Collision Avoidance - 图片 9 打开,打开位于计算机中的 RoboDK 资源库目录(该目录将位于 RoboDK 安装目录中)。

b.导入一个物体,如 "Object Table.wrl"。

c.将物体拖放到工作站中的 "Obstacle Reference"内。

d.导入另一个物体,如"box.stl",并将其也拖到Obstacle Reference内。

e.通过以下操作将桌子移到机器人面前:

i.右键单击Obstacle Reference,选择 "选项…"(或直接双击Obstacle Reference),弹出坐标详情面板

ii.在名为 "参考系的位置相对于"的面板中输入以下值100004009000

Collision Avoidance - 图片 10

f.必要的话,可按照以下步骤放大 "箱"的尺寸和位置:

iii.右键单击工作站树中的物体,选择 "选项"(或直接双击box),弹出 "物体详情"面板

iv.单击 "更多选项应用缩放比例,然后在缩放比例中输入 "4.0"。

v.在名为 "物体位置相对于 "的面板中输入以下值,将箱移动到台面上:0, 0, 200, 0, 0, 0

Collision Avoidance - 图片 11

5.创建目标:

a.在主菜单栏中选择:程序➔Collision Avoidance - 图片 12 示教目标点

b.在工作站中选择该目标,然后按F2键命名为 "start target

c.然后这样做来移动目标:

vi.右键单击工作站树中start target目标,选择 "选项"(或按 F3),弹出 "start target "面板。

vii.目标点位置相对于Obstacle Reference面板中输入以下值:500, 0, 0, 90, 0, 180

d.用同样的方法创建第二个目标,并将其重命名为 "end target"。使用与之前相同的方法,将其移动到以下位置:-500, 0, 0, 90, 0, 180

Collision Avoidance - 图片 13

关节限制约束

在创建PRM路线图时,通常不需要使用机器人的全部工作空间。通过限制关节运动范围,可显著提升建图效率,并确保采样点集中在任务相关区域。

6轴机器人最常限制的两个关节:​

1.关节 1(底座旋转关节)--限制其范围可防止机器人过度偏离工作区两侧。

2.关节 3(肘关节)--限制其范围可避免肘部在"向上"和"向下"配置间切换。

操作步骤:

1.右键点击工作站树中的机器人模型(如ABB IRB 2600-12/1.85),选择 ​选项...​​(或直接双击机器人名称)

2.在 ​手动调节关节轴​ 区域,拖动需要限制关节的滑块(如θ₁和θ₃),找到合适的下限位置

3.双击关节下限数值(如θ₁默认值-180),在弹出的设置机器人关节-设置关节下限​ 面板中调整

Collision Avoidance - 图片 14

4.将关节下限设为θ1 = -50 和θ3 = -90。

5.更改关节限位,然后单击 "确定"

6.使用与关节上限相同的过程,设置θ1 = 50。

Collision Avoidance - 图片 15

这一变化可通过查看机器人的可达工作空间来观察。在机器人面板的“工作空间”部分选择“显示当前工具”,即可展示工作空间。此时仅会显示新关节限制下机器人可到达的工作区域。Collision Avoidance - 图片 16

选择PRM参数

PRM 算法通过以下三个参数生成可到达位置的路线图:

1.样本数 - 在机器人可达工作空间内随机生成的位姿点数量,默认值100个。

2.每个样本的边 - 算法尝试将每个采样点与其他点连接,形成无碰撞路径(称为“边”),默认每点最多25条边。

3.机器人步长 (度) - 检测边是否无碰撞时,算法按固定间隔(默认4°)分段验证碰撞。这些间隔之间的距离由机器人步长决定。默认值为 4 度。

这三个参数共同决定路线图的精细度和计算耗时,它们还会影响在构建阶段生成路线图所需的时间。

样本数越多,每个样本的边数越多,路线图更精细,但计算时间更长。机器人步长越大,生成路线图的速度越快,建图更快,但可能漏检碰撞。

默认参数下约15分钟(具体取决于工作空间和机器人型号),具体取决于工作区的设置和机器人的属性。

有关设置这些参数的最佳做法,请参阅本节末尾的Tip。

生成路线图

运动规划器的 "构建阶段 "是通过以下流程实现的,该流程可生成机器人工作空间的路线图:

1.打开面板:无碰撞运动规划器,通过实用工具菜单➔ Collision-free motion planner➔Create collision-free map,或者点击Collision Avoidance - 图片 17 检查碰撞旁边的小箭头,然后选择Create collision-free map

Collision Avoidance - 图片 18

2.输入新参数或保留默认值。

3.单击"Update Map"生成路线图。

随后,PRM 算法将使用所选参数生成路线图。生成完成后,可以通过勾选Display Map查看生成好的路线图单击"Display Samples",机器人将在工作区内的所有样本中移动。

Collision Avoidance - 图片 19

目标点链接

当两个目标点或程序相互链接时,系统将启动运动规划器的"查询阶段"。

链接两个目标点的操作方式:

1.方法一:按住 Ctrl 键:

a.左键单击运动起始目标点(示例中名为"Start Target"的点)。

b.按住 Ctrl键。

c.左键单击目标位置点(如"End Target")

d.右键单击任意一个目标点,选择:Link selected targets。若已打开面板:Collision-free motion planner,也可直接点击按钮:Link seclected targets/programs

2.方法二:使用Shift键:

a.在工作站树状图中将两个目标点上下排列:起始点在上,终点在下(通过右键拖拽目标点可调整位置,释放时会弹出位置确认菜单)

Collision Avoidance - 图片 20

b.左键点击一个目标。

c.按住Shift 键。

d.左键点击另一个目标。

e.右键点击两个目标中的任意一个,然后选择"Link selected targets"​。或者,如果 "Collision-free motion planner "面板已打开,点击 "Link seclected targets/programs "按钮。

f.右键单击任意一个目标点选择:Link selected targets,或通过面板:Collision-free motion planner的按钮Link seclected targets/programs,点击它完成操作。

两种方法都将基于已保存的路径图生成连接目标点的新程序。若要创建反向运动,只需调换选择顺序:Ctrl键法:先选"End Target"再选"Start Target"。Shift键法:在树状图中调换两个目标点的上下位置

程序链接

PRM运动规划器可通过类似方式链接两个独立程序,生成包含无碰撞过渡路径的新主程序。

以下以焊接为例演示操作流程:

1.创建4个子目标点,作为 "物体参考 "坐标系的子坐标系(右键单击工作站树中的 "物体参考",选中启用参考系)。然后通过选择程序➔ Collision Avoidance - 图片 21示教目标点四次,或按Ctrl+T 四次,创建四个目标。

2.在工作站中依次选择每个目标,然后输入以下名称和数值。要更改目标名称,请按 F2 键或右键单击目标并选择重命名。要更改目标值,请按 F3 键弹出目标面板,或右键单击目标并选择选项。在 "目标点位置相对于 "输入以下数值

a.名称:"Left Point 1 ": 200、200、0、90、0、-135

b.名称:" Left Point 2": 200、-200、0、90、0、-135

c.名称:" Left Point 3":-200, 200, 0, 90, 0, 135

d.名称:" Left Point 4 ":-200, -200, 0, 90, 0, 135

Collision Avoidance - 图片 22

3.创建第一个程序:

a.转到程序 ➔Collision Avoidance - 图片 23添加流程

b.将程序重命名为 "Left Weld"(左侧焊接),首先在站树中选择该程序,然后按 F2 或右键单击并选择重命名。

c.将以下目标添加为线性指令,首先在站树中选择目标,然后选择程序➔Collision Avoidance - 图片 24 直线运动指令:start target、left point 1、left point 2、end target

Collision Avoidance - 图片 25

4.以同样的方式创建第二个名为 "Right Weld "的程序,这次添加以下目标:end target、left point 2、left point 2、end target。

Collision Avoidance - 图片 26

请注意,这两个示例程序并未包含控制焊枪启停的指令。在实际应用中,必须添加这些命令。

要使用运动规划器连接任意两个程序,请使用以下流程:

1.使用上一节(链接目标)所述的两种方法中的任何一种选择这两个程序。

2.右键点击任一程序并选择Link selected programs。如果打开了collision-free motion planner面板,同样可以通过点击Link selected targets/programs实现。

此时会自动生成一个名为"主程序"的新程序,运行第一个程序,进行无碰撞移动,然后运行第二个程序。这个主程序可以像其他程序一样进行修改和重命名。

在地图上添加新目标

任何新目标都可以被添加到PRM路线图中,而无需重新生成整个地图。这意味着只有当工作空间中添加了新物体或现有物体被移动时,才需要完全重新生成路线图。

当新目标被添加到路线图中时,PRM算法会尝试通过一组新边将其与路线图中已有的若干点进行连接。可为新目标设置不同于初始路线图构建时所选边数的默认连接边数。

可以通过以下流程设置新目标的最大边数:

1.打开collision-free motion planner面板,通过实用程序➔ Collision-free motion planner Create collision-free map,或者点击Collision Avoidance - 图片 27 检查碰撞旁边的小箭头,然后选择Create collision-free map。

2.在空格:New sample edges,输入边的数量默认值为 5。

在路线图中添加新目标有两种方法:

1.选择工作站中的目标。鼠标点在最上面的目标,然后按住Shift 键,最后点在最后一个目标,这样可以同时选择多个目标。按住Ctrl 键也可以完成同样效果。然后单击Collision-free motion planner面板中的 "Add selected targets"。

Collision Avoidance - 图片 28

2.只需使用前几节(目标点链接、程序链接)所述的链接选定目标或链接选定程序(Link selected targets/programs)的相同方法即可。任何尚未出现在路线图中的目标都会被自动添加。

一些提示

PRM运动规划器虽易用,但遵循以下技巧可显著提升编程效率:

Tip:首先使用较小的参数创建第一个无碰撞地图。然后,待布局确定后再优化。

构建阶段可能需要很长时间。在编程的早期阶段,当机器人单元的布局不断变化时,这会变得很麻烦。每次在工作区添加一个物体或移动一个物体,都需要重新生成整个路线图。

为了减少等待生成路线图的时间,一开始最好使用较小的参数。

例如,你通常可以在 10-15 秒内生成一张无碰撞地图,推荐初始参数​是:

1.样本数量10.

2.每个样本的边缘5.

3.机器人步长(度):4.0.

这样做不会产生最有效的无碰撞运动,但可以更快地改变机器人单元的设计。

当确定了机器人单元中所有物体的位置后,就可以生成更大的地图,最终精细参数​(布局定型后)(例如,默认参数为 100、25、4.0)。

Collision Avoidance - 图片 29

最后,在生成机器人程序之前,不妨先生成一个更大的路线图(例如参数为 500、50、2.0)。这将需要很长时间才能生成,但却能产生最有效的运动。

Collision Avoidance - 图片 30

Tip:使用合理的关节上下限来约束机器人的工作空间。

设置机器人关节限位(如前面关节限制约束所述)有双重好处。首先,在某些情况下,它可以加快构建阶段。其次,它能确保路线图中包含对机器人程序有用的位置。这一重要步骤很容易被遗忘。

正确定义碰撞地图

当两个物体发生碰撞时,会触发碰撞检测。你可以在碰撞地图设置中指定每个运动物体之间的关联关系。减少交互次数(绿色勾选标记)将加快碰撞检测速度。

Tip:遵循快速碰撞检测准则​(如增大关节步长、限制关节范围、简化3D模型)

计算无碰撞路径所需的时间主要取决于检查碰撞所需的时间。因此,你应遵循碰撞检测部分所述的例子,以加快碰撞检测速度。其中,你可以增加用于碰撞检测的机器人步长、约束关节限制或简化三维几何体,以加快碰撞检测的速度。

Tip:为3D模型添加安全偏移量,模拟实际中的机械公差。

术语 "避免碰撞 "意味着运动规划在任何情况下都会避免碰撞。这在仿真环境中当然是正确的。然而,在现实世界中,如果机器人离物体太近,仍有可能与物体发生碰撞。这通常是因为仿真机器人与实际机器人之间存在细微差别。

这种碰撞的常见情况是,机器人在远离任务时 "夹 "到物体边缘。通常可以通过在程序中加入 "偏移量 "来避免这种情况。有关有效使用偏移量的更多信息,请参阅本博客文章。

Tip:利用机器人高灵巧工作区。

并非机器人工作区的所有区域都是相同的。在工作区的某些区域,机器人的 "可达性 "要高于其他区域。在可达性高的区域,机器人可以从多个方向访问点。在可达性低的区域,机器人只能从一个或两个方向访问点。

有时,运动规划器会找不到工作区中两个目标之间的路径。通常情况下,只需增加路线图中的样本数量即可解决这一问题,但并非总是如此。

如果运动规划器持续无法连接目标,请确保任务位于机器人工作区中可达性最强的区域内。打开机器人面板(右键单击工作站树中的机器人并选择选项),然后在 "工作空间 "部分选择 "显示当前工具",即可查看机器人的工作空间。