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,前者是将添加的物体作为障碍物,后者是将添加的物体作为机械臂的一部分。
- 以上就是本讲的内容概要,详细讲解过程和仿真/真机演示请见具体课程。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号