ROS探索总结(六十五)—— 古月私房课 | MoveIt!编程驾驭机械臂运动控制

  • 内容
  • 评论
  • 相关

~欢迎关注~

微信公众号:古月居

新浪微博:古月春旭

知乎专栏:古月居

原文链接:古月私房课 | MoveIt!编程驾驭机械臂运动控制

 

古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第六讲《MoveIt!编程驾驭机械臂运动控制》的内容精要。

大家好,这里是《ROS机械臂开发:从入门到实战》的第六讲——MoveIt!编程驾驭机械臂运动控制,我是主讲人胡春旭。

幻灯片1

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

幻灯片2

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

幻灯片3

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

幻灯片4

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

幻灯片5

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

幻灯片6

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

幻灯片7

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

幻灯片8

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

幻灯片9

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

幻灯片10

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

幻灯片12

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

幻灯片14

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

幻灯片15

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

幻灯片16

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

幻灯片17

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

幻灯片19

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

幻灯片20

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

幻灯片21

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

幻灯片22

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

幻灯片23

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

幻灯片24

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

幻灯片25

更多精彩,欢迎大家关注“古月居”。

幻灯片28

 

更多内容欢迎关注:

微信公众号:古月居 (guyue_home)

新浪微博:古月春旭

知乎专栏:古月居

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

3条评论
  1. Gravatar 头像

    wjf 回复

    古老师,在这个章节教程里,将probot_demo加入catkin工作空间后,无法编译通过
    CMake Error at probot_demo/CMakeLists.txt:166 (target_link_libraries):
    Attempt to add link library
    "/usr/lib/x86_64-linux-gnu/libconsole_bridge.so" to target
    "moveit_cartesian_demo" which is not built in this directory.

    CMake Error at /opt/ros/kinetic/share/catkin/cmake/custom_install.cmake:13 (_install):
    install TARGETS given target "moveit_random_demo" which does not exist in
    this directory.
    Call Stack (most recent call first):
    probot_demo/CMakeLists.txt:210 (install)

    • 古月

      古月 回复

      @wjf probot_demo的CMakeLists.txt里边编译moveit_random_demo的部分删掉

      • Gravatar 头像

        wjf 回复

        @古月 老师,我发现问题在哪了,是因为我参照你的probot_demo包,编写自己的package时,Cmakelist.txt文件是复制了probot_demo包里的,在add_executable()和target_link_libraries()函数的参数没有及时修改,最后在不同的包里编译moveit_cartesian_demo和moveit_random_demo等文件,导致编译失败。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据