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

  • 内容
  • 评论
  • 相关

 

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

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

以下是课程PPT内容:


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

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

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

评论

103条评论
  1. Gravatar 头像

    赵修宇 回复

    古月大大您好!我在turtlebot2上使用turtlebotArm时,先运行roslaunch turtlebot_bringup mininal.launch和roslaunch turtlebot_arm_bringup arm.launch --screen后,再运行roslaunch turtlebot_arm_moveit_config turtlebot_arm_moveit.launch sim:=false --screen会报错“Joint 'wheel_right_joint' not found in model 'turtlebot_arm'”,turtlebot2和turtlebotArm分开运行都没有问题,同时运行就会这样,请问这个问题应该怎么解决呢?

    • 古月

      古月 回复

      @赵修宇 检查下是不是wheel_right_joint在两个模型里都有,如果是的话会有冲突

      • Gravatar 头像

        赵修宇 回复

        @古月 感谢古月大大回复!我看了一下两个模型,wheel_right_joint只在kobuki的模型里有,但是在启动的时候,貌似去了turtlebotArm模型里去找wheel_right_joint,请问这可能是什么原因导致的呢?

  2. Gravatar 头像

    范中磊 回复

    老师您好,在moveit中应该怎么添加料堆的场景啊?比如工况上堆垛的沙堆?这个场景文件怎么编写啊

      • Gravatar 头像

        范中磊 回复

        @古月 麻烦老师了,场景只能由编写的场景文件导入吗?能不能由其他软件直接生成啊

        • 古月

          古月 回复

          @范中磊 可以用solidworks导出成urdf,或者用三维设计软件导出dae文件

  3. Gravatar 头像

    徐松 回复

    请问古月老师,在rviz中,机械臂末端连杆的轨迹可以显示出来,但是我想将机械臂运动过程中,末端连杆的位置数据(就是xyz和xyzw,不是各关节状态数据)导出成文本,请问古月老师知道怎么获取末端连杆的位置数据吗?十分感谢!

    • 古月

      古月 回复

      @徐松 通过tf是可以获取这个轨迹的实时数据的,然后用终端输出重定向到文本,或者写个节点保存文件,都可以实现

      • Gravatar 头像

        徐松 回复

        @古月 感谢古月老师百忙中的回复,在topic: /tf里记录的都是旋转平移的数据,那么要想获取末端连杆的轨迹数据,是通过tf里的旋转平移计算的呢,还是说直接就能获取到?

        • 古月

          古月 回复

          @徐松 机器人末端的tf连在一起不就是轨迹数据么,需要自己记录,只需要xyz的话就只记录xyz

  4. Gravatar 头像

    王勇 回复

    老师,我想做一个关于采摘机器人的路径规划。。以最短路径为目标,完成采摘果实的功能。。想问一下:用ros+moveit可以吗?。从今天开始要常驻老师博客了。。

    • 古月

      古月 回复

      @王勇 可以的,moveit可以实现路径规划的功能

      • Gravatar 头像

        王勇 回复

        @古月 运行 roslaunch demo.launch时候出现下面的问题
        (day2/dir/launch这是文件的路径)。。urdf文件是自带一个双轴的机器
        Invalid tag: dir
        ROS path [0]=/opt/ros/indigo/share/ros
        ROS path [1]=/opt/ros/indigo/share
        ROS path [2]=/opt/ros/indigo/stacks.

        Arg xml is
        The traceback for the exception was written to the log file

        • 古月

          古月 回复

          @王勇 运行的命令中间少了功能包的名字吧,而且工作空间的环境变量也没设置

      • Gravatar 头像

        王勇 回复

        @古月 请问老师:
        运行roslaunch demo.launch出现下面的问题:
        (保存的路径是day2/dir/launch)urdf文件是自带的一个双轴机器
        Invalid tag: dir
        ROS path [0]=/opt/ros/indigo/share/ros
        ROS path [1]=/opt/ros/indigo/share
        ROS path [2]=/opt/ros/indigo/stacks.

        Arg xml is
        The traceback for the exception was written to the log file

      • Gravatar 头像

        马世超 回复

        @古月 古月老师你好,请问 error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in initialization
        bool success = ptr_group->plan(my_plan)怎么改啊,网上描述的不详细,希望能得到你的帮助,谢谢

        • 古月

          古月 回复

          @马世超 数据类型不一致,把bool改成moveit::planning_interface::MoveItErrorCode

  5. Gravatar 头像

    leslie 回复

    胡老师,我让自己配置好的机械比去一个位姿点,总是提示no motion plan found. no execution attempted.是什么原因啊,他明明可以到那个点啊

    • 古月

      古月 回复

      @leslie 有可能是运动学求解器算不出来,默认的KDL效率不高,可以换一个,参考:http://www.guyuehome.com/1921

      • Gravatar 头像

        leslie 回复

        @古月 换过了,还是不行,看到有人遇到相似的问题猜想是模型问题,关节溢出什么的

        • 古月

          古月 回复

          @leslie 那应该就是模型的问题了,我用fastik和tracik求解成功率很高的

  6. Gravatar 头像

    Kalen 回复

    您好,古月老师,我参照您的教程写了一个通过moveit规划然后下发规划角度控制实物的程序,使用的是FollowJointTrajectoryAction,进行规划结果的获取,在通过虚拟关节进行规划输出时没有问题,但将虚拟关节设置为false即后,当完成角度规划进行输出后,机械臂能按照规划运动但机械臂本身的起始姿态不会改变,即使运行group.setStartState(*group.getCurrentState()),下一次规划的起点还是最开始的姿态,无法以规划后的最终姿态为规划起始姿态,这个问题困扰了我很久,望解答。

    • 古月

      古月 回复

      @Kalen 虚拟关节不是在setup assistant过程中配置的么,建议重新配置一遍

      • Gravatar 头像

        Kalen 回复

        @古月 古月老师,我的虚拟关节是通过setup assistant配置的,我按照您的教程和官网教程重新配置了一遍,但问题还是依然存在,我是按照《ros by example vol 2》进行编写的,运行配置好文件夹中的move_group和rviz后,通过自己编写的FollowJointTrajectoryAction节点进行规划角度的接收,我也能顺利获得规划后的角度,但每一次规划的起点都是最开始的姿态而不是规划后的最终姿态,在每一次规划前我也都设置将当前姿态设置为起始姿态,但依然无效。

        • 古月

          古月 回复

          @Kalen 规划有执行么?就是运行execute()。执行成功后机器人才会运动到新的状态。

          • Gravatar 头像

            Kalen 回复

            @古月 谢谢古月老师回答,问题已经解决了,我的运动都是有执行的,问题在于控制实体机械臂的时候需要将机械臂的姿态发布到/joint_states话题中,否则不会更新moveit中的初始姿态,在使用MoveItFakeControllerManager时,move_group会把机械臂姿态发布到/joint_states话题,所以运行正常,改用MoveItSimpleControllerManager后就需要进行编写发布,我通过把机械臂姿态发布到/joint_states话题中后可以以规划后的最终姿态为规划的起点,我把解决方案写在这里,方便以后学习的人遇到同样问题可以快速解决。

            • 古月

              古月 回复

              @Kalen 是的,需要启动一个joint_states_publisher节点

  7. Gravatar 头像

    李建华 回复

    古月老师,您好。我想问个问题就是,怎样实现仿真的机械臂和实际的机械臂进行同步呀,我从话题中/execute_trajectory/goal能得到规划的路径点,然后下发给实际的机械臂进行运动,但是这个时候仿真的机械臂已经运动到了目标点了,因为得到/execute_trajectory/goal这个消息,就一定要在moveit里面执行execute. 我看很多演示的视频,都可以实现两者的同步,所以想问问古月老师,谢谢了。

    • 古月

      古月 回复

      @李建华 你说的仿真机械臂是rviz中的么?如果要控制真实机器人的话,不能用demo.launch。moveit规划路径后,通过action接口和控制器连接,控制器不断反馈机械臂的状态,rviz只是显示作用,这样才能保证同步。

  8. Gravatar 头像

    lh 回复

    老师,又麻烦您了,为什么运行demo.launch后有的机器人又前面那个拖动球可以直接拖动规划,有的运行后则没有呢,没有的话怎么弄出这个东西来呢

    • 古月

      古月 回复

      @lh 检查一下fix frame设置的是不是base link

  9. Gravatar 头像

    陈盟 回复

    胡老师,您好。我现在在做机械臂运动规划相关内容,打算借助moveit平台进行开发,要求规划的机械臂运动完全满足一定的约束条件,约束条件在工作空间内进行描述,具体来说,约束是对机械臂末端工具坐标系相对于某个世界坐标系RPY角的范围约束,虽然moveit_msgs中定义了几种约束(位置约束、姿态约束(四元数)、可视约束、关节约束),但是定义的几种约束与自己的约束有差别,估计需要自定义了,现在moveit官网教程只提供了一个“Creating Custom Constraint Samplers”教程,但是并不能找到所谓的“hrp2jsk_moveit_plugins/hrp2jsk_moveit_constraint_sampler_plugin”也就无法参考修改,现在感觉无从下手啊,不知道胡老师了解相关内容不,或者曾经接触过一定的实例可供参考?如果胡老师能指点一下的话,万分感谢!

    • 古月

      古月 回复

      @陈盟 不好意思,这方面还没有接触过,没办法给你什么建议了,google找找

  10. Gravatar 头像

    lh 回复

    老师,请教一下,在进行笛卡尔运动规划时,您机器人末端轨迹显示出来了,怎么弄出来的呢,就是PPT中笛卡尔运动规划那张图,另外设计RVIZ人机界面有相关教程吗?

    • 古月

      古月 回复

      @lh 终端轨迹使用robotmodel显示的,在终端link里有一个trail选项,选中就可以了。设计rviz人机界面的简单教程本博客上有,可以在上边扩展,主要是qt编程。

      • Gravatar 头像

        lh 回复

        @古月 谢谢老师,还有个问题请教您,我在有些文献上看到在运行demo.launch进行点到点路径规划时,中间的过程会显示出来,就是过程中比如有十个路径点,这十个路径点对应的机器人状态全部显示出来了,不知道怎么弄出来的。

        • Gravatar 头像

          lh 回复

          @lh 就是轨迹运动动态图,点到点运动,中间过程会显示出来

          • Gravatar 头像

            lh 回复

            @lh 找到了找到了,应该自己先看一下的

      • Gravatar 头像

        徐松 回复

        @古月 那么请问古月老师,轨迹的坐标可以输出到文本吗?请指教。

        • 古月

          古月 回复

          @徐松 通过tf是可以获取这个轨迹的实时数据的,然后用终端输出重定向到文本,或者写个节点保存文件,都可以实现

  11. Gravatar 头像

    姚楚阳 回复

    老师,启动launch文件motionplanning这个插件启动不了什么原因?

  12. Gravatar 头像

    李逸 回复

    老师,请问能分享一下这个机器人的相关文件吗,我用来学习,小白就学机械臂但是自己目前还不会编写xacro等文件,谢谢。如有不便,抱歉打扰。1047202716@qq.com

    • 古月

      古月 回复

      @李逸 建议先从ROS基础开始学起,找一本ROS的教程(最好是英文的),然后照着教程上的例程实验,并且学习代码的实现。这里使用的机器人是从《Mastering ROS for Robotics Programming》这本书里改过来的,可以看下这本书。

  13. Gravatar 头像

    高颜 回复

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

    • 古月

      古月 回复

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

  14. 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版本

  15. 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后边

  16. Gravatar 头像

    水清 回复

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

    • Gravatar 头像

      李胜飞 回复

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

      • Gravatar 头像

        水清 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        水清 回复

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

  17. 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类型。

  18. 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

  19. 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》那本书的源码下载对照一下,我也是用的书里的源码。

  20. 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/

  21. Gravatar 头像

    yazhouren 回复

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

    • 古月

      古月 回复

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

  22. 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里也是有的,可以参考。

  23. Gravatar 头像

    徐松 回复

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

    • 古月

      古月 回复

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

  24. Gravatar 头像

    李锐 回复

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

    • 古月

      古月 回复

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

  25. 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
    请问有没有果类似问题?

  26. Gravatar 头像

    阳仔 回复

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

    • 古月

      古月 回复

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

  27. Gravatar 头像

    海漩涡 回复

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

  28. 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。谢谢。

    • 古月

      古月 回复

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

  29. 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 头像

      麦橙 回复

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

  30. 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);
        }
        却可以正常运行执行动作,这是为什么呢?

        • 古月

          古月 回复

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

发表评论

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