无碰撞运动规划器

运动规划功能可在机器人工作空间内自动生成无碰撞路径。在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:利用机器人高灵巧工作区。

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

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

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