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

  • 内容
  • 评论
  • 相关

?

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

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

以下是课程PPT内容:


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

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

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

评论

134条评论
  1. Gravatar 头像

    kpl 回复

    古月老师您好,我在使用moveit的demo.launch的时候rviz里不显示机器人,只有一个基础坐标系的圆盘
    代码显示:
    [warn]No geometry is associated to any robot links
    [ WARN] [1552784891.866350841]: No transform available between frame 'odom_combined' and planning frame '/odom' ()
    [ INFO] [1552784909.502505045]: Stopping scene monitor
    [ INFO] [1552784909.502557220]: Starting scene monitor
    [ INFO] [1552784909.505898693]: Listening to '/move_group/monitored_planning_scene'
    [ WARN] [1552784909.507641217]: No transform available between frame 'odom_combined' and planning frame '/odom' ()
    [ INFO] [1552785645.505176574]: No active joints or end effectors found for group 'head'. Make sure you have defined an end effector in your SRDF file and that kinematics.yaml is loaded in this node's namespace.
    [ INFO] [1552785645.514141229]: No active joints or end effectors found for group 'head'. Make sure you have defined an end effector in your SRDF file and that kinematics.yaml is loaded in this node's namespace.
    [ INFO] [1552785734.493201316]: No active joints or end effectors found for group 'head'. Make sure you have defined an end effector in your SRDF file and that kinematics.yaml is loaded in this node's namespace.
    [ INFO] [1552785734.503312312]: No active joints or end effectors found for group 'head'. Make sure you have defined an end effector in your SRDF file and that kinematics.yaml is loaded in this node's namespace.
    问题出在哪了呢?
    ps:我试着重新进行配置,但在编辑planning group时一旦点击save程序窗口就变黑不可操作
    REQUIRED process [moveit_setup_assistant-2] has died!
    process has died [pid 15736, exit code -11, cmd /opt/ros/indigo/lib/moveit_setup_assistant/moveit_setup_assistant __name:=moveit_setup_assistant __log:=/home/sut-lsr/.ros/log/f72ffc9e-485a-11e9-98bc-f85971794c8a/moveit_setup_assistant-2.log].
    log file: /home/sut-lsr/.ros/log/f72ffc9e-485a-11e9-98bc-f85971794c8a/moveit_setup_assistant-2*.log
    Initiating shutdown!
    =======================
    望古月老师不吝赐教

    • 古月

      古月 回复

      @kpl 不确定是什么问题,重装moveit试下

  2. Gravatar 头像

    张kanno 回复

    老师好,我跑奥博真实机械臂用这个代码roslaunch aubo_new_driver aubo_i5_ros_control.launch robot_ip:=192.168.137.200
    然后出现了以下错误,ERROR: cannot launch node of type [aubo_new_driver/aubo_new_driver]: can't locate node [aubo_new_driver] in package [aubo_new_driver]。。。。。。这是怎么回事啊

    • Gravatar 头像

      lin 回复

      @张kanno 你好,我也用aubo机械臂,也遇到了类似问题,不知道你解决没有。方便的话加一下微信,一起学习交流。微信号:L13509335238

  3. Gravatar 头像

    ZK 回复

    古月老师,您好。 想请问下,我想用两个单臂做一个双臂的系统,原本的单臂官方给了用moveit控制实际机械臂的launch。双臂的模型我自己写了下,然后使用moveit配置工具生成了配置包,想要真实控制两个臂,不能使用demo.launch,于是我按照一个教程修改了demo.launch文件,执行execute还是不能让真实的机械臂运动。请问应该怎么修改或编写launch文件能同时控制两个机械臂呢。

    • 古月

      古月 回复

      @ZK 可以参考pr2机器人的相关功能

      • Gravatar 头像

        ZK 回复

        @古月 古月老师,我在github上看了下moveit_pr2包,上面也都是仿真的啊,没有怎么控制真实机械臂的,请问有什么可以参考的 您能贴个链接吗?

        • 古月

          古月 回复

          @ZK google或github搜吧,都是以pr2开头的,有ethercat等底层相关包的

  4. Gravatar 头像

    ZY 回复

    老师,请问Joint Trajectory Action Controller提供的1次、3次、5次样条插值,比如我要5次,这个要怎么配置

  5. Gravatar 头像

    回复

    古月老师你好,我现在想在moveit规划机械臂的轨迹时,points只包含关节角的positon,如果我想记录每个在points末端的位置(position),而不是关节角的该怎么做呢?

    • 古月

      古月 回复

      @邹 读取tf即可获取任意关节和末端的位姿

      • Gravatar 头像

        回复

        @古月 恩,我一般时用rosrun tf tf_echo来各个末端的位姿。但是我现在想绘制机械臂末端的实时轨迹,但是有两个问题:
        1.rviz里有show trail,但是它只能显示一段轨迹,运行多段的话前面的轨迹就会消失,所以我准备用marker自己画
        2.用marker自己画却没有跟末端轨迹相关的话题来输出末端位姿,只能用rosrun tf tf_echo获取的末端位姿,但是获取的只是在终端显示的,我不知道该怎样将终端显示的信息获取到我的程序里?因为它并不是一个话题,不能直接订阅。

        • 古月

          古月 回复

          @邹 可以自己写一个节点,监听tf并发布一个自定义的话题

  6. Gravatar 头像

    进击的苏联 回复

    古月老师好,今天测试了一款7自由度机器人,在与gazebo联合仿真的时候总是报错
    ABORTED: Solution found but controller failed during execution
    gazebo中的机器人执行器也没有随着moveit设定的轨迹随动,请问怎么解决??

      • Gravatar 头像

        进击的苏联 回复

        @古月 我在rviz中拖动是没有问题的,但是gazebo就是运行不了,感觉不是逆运动学的问题?

          • Gravatar 头像

            进击的苏联 回复

            @古月 多谢古月老师,确实在controller配置错误,多谢指点

  7. Gravatar 头像

    大力 回复

    胡老师,我安照书上的moveit教程把代码都跑过,但是我想通过moveit去控制真实的机械臂.
    我有几个直流电机,我之前都是通过can总线发布指令控制的.
    如果我想用用moveit去联通can总线控制电机,有什么资料推荐一下吗?
    ros_canopen上面资料和信息太少了,都不知道怎么连接到can网

    • 古月

      古月 回复

      @大力 这块的资料确实比较少,目前我已知的也是ros_canopen,或者自己写can总线的驱动,来接收moveit输出的轨迹

      • Gravatar 头像

        大力 回复

        @古月 好的,谢谢胡老师

      • Gravatar 头像

        大力 回复

        @古月 胡老师,你的功夫插的机械臂是用什么来控制的啊?有简单的案例能参照的吗?我想自己驱动真实的机械臂?

  8. Gravatar 头像

    chenlong 回复

    老师,您好,moveit规划的轨迹如何实现点动控制ur5,能给点意见?谢谢!我的邮箱394431341@qq.com

  9. 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,请问这可能是什么原因导致的呢?

  10. Gravatar 头像

    范中磊 回复

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

      • Gravatar 头像

        范中磊 回复

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

        • 古月

          古月 回复

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

  11. Gravatar 头像

    徐松 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        徐松 回复

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

        • 古月

          古月 回复

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

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

  13. Gravatar 头像

    leslie 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        leslie 回复

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

        • 古月

          古月 回复

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

  14. 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节点

            • Gravatar 头像

              cyr 回复

              @Kalen 我尝试发布结果问题仍然存在,解决方案能够更详细一些吗?

  15. Gravatar 头像

    李建华 回复

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

    • 古月

      古月 回复

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

  16. Gravatar 头像

    lh 回复

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

    • 古月

      古月 回复

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

  17. Gravatar 头像

    陈盟 回复

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

    • 古月

      古月 回复

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

  18. Gravatar 头像

    lh 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        lh 回复

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

        • Gravatar 头像

          lh 回复

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

          • Gravatar 头像

            lh 回复

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

      • Gravatar 头像

        徐松 回复

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

        • 古月

          古月 回复

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

  19. Gravatar 头像

    姚楚阳 回复

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

  20. Gravatar 头像

    李逸 回复

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

    • 古月

      古月 回复

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

  21. Gravatar 头像

    高颜 回复

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

    • 古月

      古月 回复

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

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

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

    • Gravatar 头像

      陈鹏 回复

      @lh 请问这个问题如何解决的?

  24. Gravatar 头像

    水清 回复

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

    • Gravatar 头像

      李胜飞 回复

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

      • Gravatar 头像

        水清 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        水清 回复

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

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

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

      • Gravatar 头像

        张国荣 回复

        @古月 /opt/ros/indigo/include/ros/time.h:187:31: required from here
        /usr/include/c++/4.8/bits/stl_algobase.h:380:57: error: no type named ‘value_type’ in ‘struct std::iterator_traits’
        typedef typename iterator_traits::value_type _ValueTypeI;
        ^
        /usr/include/c++/4.8/bits/stl_algobase.h:381:57: error: no type named ‘value_type’ in ‘struct std::iterator_traits’
        typedef typename iterator_traits::value_type _ValueTypeO;
        ^
        /usr/include/c++/4.8/bits/stl_algobase.h:382:64: error: no type named ‘iterator_category’ in ‘struct std::iterator_traits’
        typedef typename iterator_traits::iterator_category _Category;
        ^
        /usr/include/c++/4.8/bits/stl_algobase.h:386:9: error: no type named ‘value_type’ in ‘struct std::iterator_traits’
        && __are_same::__value);
        ^
        /usr/include/c++/4.8/bits/stl_algobase.h:389:70: error: no type named ‘iterator_category’ in ‘struct std::iterator_traits’
        _Category>::__copy_m(__first, __last, __result);
        ^
        make[2]: *** [learning_communication/CMakeFiles/talker.dir/src/talker.cpp.o] 错误 1
        make[1]: *** [learning_communication/CMakeFiles/talker.dir/all] 错误 2
        make: *** [all] 错误 2
        Invoking "make -j4 -l4" failed
        老师,你好!你知道我这个错误怎么解决吗?我这就执行了一下catkin_make

        • 古月

          古月 回复

          @张国荣 源码和配置文件都没有修改么?哪个版本的ROS?

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

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

  29. Gravatar 头像

    yazhouren 回复

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

    • 古月

      古月 回复

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

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

  31. Gravatar 头像

    徐松 回复

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

    • 古月

      古月 回复

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

  32. Gravatar 头像

    李锐 回复

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

    • 古月

      古月 回复

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

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

  34. Gravatar 头像

    阳仔 回复

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

    • 古月

      古月 回复

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

  35. Gravatar 头像

    海漩涡 回复

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

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

    • 古月

      古月 回复

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

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

      麦橙 回复

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

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

        • 古月

          古月 回复

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

发表评论

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

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