< >
Home » ROS探索总结 » ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制

ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制

ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制

说明:

  • 介绍MoveIt!编程驾驭机械臂运动控制

正文

请输入图片描述

  • 本讲我们将从以下四个部分进行讲解。

请输入图片描述

  • 首先来回顾下MoveIt!编程接口的框架。

请输入图片描述

  • MoveIt!提供三种主要的交互方式:C++接口、Python接口以及上位机Rivz插件接口,无论哪种形式,底层都是和move_group核心节点交互,完成功能算法的调用。

请输入图片描述

  • 对比C++和Python两种编程方式,在流程上完全一致,API接口的名字也基本相同。

请输入图片描述

  • 完整的MoveIt!程序流程如下,不可或缺的步骤是:确定控制对象的规划组、设置目标位姿、进行运动规划、执行规划轨迹。

请输入图片描述

  • API接口众多,而且有多态性,所以在开发过程中大家一定离不开官方的API文档,这里有最完整的接口介绍。

请输入图片描述

  • 接下来我们就来了解一下MoveIt!中的关键编程方法,第一种是关节空间运动。

请输入图片描述

  • 在关节空间运动中,机械臂各轴独立完成轨迹插补,终端轨迹是自由曲线,常用于码垛、搬运、分拣等对运动轨迹没有强制约束的场景,其中的关键就是对目标姿态的描述。

请输入图片描述

  • 可以在关节空间下直接通过各轴的位置描述目标姿态,这里需要调用MoveIt!提供的set_joint_value_target函数实现。

请输入图片描述

  • 也可以在工作空间下通过终端的位姿+姿态进行描述,需要调用set_pose_target函数进行设置。

请输入图片描述

  • 还有很多场景下对机械臂的终端轨迹有要求,那就需要用到笛卡尔空间下的运动规划功能了。

请输入图片描述

  • 比如让机械臂的终端走出一条直线。

请输入图片描述

  • 我们可以对比笛卡尔运动和关节空间下经过同样路径点的轨迹区别,如下图所示,一个是自由曲线,一个是直线轨迹。

请输入图片描述

  • 这里笛卡尔运动规划使用的关键函数是MoveIt!中的compute_cartesian_path,它可以将多个路点waypoints之间通过直线轨迹连接到一起,返回值fraction表示可规划轨迹的覆盖率。

请输入图片描述

  • 在机械臂运动过程中,如果有障碍物的话,还需要考虑避障的问题。

请输入图片描述

  • 比如下图中机械臂在运动规划时,就需要考虑到绿色障碍物的避障问题。

请输入图片描述

  • MoveIt!中有一个场景监听器模块,就是用来检测外部场景信息的,障碍物可以通过三种方式加入场景中:rviz可视化添加、程序添加、传感器检测。本讲我们主要介绍前两种方式。

请输入图片描述

  • 在rviz的MoveIt!插件中有一个Scene Object标签页,可以将障碍物模型添加到场景当中来,此后机械臂在运动规划时就会考虑躲避该障碍物了。

请输入图片描述

  • 另外一种方式是通过程序操作,不仅可以添加外界障碍物,还可以添加机械臂上的附着物体,模拟抓取到的物体,将作为机械臂的一部分,考虑与外界物体的碰撞。

请输入图片描述

  • 这里涉及的主要函数是add_box和attach_box,前者是将添加的物体作为障碍物,后者是将添加的物体作为机械臂的一部分。

请输入图片描述

  • 以上就是本讲的内容概要,详细讲解过程和仿真/真机演示请见具体课程。

请输入图片描述

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros探索总结