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

说明:

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

正文

python控制小车运动 python运动控制库_API

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

python控制小车运动 python运动控制库_python做运动控制_02

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

python控制小车运动 python运动控制库_python控制小车运动_03

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

python控制小车运动 python运动控制库_自由曲线_04

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

python控制小车运动 python运动控制库_API_05

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

python控制小车运动 python运动控制库_python控制小车运动_06

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

python控制小车运动 python运动控制库_API_07

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

python控制小车运动 python运动控制库_API_08

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

python控制小车运动 python运动控制库_python做运动控制_09

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

python控制小车运动 python运动控制库_机械臂_10

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

python控制小车运动 python运动控制库_API_11

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

python控制小车运动 python运动控制库_自由曲线_12

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

python控制小车运动 python运动控制库_python控制小车运动_13

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

python控制小车运动 python运动控制库_python控制小车运动_14

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

python控制小车运动 python运动控制库_API_15

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

python控制小车运动 python运动控制库_自由曲线_16

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

python控制小车运动 python运动控制库_python控制小车运动_17

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

python控制小车运动 python运动控制库_自由曲线_18

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

python控制小车运动 python运动控制库_机械臂_19

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

python控制小车运动 python运动控制库_机械臂_20

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

python控制小车运动 python运动控制库_python控制小车运动_21

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

python控制小车运动 python运动控制库_API_22