遨博协作机器人ROS开发 - 机械臂规划场景构建

目录

一、简介

二、环境版本

三、学习目标

四、知识储备

五、任务实施

六、任务拓展

七、课堂小结

八、课后练习


一、简介

大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),今天我们来学习一下“机械臂规划场景构建”。

二、环境版本

  • 主机系统版本:Windwos10 64位
  • 处理器型号:Intel-i7
  • 虚拟机版本:VMware Workstation 16 Pro
  • 虚拟机系统:Ubuntu 18.04.6 LTS
  • ROS版本:Melodic

三、学习目标

四、知识储备

下面开始介绍本节内容的知识点:

1.PlanningScene类简介

设置规划场景的功能可以使用编程的方式实现,使用到的类为PlanningScene,该类提供了碰撞检测和约束检测用到的主要接口。

在下图中表现了PlanningScene和各个组件之间的关系,首先核心是Planning Scene Monitor,也就是PlanningScene监视器,其支持多种语言的编程接口,可以通过这些编程接口构建规划场景,另外,也可以利用机器人的3D图像传感器与空间感知传感器的数据来构建规划场景。

 2.初始化PlanningScene类

使用PlanningScene可以设置碰撞场景,但是建议使用PlanningSceneMonitor对机器人的关节和传感器建立规划场景,不推荐直接实例化PlanningScene类。

下列代码是将将PlanningScene直接实例化,但这种方法只用于说明实例。

 3.碰撞检测

(1)自我碰撞检测

首先检测机械臂自身部分会不会发生碰撞,例如是否会左手碰右手。需要构建一个碰撞请求(CollisionRequest)对象和一个碰撞结果(CollisionResult)对象,再将它们传递给碰撞检测函数,检测结果保存在碰撞结果对象中,实现代码如下

(2)修改状态后的碰撞检测

可以从规划场景中得到机器人的状态,然后改变机器人的状态,设置一个随机位置,然后进行碰撞检测。实现代码如下。

 (3)获取碰撞信息

首先,手动设置“aubo_e5”的位置,让内部碰撞发生,肯定超出了关节约束的范围。然后可以获得可能发生的碰撞信息,实现代码如下所示。

 (4)修改允许碰撞矩阵

碰撞矩阵提供了一个机制,用于告知碰撞环境,忽略对两个特定对象的碰撞检测。可以告知碰撞检测器忽略上述所有杆件。即便他们存在碰撞,碰撞检测器也将忽略对他们的检测。

在下面代码例子中,注意是如何复制碰撞矩阵的,和当前状态是怎样加入到碰撞检查函数的。

 (5)以组为单位的碰撞检测

下面的代码检查“aubo_e5”与机器人其他部分的碰撞。可以把“aubo_e5”加入碰撞请求。

(6)全碰撞检测

可以将checkCollision函数用于自检和与环境的碰撞检测中,这是在规划过程中应用最多的碰撞检测函数。注意与环境的碰撞检测要使用加了保护的机器人。实现代码如下所示。

 4.约束检测

约束检测有两种类型:

a.从运行学约束中选择的约束,比如关节约束,位置约束,方向约束和可见性约束;

b.用户通过回调函数定义的约束。

(1)运动学约束检测

首先在aubo_e5的末端定义一个简单的位置方向约束,实现代码如下所示。

 可以使用PlanningScene类的isStateConstrained函数来检查状态是否符合约束。

当需要在同一个规划器中重复检查一个相同的约束的时候,还有一个更有效的方式。首先构建一个运动约束集(KinematicConstraintSet),用于预处理ROS约束消息。

下面代码是一个使用KinematicConstraintSet类比较直接的方式。

 (2)用户自定义的函数可以在PlanningScene类中使用setStateFeasibilityPredicate函数调用自定义的回调函数来实现。下面的例子用于判断“shoulder_joint”的角度是否大于零。

当isStateValid被调用时,将执行三个检查:碰撞、约束和自定义回调函数的可行性,如下列代码所示。

 五、任务实施

接下来,我们来看下,使用PlanningScene接口向规划场景中添加物体的程序演示。

10.机械臂规划场景构建

六、任务拓展

分析例程代码

在演示例程提供的代码中,找到哪些是规划场景有关的代码,并分析这些代码的作用,并在下列官方说明文档网址中,学习规划场景的相关的其他接口。

PlanningScene官方说明文档网址:http://docs.ros.org/en/indigo/api/moveit_core/html/classplanning__scene_1_1PlanningScene.html

 七、课堂小结

下面我们进行课堂小结:

ROS的规划场景功能可以完成碰撞检测与约束检测,在开发过程中,可以在机械臂的规划场景中添加或删除物体从而与真实环境一致,构建符合真实环境的规划场景。

 八、课后练习

最后给大家布置一道课后习题

尝试使用PlanningScene编程接口,向规划场景中的机械臂的末端添加圆柱形物体,并且可以随着机械臂运动。

 在接下来的ROS课程中,我们会讲解遨博机械臂自主避障,欢迎持续关注。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS Neur机械臂源码是指基于ROS机器人操作系统)开发的Neur机械臂的源代码。Neur机械臂是一种多自由度机械臂,可以进行精确的物体抓取和放置操作。该机械臂的源码是指开发者编写的程序代码,用于控制机械臂的运动以及与其他设备进行通信。 ROS是一个广泛应用于机器人系统开发的开源框架,它提供了一系列的工具和库,方便开发者进行机器人系统的构建和控制。Neur机械臂源码是基于ROS的一种实现,利用ROS的功能实现机械臂的控制与感知。 在Neur机械臂的源码中,包括了一些重要的功能模块,如逆向运动学、轨迹规划、抓取算法等。逆向运动学模块能够根据期望末端执行器的位置和姿态,计算出各关节的角度,从而使机械臂实现所需的动作。轨迹规划模块可以根据给定的起始和目标位置,生成机械臂的轨迹,使机械臂能够沿特定路径移动。抓取算法模块是用于控制机械臂进行物体抓取的算法,可以根据物体的形状和属性,确定最佳的抓取方式,并控制机械臂进行抓取操作。 这些功能模块是机械臂源码中的重要部分,通过它们,开发者可以实现对机械臂的精确控制和各种应用场景的自动化操作。此外,源码中还包括一些ROS相关的驱动程序和通信协议的实现,用于与其他外部设备和软件进行通信。 综上所述,ROS Neur机械臂源码是一种基于ROS开发的多自由度机械臂的源代码,包含了逆向运动学、轨迹规划、抓取算法等功能模块,用于实现对机械臂的控制和各种应用场景的自动化操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值