ROS探索总结(六十六)—— 古月私房课 | MoveIt!中不得不说的“潜规则”

  • 内容
  • 评论
  • 相关

~欢迎关注~

微信公众号:古月居

新浪微博:古月春旭

知乎专栏:古月居

原文链接:古月私房课 | MoveIt!中不得不说的“潜规则”

 

古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第七讲《MoveIt!中不得不说的“潜规则”》的内容精要。

大家好,这里是《ROS机械臂开发:从入门到实战》的第七讲——MoveIt!中不得不说的“潜规则”,我是主讲人胡春旭。

幻灯片1

今天我们来揭秘MoveIt!使用过程中的一些潜规则,也是大家经常会有疑惑的地方,很多在MoveIt!教程中并没有说明,而是古月君在研究过程中结合API文档发现的,也给大家分享一下。

幻灯片2

首先我们来看圆弧轨迹的规划。

幻灯片3

很多同学会有这样一个疑问,MoveIt!可以规划笛卡尔直线运动,那能不能规划圆弧运动,甚至任意曲线轨迹的运动呢?MoveIt!中没有直接的API接口,但是下边这张图应该可以给大家灵感:通过直线逼近的方式,就可以实现啦!

幻灯片4

按照这样的思路,我们来看MoveIt!下实现的圆弧轨迹规划例程,演示中我们可以看到机械臂的终端走出了一个完整的圆形轨迹。

幻灯片5

该例程实现的流程:首先通过圆的轨迹方程,计算得到一系列圆上的路径点,然后使用computeCartesianPath函数完成所有路径点之间的直线轨迹规划,最后execute执行运动。

幻灯片6

很多情况下,我们对MoveIt!规划的轨迹并不满意,那这条轨迹能不能修改呢?当然是可以的。

课件_ROS机械臂开发_7. MoveIt!中不得不说的“潜规则”

运行例程,我们可以看到机器人会完成两次相同的运动,但是速度有明显的差异,这就是因为我们对MoveIt!规划的轨迹做了人为的修改。

幻灯片8

该例程实现的流程:首先使用plan正常完成规划,然后遍历规划得到的轨迹数据,里边的位置、速度、加速度、时间想怎么改就怎么改了,最后execute执行修改之后的轨迹即可。

幻灯片9

到现在为止,例程中机械臂每次运动的速度变化都是从0到0的,在连续运动中会出现频繁的停顿,如何减少甚至去掉中间的停顿呢?古月君结合自己对API的研究,给大家介绍一种方法。

幻灯片10

运行多轨迹连续运动的例程,机械臂会一次完成两条轨迹的运动,中间并不会出现停顿的问题。

幻灯片11

该例程的实现相对复杂一些,用到了很多MoveIt!深层的API。主要流程如下:首先规划多条需要连续运动的轨迹,但是此时机器人并没有真实运动,所以需要注意后续轨迹规划的起点应该是前一条轨迹的终点。

幻灯片12

然后创建一个新的轨迹对象,把以上规划好的轨迹全部push进去,再调用IPTP时间最优算法的接口,重新规划这条新轨迹的速度、加速度、时间等信息,规划完成后就可以调用execute连续运动啦。

幻灯片13

最后一个部分我们来介绍如何更换MoveIt!中的运动学插件。

课件_ROS机械臂开发_7. MoveIt!中不得不说的“潜规则”

在之前的课程中,我们介绍过MoveIt!三大核心功能之一就是运动学,那什么是运动学?大家可以参考《机器人学导论》中的理论介绍,以一个两自由度的机械臂为例,已知关节角度推算终端XY坐标的过程就是正运动学,相反就是逆运动学。

幻灯片15

MoveIt!默认使用的运动学插件是KDL,但是该算法是基于迭代的数值解,求解速度慢,失败率高,并不是开发的首选。

幻灯片16

TRAC-IK虽然也是数值解,但是算法上做了很多优化,速度和成功率都有了很大程度的提升。

幻灯片17

TRAC-IK的使用方法也很简单,安装后修改配置文件就可以启用了。

幻灯片18

另外一个运动学插件是基于解析解的IKFAST,可以根据模型生成专属的运动学算法插件,求解速度快,成功率高,不过配置过程着实有点复杂,有兴趣的小伙伴可以参考古月君的配置:

ROS技术点滴 —— MoveIt!中的运动学插件

幻灯片19

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

幻灯片25

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

幻灯片28

 

更多内容欢迎关注:

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

新浪微博:古月春旭

知乎专栏:古月居

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

评论

12条评论
  1. Gravatar 头像

    牛大 回复

    胡老师好!我在你的ros机器人开发实践这本书的10.7,添加arbotix关节控制器这一章节中,尝试着跑下你的教程,控制一个六轴的机械臂运动,配置文件,py源码都是按照你书上的来写的,只是换了一个模型,但是运行的时候臂架在rviz中根本不动,提示:[INFO] [1555923605.106513]: left_controller: Action goal recieved.
    [INFO] [1555923605.107088]: Executing trajectory
    [INFO] [1555923608.109254]: left_controller: Done.
    [WARN] [1555923608.141007]: Inbound TCP/IP connection failed: connection from sender terminated before handshake header received. 0 bytes were received. Please check sender for additional details.
    这是什么问题导致的机械臂不动啊

    • Gravatar 头像

      牛大 回复

      @牛大 这个问题已经解决了,不过我在运行10.9的关节空间规划时,会提示错误
      [ INFO] [1556090360.227002187]: RRTConnect: Created 5 states (3 start + 2 goal)
      [ INFO] [1556090360.227065154]: Solution found in 0.023067 seconds
      [ INFO] [1556090360.240247522]: SimpleSetup: Path simplification took 0.012945 seconds and changed from 4 to 2 states
      [ERROR] [1556090360.241767347]: Unable to identify any set of controllers that can actuate the specified joints: [ j1 j2 j3 j4 j5 j6 j7 j8 ]
      [ERROR] [1556090360.241801231]: Known controllers and their joints:
      [ERROR] [1556090360.241841205]: Apparently trajectory initialization failed
      我有8个关节,请问下这是出什么问题了

    • 古月

      古月 回复

      @牛大 应该是模型和控制器中间的某些参数没配置好,检查下各种命名

  2. Gravatar 头像

    小李 回复

    [ERROR] [1555400928.114091131]: Validation failed: Trajectory doesn't start at current position.这个错误怎么解决??

  3. Gravatar 头像

    刘凌峰 回复

    古老师,我的机器人结构中有一两个关节是移动关节,但是moveit教程中使用的控制器是Arbotix,好像针对的是旋转关节,请问有什么关节控制器的推荐或者案例教程吗

    • 古月

      古月 回复

      @刘凌峰 Arbotix应该可以设置平移关节的,或者用ros_controller里边的位置控制器

      • Gravatar 头像

        刘凌峰 回复

        @古月 那么Arbotix的配置文件应该怎么写啊,应该把max_angle改成什么了

  4. Gravatar 头像

    小昌同学 回复

    古老师,我在用cartographer跑自己的bag,可是一直有问题,我是参考cartographer的文档修改的,请问配置需要注意些什么呢?

  5. Gravatar 头像

    小张 回复

    月哥哥,这一课的代码在哪能找到呀?我想学习学习 😛 ,还是 要花钱买呀

发表评论

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

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