ROS探索总结(三十九)——MoveIt!上手指南

  • 内容
  • 评论
  • 相关

 

上周四(9月28日),星火在线课堂举办了第一次在线课程,我有幸成为第一位分享嘉宾,与大家分享了一下MoveIt!的相关内容,直播过程中共有800多位小伙伴共同参与,该课程也永久免费开放,有兴趣的小伙伴可以继续访问该课程,参与或者回顾课程的所有内容。

课程地址:https://m.weike.fm/lecture/4867575?lecture_id=4867575

以下是课程PPT内容:


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(三十九)——MoveIt!上手指南

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

评论

57条评论
  1. Gravatar 头像

    高颜 回复

    古月老师,您好,再次感谢您回答我之前提出的问题,现在我想像您一样设计一个基于Rviz的人机交互界面,我已经做完教程rviz pligin,也配置了一个Qt的ros开发环境,但现在还是对人机界面的设计没有思路,希望您提供一下这方面的资料(425072383@qq.com),万分感谢!

    • 古月

      古月 回复

      @高颜 这方面暂时还没有什么资料,只能去看ROS中的源码,turtlebot里边有人机界面,可以作为参考

  2. Gravatar 头像

    lh 回复

    老师,请问urdf.rviz这个怎么编写啊,moveit不会自动生成这个吧,我这里出错的原因可能是这个文件编写出问题了,有相关教程吗?

    • 古月

      古月 回复

      @lh 这个不用自己写,在rviz中配置好显示项,保存配置文件就可以了

      • Gravatar 头像

        lh 回复

        @古月 那您在第四步中编写arm_planning.launch文件中最后运行rviz包时运行的pick_and_place.rviz文件是自己编写的吗?

        • 古月

          古月 回复

          @lh 不是,是自己配置好后,在rviz中保存的

      • Gravatar 头像

        lh 回复

        @古月 老师,麻烦再问一下,在第四步中moveit_fk_demo.py只有图中PPT所示那一小段程序吗?

        • 古月

          古月 回复

          @lh ppt中只是代码段,具体可以参考《Mastering ROS for Robotics Programming》

          • Gravatar 头像

            lh 回复

            @古月 老师,我按照书上教程走下来还是出错,是ROS版本原因吗?好虐啊,我用的kinetic,书上是indigo

            • 古月

              古月 回复

              @lh 是的,两个版本中的moveit有变化,会有很多错误的,如果对API不了解的话,最好还是用indigo版本

  3. Gravatar 头像

    lh 回复

    老师您好,在运行fake_arm.launch出现xacro: Traditional processing is deprecated. Switch to --inorder processing!
    To check for compatibility of your document, use option --check-order.
    For more infos, see http://wiki.ros.org/xacro#Processing_Order
    rviz什么都不显示是什么原因?

    • 古月

      古月 回复

      @lh 按照提示,把--inorder加入到$(find xacro)/xacro后边

  4. Gravatar 头像

    水清 回复

    古月,你好,我现在在做puma560的轨迹规划,因为机械臂的正逆运动学相对成熟,所以我想换成自定义的正逆运动学求解方法,请问这该如何去做?

    • Gravatar 头像

      李胜飞 回复

      @水清 发错了,不好意思。。

      • Gravatar 头像

        水清 回复

        @李胜飞 没事,重新向古老师提问吧

    • 古月

      古月 回复

      @水清 可以换成自己的,这是ROS中的插件机制,首先你需要了解ROS的moveit编程,同时学习ROS的插件机制,然后找到已有运动学的插件代码,了解实现方法,最后实现自己的运动学插件。

      • Gravatar 头像

        水清 回复

        @古月 古月老师,首先感谢您的回答,谢谢!另外,您的回复中的插件机制,您是指的利用pluginlib?

  5. Gravatar 头像

    riobo 回复

    问题1:In file included from /usr/include/gazebo-7/gazebo/gazebo_core.hh:21:0,
    from /usr/include/gazebo-7/gazebo/gazebo.hh:20,
    from /home/riobo/catkin_ws/src/pick-place-robot/gazebo_grasp_plugin/src/GazeboGraspFix.cpp:2:
    /usr/include/gazebo-7/gazebo/msgs/msgs.hh:24:37: fatal error: ignition/math/Inertial.hh: 没有那个文件或目录
    In file included from /usr/include/gazebo-7/gazebo/gazebo_core.hh:21:0,
    from /usr/include/gazebo-7/gazebo/gazebo.hh:20,/home/riobo/catkin_ws/src/pick-place-robot/kuka_arm/src/trajectory_sampler.cpp: In constructor ‘TrajectorySampler::TrajectorySampler(ros::NodeHandle)’:
    /home/riobo/catkin_ws/src/pick-place-robot/kuka_arm/src/trajectory_sampler.cpp:180:43: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in initialization
    bool success = move_group.plan(my_plan);
    求助古月大神,在github上clone别人的代码出现错误,我这两个错误怎么回事?如何解决?谢谢大神
    from /home/riobo/catkin_ws/src/pick-place-robot/gazebo_grasp_plugin/src/GazeboGraspGripper.cpp:2:
    问题2:

    • 古月

      古月 回复

      @riobo 这是因为ROS版本的问题,导致部分API的变化,按照错误提示修改就行了。success定义成moveit::planning_interface::MoveItErrorCode类型。

  6. Gravatar 头像

    lh 回复

    老师您好,我按照PPT步骤,在运行到rosrun abb_irb4400_moveit_example trajectory_demo.py _reset:=False后出现了[rosrun] Couldn't find executable named trajectory_demo.py below /home/lh/catkin_ws/src/abb/abb_irb4400_moveit_example
    [rosrun] Found the following, but they're either not files,
    [rosrun] or not executable:
    版本是16。04kinetic,另外trajectory_demo.py这个文件新建完后需要修改package.xml吗?

    • 古月

      古月 回复

      @lh trajectory_demo.py有没有添加可执行权限,不用修改package

  7. Gravatar 头像

    lh 回复

    老师您好,在运行rosrun abb_irb4400_moveit_example trajectory_demo.py _reset:=False完此命令后出现了[rosrun] Couldn't find executable named trajectory_demo.py below /home/lh/catkin_ws/src/abb/abb_irb4400_moveit_example
    [rosrun] Found the following, but they're either not files,
    [rosrun] or not executable:
    [rosrun] /home/lh/catkin_ws/src/abb/abb_irb4400_moveit_example/trajectory_demo.py
    [rosrun] /home/lh/catkin_ws/src/abb/abb_irb4400_moveit_example/nodes/trajectory_demo.py
    我的版本是kinetic,就是按照PPT上面做的,求帮忙

    • 古月

      古月 回复

      @lh trajectory_demo.py有没有添加可执行权限

      • Gravatar 头像

        lh 回复

        @古月 老师可以详细说一下怎么添加可执行权限吗?我是按照您PPT步骤一步一步来的,trajectory_demo.py我直接新建在了abb_irb4400_moveit_example下,版本是16.04kinetic

        • 古月

          古月 回复

          @lh 右键点击python代码文件,在权限的标签页下勾选可执行选项

          • Gravatar 头像

            lh 回复

            @古月 老师,请问一下trajectory_demo.py这个文件我是按照上面写的啊,但是怎么总是语法错误。/home/lh/catkin_ws/src/abb/abb_irb4400_moveit_example/trajectory_demo.py: 行 2: 未预期的符号 `(' 附近有语法错误
            /home/lh/catkin_ws/src/abb/abb_irb4400_moveit_example/trajectory_demo.py: 行 2: ` def __init__(self):'
            是ros版本不一样的原因吗?我的执行文件前三行,第一行原来也是提示语法错误,我改了一下
            class TrajectoryDemoobjs:
            def __init__(self):
            rospy.init_node('trajectory_demo')

            • Gravatar 头像

              lh 回复

              @lh python版本是2.7。程序按您PPT写的,但是终端一直报错,说是语法错误

            • 古月

              古月 回复

              @lh 看上去像是编码有问题,你把《Mastering ROS for Robotics Programming》那本书的源码下载对照一下,我也是用的书里的源码。

  8. Gravatar 头像

    zhaoxl 回复

    你好,古月大神。我现在用moveit做机械臂抓取。比如抓杯子时,先定义一个抓取的目标位姿,然后在抓取的目标位姿前再设置一个过渡点,方便更好的抓取,不加过渡点经常会把杯子碰到。但是在这个过渡点机械臂会停顿一下。原因是到了过渡点之后,才开始规划下一段轨迹。古月大神,我应该怎样规划一条轨迹,需要通过这个过渡点,然后中间不停顿。还有就是,Moveit的轨迹规划调用的OMPL,但是在我这里看不到他的源码,这样就不好修改轨迹规划的代码,古月大神,您有什么建议吗?或者有什么比较好的参考资料。谢谢!!

    • 古月

      古月 回复

      @zhaoxl 1. Moveit本身没有提供连续运动的API,但是可以使用AddTimeParamterization()这个函数来实现多条轨迹的整合,也就是说先分别规划出两段轨迹,然后拼在一个轨迹数据里,再用AddTimeParamterization()计算轨迹点的速度、加速度等状态。可以参考:https://github.com/ros-planning/moveit_core/issues/141
      2. ompl本身的修改我没做过,源码下载可以参考这个:http://moveit.ros.org/install/source/dependencies/

  9. Gravatar 头像

    yazhouren 回复

    为何使用机械臂空间规划arm.set_pose_target()时,只有很少的点可以plan成功,大部分都不成功?
    难道要实现end_effort移动到某个位姿,必须自己要手动测试运动路径??这IK算法如此不堪?
    新手,请 古月大神解答一下

    • 古月

      古月 回复

      @yazhouren moveit的运动规划和IK算法确实有很多问题,建议用fastik或者tracik这两个IK算法的功能包试一下,求解成功率高一些。另外还要考虑机器人工作空间、关节限位等因素的影响。

  10. Gravatar 头像

    灰太狼 回复

    您好,古月大神,请问在不考虑ROS实时性问题下,可否不用机器人控制器,用ROS直接控制,比如ROS把目标角度发给脉冲型的运动控制卡(运动控制卡没有插补算法这些,是否ROS可以完成),或者用EtherCAT总线方式,ROS系统直接控制总线式的电机驱动器?我这么问是想用ROS搭建一个控制器,绕开厂家专用的控制器,谢谢。

    • 古月

      古月 回复

      @灰太狼 不考虑实时性的话,使用ros_control是可以做到的(使用脉冲型运动控制卡),也就是用ROS中的控制器。问题是机械臂控制对实时性要求本身就比较高,实时性绕不过去的(当然也要看你用的硬件是什么样的),如果用EtherCAT总线的话,肯定要封装一个实时控制层的。

      • Gravatar 头像

        灰太狼 回复

        @古月 实时性我也看了您写的功夫茶机器人方案,看你说你们采用的是linux+xenomai方案,我是打算用linux+ROS+OROCOS方式,不知您有没考虑过这种方式?还有个问题是运动插补,ROS里面应该没有现成的运动插补算法吧?可能需要自己开发一个运动插补模块,可能正如你建议的插补一定要在一个节点里实时完成。

        • 古月

          古月 回复

          @灰太狼 这个要看你对实时性的要求,以及对整个系统的定位,linux+ROS+OROCOS的方式研究开发的话应该是可以尝试一下的,我们的目标是商业级控制系统,ROS和OROCOS带入的风险太大。插补算法(三次、五次样条)在ros_control里也是有的,可以参考。

  11. Gravatar 头像

    徐松 回复

    古月大神您好,有个问题请教您,在用MoveIt!进行机械臂导航时,我不知道当前机械臂每个关节的角度,但我知道当前末端执行器的位姿(position、orientation)和目标末端执行器的位姿(position、orientation),能不能进行逆运动学求解?

    • 古月

      古月 回复

      @徐松 可以的,逆运动学求解就是已知终端位姿,求解各轴角度

  12. Gravatar 头像

    李锐 回复

    大神您好,我在使用ur5 driver时看到在hardware_interface 中有伺服控制的指令,而且UR5自带的示教器里可用写伺服控制的指令,请问ROS可用利用该接口对UR5进行伺服控制吗?另外在处理kinect2的点云数据时给ur5规划轨迹,除了x,y,z以外,我将平面法向量作为Z轴,手臂前进的方向作为X轴,怎样计算轨迹点的方向信息呢?position.orientation

    • 古月

      古月 回复

      @李锐 UR机器人我没用过,不确定接口功能包能否完成你所需要的功能,这个你要看下ur5 driver功能包所提供的接口是否支持,另外针对UR机器人,好像在github上还有第三方开发的接口包,功能更多,可以看一下

  13. Gravatar 头像

    Rex 回复

    老师您好,我在运行roslaunch demo.launch时出错
    All is well! Everyone is happy! You can start planning now!
    terminate called after throwing an instance of 'Ogre::Exception'
    what(): OGRE EXCEPTION(5:): Could not find font Liberation Sans in MovableText::setFontName
    [rviz_rex_15915_7555855025672061881-5] process has died [pid 15960, exit code -6, cmd /opt/ros/indigo/lib/rviz/rviz -d /home/rex/catkin_rex/src/lwr_moveit_config/launch/moveit.rviz __name:=rviz_rex_15915_7555855025672061881 __log:=/home/rex/.ros/log/d0a3e0d8-e59e-11e7-9c71-5065f32de48d/rviz_rex_15915_7555855025672061881-5.log].
    log file: /home/rex/.ros/log/d0a3e0d8-e59e-11e7-9c71-5065f32de48d/rviz_rex_15915_7555855025672061881-5*.log
    请问有没有果类似问题?

  14. Gravatar 头像

    阳仔 回复

    古月老师您好,我想请问一下您PPT中“ROS-I功夫茶项目”那一页PPT中基于RVIz plugin人机交互界面最左侧是可以将动作提前编好,然后执行。我最近也是想写这么个类似的插件,有这么几个小问题:
    1.请问规划好如何保存呢?保存后如何修改呢?再启动rviz的时候如何执行已经存好的动作呢?
    2.我看您PPT上将很多动作归到一个大类,这是怎样实现的?
    3.由于没用过qt这个插件是用的qt的什么控件呢?
    新手上路烦请您指导一下~谢谢!

    • 古月

      古月 回复

      @阳仔 我们使用xml文件做保存和解析。
      这个是用Qt的树形控件实现的,可以参考Qt该插件的使用方法。

  15. Gravatar 头像

    海漩涡 回复

    月哥 你知道有足式机器人控制算法库吗 比如实现了 zero moment point 算法

  16. Gravatar 头像

    莫波 回复

    古月大神,您好,再次请教。本人在安装moveit!的时候(sudo apt-get ros-indigo-moit-full)出现部分文件不能下载,提示如下:
    E: 无法下载 http://packages.ros.org/ros/ubuntu/pool/main/r/ros-indigo-moveit/ros-indigo-moveit_0.7.12-0trusty-20170915-202331-0800_amd64.deb 404 Not Found [IP: 140.211.166.134 80]
    E: 无法下载 http://packages.ros.org/ros/ubuntu/pool/main/r/ros-indigo-moveit-full/ros-indigo-moveit-full_0.7.12-0trusty-20170915-202717-0800_amd64.deb 404 Not Found [IP: 140.211.166.134 80]
    然后本人按照错误提示的路径寻找该文件,发现该文件版本已经更新,文件名称已更新为:
    ros-indigo-moveit_0.7.12-0trusty-20171113-195640-0800_amd64.deb

    然后本人在网上查找资料,说是ubuntu的debian版本过低之类的原因,使用sudo apt-get update更新即可。但使用该指令时又出现另一个错误:
    W: 无法下载 http://packages.ros.org/ros/ubuntu/dists/trusty/main/binary-amd64/Packages Hash 校验和不符
    W: 无法下载 http://packages.ros.org/ros/ubuntu/dists/trusty/main/binary-i386/Packages Hash 校验和不符
    注:由于之前要安装xenomai,故将ubuntu14.04的原linux版本4.4更换为3.14.17,不知道与该错误是否有关系。本人是先更换内核,然后再安装的ROS。谢谢。

    • 古月

      古月 回复

      @莫波 可以更换几个软件源试试,可以用易科实验室的镜像源,比较快

  17. Gravatar 头像

    赵晓贺 回复

    你好,我按照您的步骤做,在运行launch后,出现 错误:
    ResourceNotFound(name, ros_paths=self._ros_paths)
    ResourceNotFound: mastering_ros_robot_description_pkg
    ROS path [0]=/opt/ros/kinetic/share/ros
    ROS path [1]=/home/ubuntuhe/dev/xiaohe_ws/src
    ROS path [2]=/opt/ros/kinetic/share
    不知如何解决

    • 古月

      古月 回复

      @赵晓贺 找不到mastering_ros_robot_description_pkg功能包,检查一下环境变量以及功能包是否存在

    • Gravatar 头像

      麦橙 回复

      @赵晓贺 你好,遇到相同的问题,请问解决了吗?

  18. Gravatar 头像

    为木 回复

    你好,古月大神,怎么用moveit实现机器人的抓取操作呢,望解答

    • 古月

      古月 回复

      @为木 你好,ROS里有抓取相关的功能包,可以参考《ROS by example 2》和《Mastering ROS for robotics programming》书里的内容,有很详细的讲解

      • Gravatar 头像

        李胜飞 回复

        @古月 胡老师您好,我在学习了您的这篇指南并且听了您的直播之后,编写了自己的goToStartMovementPosition()函数:
        bool TrajectoryJointInterpolation::goToStartMovementPosition(){
        geometry_msgs::PoseStamped target_pose;
        target_pose.header.frame_id = "arm_base_link";
        target_pose.pose.orientation.x = -0.231428;
        target_pose.pose.orientation.y = 0;
        target_pose.pose.orientation.z = 0;
        target_pose.pose.orientation.w = 0.972852;
        target_pose.pose.position.x = 0.0;
        target_pose.pose.position.y = -1;
        target_pose.pose.position.z = 1.8;
        plan_group->setPoseTarget(target_pose);
        moveit::planning_interface::MoveGroup::Plan my_plan;
        bool success = plan_group->plan(my_plan);
        moveit::planning_interface::MoveItErrorCode error;
        controlerActive = true;
        error = plan_group->execute(my_plan);
        controlerActive = false;
        return checkerrorcode(error);
        }
        结果报错:Unable to sample any valid states for goal tree。但是我的另一个函数goToFoldedPosition()
        bool TrajectoryJointInterpolation::goToFoldedPosition(){
        std::vector group_variable_values;
        group_variable_values.resize(5);
        group_variable_values[0]= 0;
        group_variable_values[1]= -3.1;
        group_variable_values[2]= 3.1;
        group_variable_values[3]= -1.5;
        group_variable_values[4]= 0;
        if(!plan_group->setJointValueTarget(group_variable_values)) {
        return false;
        }
        moveit::planning_interface::MoveItErrorCode error;
        controlerActive = true;
        error = plan_group->move();
        controlerActive = false;
        // std::cout<getCurrentPose()<<std::endl;
        return checkerrorcode(error);
        }
        却可以正常运行执行动作,这是为什么呢?

        • 古月

          古月 回复

          @李胜飞 一个是逆运动学,一个是正运动学,应该是逆运动学无法求解报错

发表评论

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