遨博协作机器人ROS开发 - 机械臂复杂轨迹规划

目录

一、简介

二、环境版本

三、学习目标

四、知识储备

 五、任务实施

六、任务拓展

 七、课堂小结

 八、课后练习


一、简介

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

二、环境版本

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

三、学习目标

四、知识储备

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

1.MoveIt!的正向运动学

通过MoveIt!的API接口控制机械臂运动,程序中一般是通过设置机械臂末端需要到达的位姿,然后规划路径并执行来控制机械臂运动的,这样可以保证每次末端都会运动到指定的位姿,但是,机械臂6个关节的姿态每次规划并不一定相同。

如下方两个示意图所示,机械臂具有相同的末端位姿,但是具备不同的关节角。

 通过机械臂末端的位姿来计算机器人运动的路径,其实是一个逆运动学的过程,如果需要每次机械臂运动后的整体姿态是固定的,就需要使用正运动学过程,如下列代码所示,设置的目标不是末端的位姿,而是6个关节的角度。

需要注意的是,在ROS中角度使用的单位是弧度,而在机械臂示教器中使用的单位是角度,需要进行单位的转换。

设置关节角为目标姿态时需要调用setJointValueTarget函数。

 2.圆弧轨迹规划

在MoveIt!规划中,圆弧轨迹插补API是未提供的。实际应用里,例如焊接等任务需要圆弧轨迹,那么就需要自行实现。方法如下图所示,是用很多直线段模拟圆弧,取点越多越接近实际圆弧。在圆弧上均匀采样,将位置依次添加到路点,最后调用直线路径规划API实现圆弧运动,实现方法如右侧代码所示。

3.轨迹重定义

如果对规划出来的轨迹不是很满意,可以在“plan”和“execute”之间对轨迹进行修改。这里以删除轨迹中的中间点为例,对轨迹进行重定义。

首先调用MoveIt!的API规划得到一条路径plan(轨迹规划),如下列代码所示:

 接着调用右侧代码中实现的函数,delete_trajectory(plan, 10);,这是对plan每隔10个点删除一个,完成轨迹重定义,当然如果删除的点太多,会造成真实机械臂运动产生卡顿和抖动

 4.多轨迹连续运动

如果要一次运动多种复杂的轨迹,使用前面的方法,需要每次规划路径,然后等待机械臂运动完成,再次规划下一条路径,如此往复。在执行每条路径后,要规划下一条路径,这必然会导致计算路径耗时所产生的停顿,如果计算机的运算能力不高,这种停顿时间会更加明显。

如何让机械臂在各段轨迹之间不停顿,一气呵成完成所有轨迹的运动?MoveIt!本身是没有此功能的,因为MoveIt!规划出来的轨迹一定是速度从0到0的轨迹,我们需要重新组合API的调用来实现多轨迹连续运动。

实现方法是将规划得到的多条轨迹拼接成一条,然后对这一条轨迹中的速度,加速度进行重新规划,成为一条完整的轨迹,关键就在于如何重规划。

下面给出用时间最优算法对拼接的轨迹进行重规划,当然也可以用其它算法实现。

 下列是多条轨迹连续规划示例代码,生成新轨迹,然后就可以控制机械臂运动。

代码流程为首先定义一个轨迹变量trajectory,接着将已经规划好的路径中的每个点加入到trajectory中,重复此操作加入所有规划的轨迹,然后将所有的轨迹点重新规划,生成新的轨迹trajectory,最后将新轨迹赋值到规划变量中。

 5.修改超时运动限制

MoveIt!对于机械臂运动一条轨迹的时间是有默认限制的,如果采用多轨迹连续运动,那么会认为这是一条完整的轨迹,一般复杂轨迹运动的时间是比较长的,所以需要修改这个限制,以防超时导致的报错,方法如下。

修改AUBO-E5的MoveIt功能包下launch文件夹下的trajectory_execution.launch.xml文件,将执行的超时时间修改为20,单位是秒,如果在运行时报timeout的错误,也和机械臂运行速度有关,可适当增大这个数值。

在下图所示的位置进行修改,需要注意的是,轨迹执行时间限制的修改最好经过测试并符合实际需求。

 五、任务实施

接下来,我们来看下通过机械臂跳舞案例,展现正向运动学、轨迹重定义、多轨迹连续运动等内容。

12.机械臂复杂轨迹规划

六、任务拓展

设置机械臂速度与加速度限制。

为了使机械臂舞蹈运动速度和加速度更快,需要修改AUBO-E5的MoveIt功能包下config文件夹下的joint_limits.yaml文件,如右图所示,这里可以设置机械臂6个关节最大速度和加速度。

此文件内内参数的含义如下:

  • has_velocity_limits:速度限制是否生效,true代表生效,false代表不生效,生效时才能控制最大速度;
  • max_velocity:最大速度限制值,单位为弧度/s;
  • has_acceleration_limits:加速度限制是否生效,true代表生效,false代表不生效,生效时才能控制最大加速度;
  • max_acceleration:最大加速度限制值,单位为弧度/平方秒。

 七、课堂小结

下面我们进行课堂小结:

1.本节内容主要针对MoveIt!的复杂路径规划,可以利用圆弧轨迹规划、轨迹重定义、多轨迹连续运动等方式完成需要的轨迹路径,这在实际的应用过程中是非常重要的。

2.真实机械臂的ROS最大速度与最大加速的限制调节需要以安全为主,特别是在调试开发阶段,防止速度超出预期造成不必要的损失,同时也请放心,在ROS控制下,机械臂的碰撞停止等安全功能依然有效。

 八、课后练习

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

1.利用圆弧轨迹规划的方法,编写1个在水平面规划圆形末端轨迹的程序节点,并控制真实机械臂完成此轨迹的验证。

2.利用轨迹重定义的方法,逐步删除轨迹中的路点,观察真实机械臂的运动情况。

在接下来的ROS课程中,我们会讲解遨博机械臂末端工具ROS驱动,欢迎持续关注。

  • 5
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值