目录
一、简介
二、环境版本
三、学习目标
四、知识储备
五、任务实施
六、任务拓展
七、课堂小结
八、课后练习
一、简介
大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),今天我们来学习一下“机械臂复杂轨迹规划”。
二、环境版本
主机系统版本:Windwos10 64位处理器型号:Intel-i7虚拟机版本:VMware Workstation 16 Pro虚拟机系统:Ubuntu 18.04.6 LTSROS版本: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驱动,欢迎持续关注。
如果觉得《遨博协作机器人ROS开发 - 机械臂复杂轨迹规划》对你有帮助,请点赞、收藏,并留下你的观点哦!