ROS探索总结(五十二)—— MoveIt!中的运动学插件

  • 内容
  • 评论
  • 相关

MoveIt!是ROS中一个重要的集成化开发平台,由一系列移动操作的功能包组成,提供运动规划、操作控制、3D感知、运动学等功能模块,是ROS社区中使用度排名前三的功能包,目前已经支持众多机器人硬件平台。

1

MoveIt!中的众多功能都使用插件机制集成,其中有一个重要的功能模块——运动学插件。

2

今天我们就来聊下MoveIt!中的运动学求解器。

 

一、KDL

Kinematics and Dynamics Library (KDL)是MoveIt!中的默认运动学插件,在使用MoveIt! Setup Assistant进行模型配置时,可以进行配置。

3

配置完成后,就可以运行demo.launch控制虚拟机械臂进行运动规划了。但是KDL有自己的优缺点:

4

比如一次逆解的求解时间:0.062192秒。。。

5

很多时候我们在做运动规划的时候,MoveIt!经常会提示规划失败、求解失败等错误,很多都是因为KDL这款运动学插件导致的,那么问题就来了——能不能更换一个运动学插件?

当然可以,以下介绍两个用的最多的运动学插件:TRAC-IK和IKFAST。

 

二、TRAC-IK

TRAC-IK和KDL类似,也是一种基于数值解的运动学插件,但是在算法层面上进行了很多改进,求解效率高了很多。比如在下边这张图中,左侧的红点是KDL无法求解的姿态点,但是在右侧使用TRAC-IK是可以求解的。

6

那么如何将KDL更换成TRAC-IK呢,方法很简单,ROS的软件源中已经集成了TRAC-IK的安装包,可以直接使用以下命令安装:

  1. sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin

然后修改机械臂MoveIt!配置功能包下的kinematics.yaml文件就可以使用啦:

  1. arm:
  2.   kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
  3.   kinematics_solver_attempts: 3
  4.   kinematics_solver_search_resolution: 0.005
  5.   kinematics_solver_timeout: 0.05

接下来再次运行demo.launch,默认加载的就是TRAC-IK运动学插件了,试试规划求解的效率是不是高了很多!

但是TRAC-IK也有问题,它是一种数值算法,每次求解得到的关节位置不一定相同。

 

三、IKFAST

IKFAST是一种基于解析算法的运动学插件,可以保证每次求解的一致性。

7

相比KDL和TRAC-IK,IKFAST的安装过程就比较复杂了,不过就笔者的使用经验来讲,IKFAST的效果还是很推荐的,所以不妨一试,以下就是IKFAST的安装配置过程。

  • 安装程序:

  1. sudo apt-get install cmake g++ git ipython minizip python-dev python-h5py python-numpy python-scipy qt4-dev-tools
  • 安装依赖库:

  1. sudo apt-get install libassimp-dev libavcodec-dev libavformat-dev libavformat-dev libboost-all-dev libboost-date-time-dev libbullet-dev libfaac-dev libglew-dev libgsm1-dev liblapack-dev liblog4cxx-dev libmpfr-dev libode-dev libogg-dev libpcrecpp0v5 libpcre3-dev libqhull-dev libqt4-dev libsoqt-dev-common libsoqt4-dev libswscale-dev libswscale-dev libvorbis-dev libx264-dev libxml2-dev libxvidcore-dev
  • 安装OpenSceneGraph-3.4:

  1. sudo apt-get install libcairo2-dev libjasper-dev libpoppler-glib-dev libsdl2-dev libtiff5-dev libxrandr-dev
  2. git clone https://github.com/openscenegraph/OpenSceneGraph.git --branch OpenSceneGraph-3.4
  3. cd OpenSceneGraph
  4. mkdir build; cd build
  5. cmake .. -DDESIRED_QT_VERSION=4
  6. make -j$(nproc)
  7. sudo make install
  • 安装sympy

  1. pip install --upgrade --user sympy==0.7.1
  • 删除mpmath

  1. sudo apt remove python-mpmath
  • 安装IKFast功能包

  1. sudo apt-get install ros-kinetic-moveit-kinematics
  • 安装OpenRave

  1. sudo apt-get install ros-kinetic-openrave
  • 创建collada文件

  1. export MYROBOT_NAME="marm"
  2. rosrun xacro xacro --inorder -o "$MYROBOT_NAME".urdf "$MYROBOT_NAME".xacro    
  3. rosrun collada_urdf urdf_to_collada "$MYROBOT_NAME".urdf "$MYROBOT_NAME".dae<br></font>

  • 创建dae文件

  1. export IKFAST_PRECISION="5"
  2. cp "$MYROBOT_NAME".dae "$MYROBOT_NAME".backup.dae # create a backup of your full precision dae.
  3. rosrun moveit_kinematics round_collada_numbers.py "$MYROBOT_NAME".dae "$MYROBOT_NAME".dae "$IKFAST_PRECISION"
  • 查看生成的模型

  1. openrave-robot.py "$MYROBOT_NAME".dae --info links

8

  1. openrave "$MYROBOT_NAME".dae

9

  • 生成六轴机器人配置

  1. export PLANNING_GROUP="arm"
  2. export BASE_LINK="1"
  3. export EEF_LINK="11"
  4.  
  5. export IKFAST_OUTPUT_PATH=`pwd`/ikfast61_"$PLANNING_GROUP".cpp
  6.  
  7. python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --savefile="$IKFAST_OUTPUT_PATH"
  • 创建插件

  1. export MOVEIT_IK_PLUGIN_PKG="$MYROBOT_NAME"_ikfast_"$PLANNING_GROUP"_plugin
  2. cd ~/catkin_ws/src
  3. catkin_create_pkg "$MOVEIT_IK_PLUGIN_PKG"
  4. rosrun moveit_kinematics create_ikfast_moveit_plugin.py "$MYROBOT_NAME" "$PLANNING_GROUP" "$MOVEIT_IK_PLUGIN_PKG" "$IKFAST_OUTPUT_PATH"
  • 重新编译工作空间

  1. catkin_make
  • 修改使用的插件

  1. rosed "$MYROBOT_NAME"_moveit_config/config/kinematics.yaml
  2.  
  3. <planning_group>:
  4. kinematics_solver: <myrobot_name>_<planning_group>_kinematics/IKFastKinematicsPlugin
  5. -INSTEAD OF-
  6. kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin

注意以上步骤中的机器人名称、运动规划组名称、坐标系序号等需要和自己所使用的机器人匹配,也可以参考官方教程配置:

http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html

现在运行demo.launch文件时,使用的运动学插件就是IKFAST了,快试一试效果是不是还不错!


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

本文链接地址: ROS探索总结(五十二)—— MoveIt!中的运动学插件

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

评论

109条评论
  1. Gravatar 头像

    ikea 回复

    老师我在步骤 python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --freeindex="$FREE_INDEX" --savefile="$IKFAST_OUTPUT_PATH"这儿
    最后显示
    Traceback (most recent call last):
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 9587, in
    ……
    mpmath.libmp.libhyper.NoConvergence: Didn't converge in maxsteps=50 steps.
    没能生成cpp文件

  2. Gravatar 头像

    牛大 回复

    古老师你好,我按书上10.9的教程,在版本melodic上进行机械臂的工作空间编程,会warn: IK plugin for group 'left' relies on deprecated API. Please implement initialize(RobotModel, ...). 但是机械运动没什么问题,也能求解和规划运动。这个警告是啥问题

    • 古月

      古月 回复

      @牛大 这个没影响,是ros版本变化导致的,书里用的kinetic

      • Gravatar 头像

        牛大 回复

        @古月 我我ubuntu16.04更新成清华的源后,运行关节空间规划的py脚本会提示
        Failed to import pyassimp, see https://github.com/ros-planning/moveit/issues/86 for more info
        Traceback (most recent call last):
        File "/home/liu/catkin_ws/src/zongche1_planning/scripts/moveit_sss_demo.py", line 5, in
        import moveit_commander
        File "/opt/ros/kinetic/lib/python2.7/dist-packages/moveit_commander/__init__.py", line 4, in
        from .move_group import *
        File "/opt/ros/kinetic/lib/python2.7/dist-packages/moveit_commander/move_group.py", line 41, in
        from moveit_ros_planning_interface import _moveit_move_group_interface
        ImportError: libmoveit_robot_state.so.0.9.15: cannot open shared object file: No such file or directory
        之前按照书上写的关节空间及工作空间的脚本都运行不了了,请问下这是什么问题

  3. Gravatar 头像

    湖大小王 回复

    古月老师,您好!请问运行demo.launch时,IKFAST求解器求解的最优解还是多个解中的任意一个解?怎么使用setfromIK
    求解最优解呢?(当前状态最近的解)

    • 古月

      古月 回复

      @湖大小王 IKFAST会求解出所有可行解,然后选一个,不一定是最优解

      • Gravatar 头像

        湖大小王 回复

        @古月 好的,谢谢!那如果要用IKFAST求最优解,该怎么操作呢?

  4. Gravatar 头像

    魏小斌 回复

    您好古月老师,我运行 roslaunch marm_planning arm_planning.launch 与rosrun marm_planning moveit_fk_demo.py 将会报错arm_planning.launch报错:
    [ INFO] [1561607944.839560919]: Planner configuration 'arm' will use planner 'geometric::RRTConnect'. Additional configuration parameters will be set when the planner is constructed.
    [ WARN] [1561607944.845371336]: RRTConnect: Skipping invalid start state (invalid state)
    [ERROR] [1561607944.845746020]: RRTConnect: Motion planning start tree could not be initialized!
    [ INFO] [1561607944.846068642]: No solution found after 0.001195 seconds
    [ WARN] [1561607944.849700344]: Goal sampling thread never did any work.
    [ INFO] [1561607944.851752736]: Unable to solve the planning problem

    moveit_fk_demo.py输出信息为:
    [ INFO] [1561607939.197356765]: Loading robot model 'arm'...
    [ INFO] [1561607939.197608683]: No root/virtual joint specified in SRDF. Assuming fixed joint
    [ INFO] [1561607939.473369235]: Loading robot model 'arm'...
    [ INFO] [1561607939.473586573]: No root/virtual joint specified in SRDF. Assuming fixed joint
    [ WARN] [1561607939.474624987]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
    [ INFO] [1561607940.544355201]: Ready to take commands for planning group arm.
    [ INFO] [1561607940.911495851]: Ready to take commands for planning group gripper.
    [ INFO] [1561607944.854790731]: ABORTED: No motion plan found. No execution attempted.

      • Gravatar 头像

        郑俊 回复

        @古月 我每次运行的时候都是这样,那应该怎么解决呢?

  5. Gravatar 头像

    烟消云散 回复

    古月老师,你好,我最近在给7轴机械臂配置ikfast时出现了这样的问题:
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/base_dummy with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/base_link with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link0 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link1 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link2 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link3 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link4 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link5 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link6 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_Link7 with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)
    2019-05-30 10:37:20,545 openrave [WARN] [fclspace.h:249 FCLSpace::KinBodyInfoPtr fclrave::FCLSpace::InitKinBody] Initializing link wust_robot/L_ee with 0 geometries (env 1) (userdatakey fclcollision0x1a82c30)

    我确认fcl库,openrave都装了,dae模型,links都没有问题,我本来以为这是警告应该也不影响,可是终端就一直停在下面的界面上:
    openravepy.ikfast: solveFullIK_6D, ikfast 6d: [j0, j1, j3, j4, j5, j6]
    openravepy.ikfast: iterateThreeNonIntersectingAxes, found 3 consecutive non-intersecting axes links[0:7], vars=[j0, j1, j3]
    openravepy.ikfast: iterateThreeNonIntersectingAxes, found 3 consecutive non-intersecting axes links[2:9], vars=[j1, j3, j4]
    openravepy.ikfast: iterateThreeNonIntersectingAxes, found 3 consecutive non-intersecting axes links[6:11], vars=[j3, j4, j5]
    openravepy.ikfast: iterateThreeNonIntersectingAxes, found 3 consecutive non-intersecting axes links[8:13], vars=[j4, j5, j6]
    openravepy.ikfast: solveFullIK_6D, try first group 0/4

    请问古月老师知道这是为什么吗?

      • Gravatar 头像

        烟消云散 回复

        @古月 我已经发现问题了,因为ikfast是解析解法,而我的机器人的URDF文件里的基准轴和坐标系都是我在solidworks里画的,然后画的时候有误差导致相邻的三个坐标系不交于一点,求不出解析解,那我如果要修改的话是只能在solidworks里重新画吗?

  6. Gravatar 头像

    WJF 回复

    老师,你好!我最近根据你的probot_demo改写自己的控制程序,遇到了奇异点问题,请问在moveit中要怎么避开奇异点啊?

  7. Gravatar 头像

    牛大 回复

    古老师,我的一个双臂机器人,在moveit_setup_assistant里面配置了3个组,一个left,一个right,还有一个包含两个的both,我是想要实现两个臂的同时运动,因为规划一个left,一个right的话,他们是先动了一个再动另外一个。现在我运行的时候总是报错 This plugin only supports joint groups which are chains,请问在 moveit_setup_assistant应该是怎么配置的双臂那一组啊

  8. Gravatar 头像

    回复

    你好,古月老师。双臂怎么配置ik_fast呢,“生成六轴机器人配置”这一步总是报错,我的是七自由度的机械臂。有三个group,一个right_arm,一个left_arm,还有一个双臂关节都包含的dual_arm,需要给他们三个组都配置一遍么?我再给right_arm配置的时候,总是报错:need 6 joints。我改了好几次始末link的序号,都不行。这个怎么解决呢?

      • Gravatar 头像

        回复

        @古月 您好,古月老师。我的双臂ik_fast配置成功了,参考baxter进行的配置。但是出现了新的问题:ik_fast配置完成后,在rviz中进行拖动或随机生成进行plan&execution没有问题,但是之前按照您的视频编写的那些程序(moveit_ik_demo.py\moveit_cartesian_demo.py\moveit_obstacles_demo.py)都没法用了,都找不到motion plan。之前用kdl的时候这些程序都是好好的,改成ikfast之后就不行了。这是怎么回事呢?

        • 古月

          古月 回复

          @郭 具体原因不清楚,有可能是配置的问题

        • Gravatar 头像

          wjf 回复

          @郭 你好!我配置好ikfast,后,也出现了类似的情况,就是不能求逆解,请问你解决了吗?

        • Gravatar 头像

          ming 回复

          @郭 我猜测原因如下:
          kdl使用的是数值解,ikfast使用的是解析解。数值法逆解对于机器人的机械结构是没有要求的,解析法对与机器人结构有一些要求,具体看算法。如果你用的是异形机器人,或者D-H参数表有问题,可能会造成这个影响。

        • Gravatar 头像

          gan 回复

          @郭 请问双臂的是怎么配置呢?

        • Gravatar 头像

          gan 回复

          @郭 请问双臂的ik_fast是怎么配置呢?

          • Gravatar 头像

            ok 回复

            @gan 怎么配置双臂呀,我也遇到了这个问题

  9. Gravatar 头像

    zjy 回复

    古月大神你好,我做机械臂轨迹规划如果想脱离moveit自己做,因为moveit有一些局限性。但是又想用moveit里的一些东西,比如逆解插件TRAC-IK,IK-FAST以及OMPL算法这些,应该怎样调用呢?

    • 古月

      古月 回复

      @zjy 可以从相关的包里把算法源码提取出来,ompl本身就是开源库,和ROS是独立的

      • Gravatar 头像

        zjy 回复

        @古月 假设我要调用这些算法自己写轨迹规划,那就是需要提取OMPL(规划),TOPP(速度、时间这些)和逆解插件这些是吗?

        • 古月

          古月 回复

          @zjy 是的,需要调用这些算法的API接口

          • Gravatar 头像

            zjy 回复

            @古月 明白了,但是这些算法的API接口如何调用我不是很清楚,请问古月大神知道哪里有相关教程文档或者例子吗?

            • 古月

              古月 回复

              @zjy 主要看API文档,相关的例程google搜,应该不多

    • Gravatar 头像

      吴静远 回复

      @zjy 想问你最后成功了么,我看IKFAST好像是python写的,如果是c++是不是没办法直接调用API了

  10. Gravatar 头像

    薛棣棣 回复

    古月老师您好,我想问一下就是moveit给我们的是一条关节轨迹,在控制实际机器人时为什么还需要在控制器里面编写插补算法

    • 古月

      古月 回复

      @薛棣棣 这个轨迹是一系列路径点,可以叫做粗插补,周期比实际机器人控制周期大,在控制器内部还要根据控制周期进行一次细插补

      • Gravatar 头像

        薛棣棣 回复

        @古月 古月老师您好感谢您的回复,这个懂了,还有2个问题
        1、如果是在关节空间规划时,moveit给我们的是一条关节轨迹,我们在控制器里进行5次插补就能实现点到点的运动吧?
        2如果是笛卡尔空间规划,moveit给我们的应该是末端的一些路径点吧,我们在控制器里用什么插补算法?

        • 古月

          古月 回复

          @薛棣棣 1. 是的
          2. 笛卡尔空间规划给出的也是关节轨迹,只不过点会很多,已经过逆解

          • Gravatar 头像

            薛棣棣 回复

            @古月 如果我想让末端走直线的话,moveit给我的是关节轨迹该怎么做

              • Gravatar 头像

                薛棣棣 回复

                @古月 古月老师,这样的话用什么插补算法去插补

                • 古月

                  古月 回复

                  @薛棣棣 一样的,三次五次都可以,和关节空间的底层控制没差别

                  • Gravatar 头像

                    薛棣棣 回复

                    @古月 但是这样的话末端的轨迹还是直线吗?因为关节空间的话末端的轨迹是不确定的,可能我对笛卡尔空间规划的理解有问题

                    • 古月

                      古月

                      @薛棣棣 直线是相对的,规划的点越密集越逼近直线,两点之间都是通过插补完成的,毕竟机器人底层最终是要控制关节转动

      • Gravatar 头像

        薛棣棣 回复

        @古月 我的想法是在控制器里首先通过直线插补算法插补末端中间路径点,然后逆解算出每一时刻的关节角度,但感觉这样控制器的计算量很大。

        • Gravatar 头像

          吴静远 回复

          @薛棣棣 我觉得应该是可以的,至于计算量的话如果是用封闭解,例如IKFAST应该是够用的,机械臂的控制周期怎么都在毫秒级吧

  11. Gravatar 头像

    吴小文 回复

    大佬!您好!我想问一下我在用moveit控制实际机器人的时候经常遇到解求出来了但是执行失败,报: Controller handle robot_arm_controller reports status FAILED,这台工控机配置比较差,有时候仿真也会失败,但是我在另一台配置比较好的电脑上仿真不会有问题。这跟电脑配置会不会有很大关联。

    • 古月

      古月 回复

      @吴小文 moveit会实时监测机器人的姿态,计算慢的话,moveit是会报错的

  12. Gravatar 头像

    进击的苏联 回复

    古月老师您好,我在做moveit机械臂添加了kinect摄像头做避障运动,但在路径规划时经常出现Failed to validate trajectory: couldn't receive full current joint state请问知道如何解决。

  13. Gravatar 头像

    烟消云散 回复

    古月老师你好,我想问一下,OMPL规划轨迹时,是把轨迹点全部规划出来,再对每个点求机械臂的逆解,还是规划一个点求一个点的逆解呀?

      • Gravatar 头像

        烟消云散 回复

        @古月 哦,如果要比较MoveIt里的这几种逆解插件,OMPL轨迹规划的随机性会影响实验结果,可能需要脱离OMPL自己写规划器,那请问古月老师有这样的源码可以参考一下吗?

        • 古月

          古月 回复

          @烟消云散 不影响,ompl只是规划工作空间的轨迹,然后逆解插件求解关节角度,两个步骤是分开的。要自己写规划器的话,可以参考ROS中的ompl源码

          • Gravatar 头像

            烟消云散 回复

            @古月 谢谢古月老师,能否再问古月老师一个问题?https://tams.informatik.uni-hamburg.de/publications/2017/MSc_Philipp_Ruppel.pdf 这篇文章里,作者在机械臂工作空间内不停取点来求逆解,如果求解成功,则该点在rviz里显示绿点,如果求解失败,则显示红点,这样比较特别直观。用这种方法来比较逆解插件的成功率,想问一下古月老师知道这种方法怎样实现吗?

          • Gravatar 头像

            烟消云散 回复

            @古月 我的想法是写一个函数判断在某点的逆解求解是否成功,如果成功,则将该点标记绿色,如果失败,则标记为红色,但是我现在不知道这个函数应该怎么写,因为输出的日志信息都是IK求解函数内部输出的,单纯的工作空间点到点的规划也没有像笛卡尔规划里fraction那样的返回值。

              • Gravatar 头像

                烟消云散 回复

                @古月 古月老师你好,关于上次问的问题,我最近已经会用maker在rviz中显示点,但是还是不知道去哪里调用你说的IK算法的底层API来判断逆解求解是否成功,古月老师能否指点一下?

                • 古月

                  古月 回复

                  @烟消云散 参考ROS-I的wiki教程,有一个专门讲IKFAST的,先看下怎么样生成ikfast插件,然后会生成一些源码文件,其中有相关的接口

                  • Gravatar 头像

                    烟消云散 回复

                    @古月 非常感谢古月老师对我的问题的解答,我现在在做逆解插件的对比实验,我在机械臂工作空间内设置若干个采样点,然后配置三种运动学插件,写一个点到点规划(也就是您书上说的工作空间规划)的程序让机械臂末端运动到这些采样点进行测试,我却发现使用三种逆解插件结果都是一样的,机械臂末端都能到达所有的采样点,我之前看过几篇论文,里面也说道KDL求解成功率较低,但是我实验的时候跟TRAC-IK和IKFAST没有差别,不知道是什么原因,需要再深入研究一下。

                    • 古月

                      古月

                      @烟消云散 我没这样测试过,都是直接控制机械臂操作的,没具体统计过,但经验肯定是KDL求解器的成功率低,速度慢

                    • Gravatar 头像

                      猫小帅

                      @烟消云散 您好古月老师,IKFASTmeh可以适用在非球型手腕的机器人上吗?

                    • 古月

                      古月

                      @猫小帅 这个我不确定,请参考ikfast的官网介绍

                    • Gravatar 头像

                      吴静远

                      @烟消云散 你的实验是在非球形腕上做的吗,解出来如果结果正确那就说明可以用于非球形腕了

  14. Gravatar 头像

    回复

    古月老师您好,请问ROS里有没有办法记录和保存机械臂的运动轨迹呢?我知道rviz里的robotmodel可以Show Trail,但那只是显示实时轨迹,并不能记录和保存

    • 古月

      古月 回复

      @邹 ros可以实时发布joints_state,可以自己做一个节点订阅数据并保存

  15. Gravatar 头像

    van 回复

    古月老师,你好,最近在用ros驱动四自由度的机械臂,但是给它一个终点位姿它却老是无解,而且拖动交互式mark也没有动,甚至rviz会卡死,您知道是什么问题吗?

    • 古月

      古月 回复

      @van 用的哪个求解器,这种情况一般是求解器的问题,我用ikfast比较稳定

  16. Gravatar 头像

    廖亮 回复

    您好,古月老师!我想把自己写的路径规划算法添加到ompl库里面,有在知乎上面看见一篇介绍 的,其基本思想是把MoveIt和ompl都卸了,然后从源码安装,在ompl的源码里加入你的planner,然后安装ompl,然后在moveit中注册你的planner,然后在你的机械臂配置文件中添加planner信息,我有尝试过,实在太复杂了,而且目前还没有成功。想请教一下古月老师及各位,有没有简单一些的方法,希望不吝赐教,谢谢!

    • 古月

      古月 回复

      @廖亮 还有一种方法可以绕过插件这一步,直接通过自己的算法得到完整轨迹,封装成ROS的轨迹数据(位置、速度、加速度、时间),再通过execute来执行轨迹。

    • Gravatar 头像

      张亚宾 回复

      @廖亮 您好,您成功了吗?我也是有这样的想法,想向您讨教一下。

    • Gravatar 头像

      李娟 回复

      @廖亮 请问成功了吗?加入自己的planner这一步,我也是一直报错

  17. Gravatar 头像

    烟消云散 回复

    古月老师:
    这几天研究moveit我有个疑惑,比如我给机械臂定好了起点和终点,然后moveit用ompl规划出一条轨迹,然后moveit里的运动学插件求解轨迹上每个点机械臂的逆解,这样没错吧。既然是这样,那也就是说从起点到终点的轨迹是通过ompl采样规划出来的,轨迹跟运动学插件没关系,运动学插件只是用来求逆解的,那为什么我用KDL和IK-FAST时,同样用的ompl规划轨迹,IK-FAST却能保证每次轨迹一致?

    • 古月

      古月 回复

      @烟消云散 这个问题我也发现了,还没深究过,需要看下ompl的代码实现

    • Gravatar 头像

      nini 回复

      @烟消云散 您好,我最近在ubuntu16.04下安装了openrave0.9。但是很多例子都跑不了。不知道是不是依赖项版本太高的问题,因为有个example的例子报错了,我降了其中一个依赖项的版本。这个问题就没有出现了。不知道您安装的时候有没有发生过这个问腿?可以询问一下您安装openrave依赖项的版本吗?

      • Gravatar 头像

        烟消云散 回复

        @nini 0.7.1版本,参考的这里https://github.com/yijiangh/Choreo/blob/7c98fd29120e5ce75d2b8ed17bc49488ad983cb6/framefab_robot/abb/framefab_irb6600/framefab_irb6600_support/doc/ikfast_tutorial.rst

  18. Gravatar 头像

    洋洋 回复

    古月老师为什么找不到E: 未发现软件包 liblog4cxx-dev
    E: 未发现软件包 libpcrecpp0v5,请问那个镜像源可以下载

  19. Gravatar 头像

    烟消云散 回复

    请问古月老师:
    我想知道IK-fast是如何求逆解的,请问有没有相关的说明文档或者文献?我在网上找了好久也没有找到。

    • 古月

      古月 回复

      @烟消云散 ikfast是openrave里边的一种算法,可以在openrave官网里找一下

      • Gravatar 头像

        烟消云散 回复

        @古月 好的,谢谢古月老师

        • Gravatar 头像

          回复

          @烟消云散 请问你知道这个过程了吗?我最近也在做这个

          • Gravatar 头像

            随便 回复

            @玲 可以参考论文《Automated Construction of Robotic
            Manipulation Programs》,ikfast是论文作者提出的

  20. Gravatar 头像

    范中磊 回复

    古月老师,您好!我在用moveit规划的时候想对节点的速度进行控制怎么做啊?在moveit和rviz中可以设置吗?还是只能通过节点文件控制啊?不太懂

    • 古月

      古月 回复

      @范中磊 有一个速度和加速度的比例参数,在rviz planning插件页里有设置这个参数的地方,取值范围是0~1。在程序中也有对应的API,可以在官方文档中找到

      • Gravatar 头像

        范中磊 回复

        @古月 老师,这个速度只能设置一个比例吗?我们有一个类似T型的速度曲线是否可以在rviz中实现?

          • Gravatar 头像

            范中磊 回复

            @古月 需要编写节点文件控制节点以某个速度运动吗?老师

            • 古月

              古月 回复

              @范中磊 是的,原理可以参考《机器人学导论》,类似于ROS中的moveit planner,需要自己完成运动轨迹速度、加速度、时间的计算

  21. Gravatar 头像

    aqua 回复

    古月老师您好,我是一个ros小白,我想在ROS中实现机械臂的运动学和动力学,请问大致的步骤是怎样的?

    • 古月

      古月 回复

      @aqua 建议先使用ROS中已有的机械臂进行学习,使用方法熟悉后再深入看相应的实现方法,再移植到自己的机器人上边或者进行源码功能的添加、修改、优化。
      开始的学习可以先找已有的ROS教材进行。

  22. Gravatar 头像

    lry 回复

    古月老师您好,我改用了IKfast插件之后,发现在输入目标位姿的时候,需要输入精确到小数点后面很多位才能求解,但是如果没那么精确的时候(例如只精确到小数点后3位),求解器就返回求解失败了,这个IKfast能调整容错的参数吗。Trac_IK在这些情况下都能解出来。

    • 古月

      古月 回复

      @lry 我一直用IKfast,还没发生过类似的问题,检查下是不是ikfast配置的时候有问题

  23. Gravatar 头像

    leslie 回复

    胡老师,我在转换模型文件格式时总是提示我没有那个文件,可是他明明在那啊!

  24. Gravatar 头像

    Terence 回复

    古月老师,您好!我在按您上面的步骤将KDL替换为TRAC-IK时,出现了错误,错误如下:
    The kinematics plugin (cute_arm) failed to load. Error: Failed to load library /opt/ros/kinetic/lib//libtrac_ik_kinematics_plugin.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = libmoveit_kinematics_base.so.0.9.12: cannot open shared object file: No such file or directory)
    [ERROR] [1530362224.460199466]: Kinematics solver could not be instantiated for joint group cute_arm.
    您知道这是什么原因吗?

    • 古月

      古月 回复

      @Terence 把配置文件里的trac_ik改成大写试试:
      trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin

      • Gravatar 头像

        mz 回复

        @古月 也遇到了这个问题,看了一下文档(http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/trac_ik/trac_ik_tutorial.html),里面是这样写的,
        Install trac_ik_kinematics_plugin and trac_ik_lib package or add to your catkin workspace.
        问题应该出在不仅需要安装trac_ik_kinematics_plugin插件,还需要安装trac_ik_lib功能包,或者将trac_ik_lib功能包放置在工作空间下(git clone https://bitbucket.org/traclabs/trac_ik.git),这样就能够使用TRAC_IK求解插件了。

    • Gravatar 头像

      邹俊宇 回复

      @Terence 你把你的moveit更新一下,我也遇到了这个问题
      我输入sudo apt-get install ros-kinetic-moveit-*更新了一下moveit就好了

      • Gravatar 头像

        george 回复

        @邹俊宇 您好古月老师,我按照官方wiki,用IKfast给franka机器人生成IK插件,但是每次都不成功,在开头它显示了一些信息之后,就出现INFO: attempting li/woernle/hiller general ik method,然后运行几十分钟后显示Didn't converge in maxsteps=50 steps.
        这个正常吗?
        请您指点一下谢谢!

        • 古月

          古月 回复

          @george 这个机器人我没用过,也没遇到过类似的问题,不太清楚问题所在,请检查下配置时候的参数设置

        • Gravatar 头像

          derek 回复

          @george 我遇到过这个问题,解决方法是openrave使用源安装,不要使用二进制安装。

  25. Gravatar 头像

    bucket 回复

    古月老师您好,我想问下orientation constraint 中的absolute_x_axis_tolerance是相对末端坐标系还是指定的基座坐标系呢?我用的模型是SCARA四自由度机械臂,想实现ros by example 中的那个水平移动末端的案例,但是每次都会报错
    [ WARN] [1530171817.352887298]: RRTConnect: Skipping invalid start state (invalid state)
    [ERROR] [1530171817.352931006]: RRTConnect: Motion planning start tree could not be initialized!
    [ INFO] [1530171817.352958185]: No solution found after 0.000078 seconds
    [ WARN] [1530171817.362828271]: Goal sampling thread never did any work.
    不知道为何说初始状态无效,我把三个轴的容差值都设为3.14还是这个错误,请老师给点思路。谢谢

    • 古月

      古月 回复

      @bucket 这个坐标系是指定的坐标系,指定为base_link就是base_link。
      可以在规划前加一句当前姿态为其实姿态的设置试一下。

      • Gravatar 头像

        harrycomeon 回复

        @古月 请问古月老师,可以说说怎么指定吗

    • Gravatar 头像

      harrycomeon 回复

      @bucket 请问解决了吗

  26. Gravatar 头像

    于晓龙 回复

    您好古月老师,运行 openrave-robot.py "$MYROBOT_NAME".dae --info links
    之后出现openravepy is not set into PYTHONPATH env variable 。我尝试添加和git的方法之后仍然存在这样的问题,请问知道怎么解决么?

发表评论

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

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