~欢迎关注~
微信公众号:古月居
新浪微博:古月春旭
知乎专栏:古月居
古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第六讲《MoveIt!编程驾驭机械臂运动控制》的内容精要。
大家好,这里是《ROS机械臂开发:从入门到实战》的第六讲——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,前者是将添加的物体作为障碍物,后者是将添加的物体作为机械臂的一部分。
以上就是本讲的内容概要,详细讲解过程和仿真/真机演示请见具体课程。
更多精彩,欢迎大家关注“古月居”。
更多内容欢迎关注:
微信公众号:古月居 (guyue_home)
新浪微博:古月春旭
知乎专栏:古月居
全部评论(54)
旋律是风
交换。
山山而川
古月作者
山山而川
山山而川
山山而川
佚名
古月作者
佚名
佚名
古月作者
古月作者
佚名
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
小枫
佚名
古月作者
佚名