1 环境



具体参考UR-ROS


  • ubuntu 16.04
  • ROS kinetic
  • ros-kinetic-moveit

2 MoveIt Setup Assistant



利用ROS官方提供的moveit包在RViz控制UR5运动


2.1 打开MoveIt! Setup Assistant


打开一个shell,在catkin方式创建的ROS工作空间中启动ros
roscore
再打开一个shell,启动MoveIt
roslaunch moveit_setup_assistant setup_assistant.launch
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
点击Create New MoveIt Configuration Package来创建新的配置包。
之前配置环境中sudo apt-get install ros-kinetic-moveit,所以在/opt/ros/kinetic/share中选
/opt/ros/kinetic/share/ur_e_description/urdf/ur5e_joint_limited_robot.urdf.xacro,然后Load Files
在这里插入图片描述


2.2 创建碰撞免检矩阵(ACM)


点击Setup Assisant的左边第二项’Self-Collisions’,在这里我们将创建碰撞免检矩阵(Avoid Collision Matrix, ACM)。创建很简单,点击一下’Regenerate Default Collision Matrix’就可以了。


  • 产生的效果:
    碰撞检测是非常复杂的运算过程。对于多关节机械臂或者类人机器人来说,机械结构复杂,肢体多,碰撞检测 需要涉及很多的空间几何计算。但是对于刚体机器人来说,有些肢体之间是不可能发生碰撞的,比如原本就相邻的肢体,比如类人机器人的脚和头。这里生成的 ACM就是告诉我们,这个URDF所描述的机器人,哪些肢体之间是不会发生碰撞的。那么在之后的碰撞检测算法中,我们就可以略过对这些肢体之间的检测,以 提高检测效率。
    在这里插入图片描述
    在这里插入图片描述

2.3 创建虚拟关节 (Virtual Joints)


一般来说,Virtual Joint Name我们命名为‘world_joint’,而’Child Link’指的是我们要把‘世界’和机器人的那个部位连接,那么很显然我们选择基座’base’。‘Parent Frame Name’,是世界坐标的名字,在ROS中一般叫’world_frame’。关节类型 Joint Type, 很显然这里我们选择固定Fixed. 代表机器人相对于世界是固定的。而另外两种, Planar指的是平面移动底座(xy平面+角度),用于移动机器人比如PR2;还有一种Floating, 指的是浮动基座(xyz position+orientation),比如类人机器人。
在这里插入图片描述


2.4 创建规划群 (Planning Groups)


创建Planning Group是MoveIt的核心之一。首先,点击Add Group, 我们会看到一个界面
在这里插入图片描述


  • Group Name: 不用多说,名字。。。我们就叫Arm。
  • Kinematic Solver: 运动学求解工具,这个就是负责求解正向运动学(Forward Kinematics)和逆运动学(IK)的。 一般我们选用KDL, The Kinematics and Dynamics Library。这是一个运动学与动力学的库,可以很好的解决6自由度以上的单链机械结构的正逆运动学问题。当然你也可以用其他IK Solver, 比如SRV或者IK_FAST,甚至你可以自己开发新的Solver然后插入进来,如果有空,我以后会发帖讲解如何创建新的运动学求解库并插入到MoveIt。
  • Kin. Search Resolution: 关节空间的采样密度
  • Kin. Search TImeout: 求解时间
  • Kin. Solver Attempts: 求解失败尝试次数,一般来说这三项使用默认值就可以。你也可以根据具体需要做出适当调整。

接下来,我们要正式创建这个组群,有很多不同的方法,Add Joints, Add Links, Add Kin. Chain, Add Subgroups。我们这里选择’Add Kin. Chain’,这样我们可以清楚的看到整个机器人的机械机构,
在这里插入图片描述
在正中方我们可以看到这个机械臂的结构,一个link接着一个 link。下方我们可以看到有’Base Link’和’Tip Link’,我们选择’base_link’作为Base,选择’wrist_3_link’作为Tip. 然后点击Save,这样一个规划组群就创建好了。同样的,我们可以再创建一个手的组群(Hand),这一次我们用Add Links,然后选择’wrist_3_link’。


2.5 创建机器人预设位姿 (Robot Poses)


在Setup Assistant 第五项, ‘Robot Poses’,我们创建预设的机器人位姿。点击‘Add Pose’,我们为机械臂创建一个向上直立的位姿UpRight,选择Planning Group为Arm。可以看到很多滚动条,全设为0就是垂直向上的位姿。然后点击保存。当然,你可以根据需要设置其他不同位姿。
在这里插入图片描述


2.6 配置终端控制器(End Effectors)


终 端控制器,就是机械臂的手,以后用来在工作环境中直接控制的部位。我们添加一个叫做HandEff的终端控制器,End Effector Group选择之前创建好的Hand,Parent_Link选择机械臂的最后一个肢体wrist_3_link。Parent Group选择Arm。
在这里插入图片描述


2.7 配置被动关节(Passive Joints)


所谓被动关节,就是指现实中不配置电机的关节,也就是不会出现在机器人的Joint State Msg里,以避免MoveIt与JointState出现匹配错误。这里我们的UR机械臂并没有此类被动关节,所以可以直接跳过。


2.8 作者信息


在这里插入图片描述


2.9 生成配置文件(Configuration Files)


在这里插入图片描述
最后一步,在Configuration Package Save Path里面选择一个保存地址,一般我们把他放在/home/umore/catkin_ws/src/myUR_moveit_config然后点击Generate Package,这样一个完整的MoveIt Configuration Package就创建好了


2.10 运行MoveIt!


cd /home/umore/catkin_ws
roslaunch myUR_moveit_config demo.launch
  • 1
  • 2

在这里插入图片描述


3 MoveIt 配置包详解



打开 myUR_moveit_config,我们发现有config和launch两个文件夹。


3.1 config文件夹


在这里插入图片描述


  • fake_controllers.yaml:这是虚拟控制器配置文件,方便我们在没有实体机器人,甚至没有任何模拟器(如gazebo)开启的情况下也能运行MoveIt。
  • joint_limits.yaml:这里记录了机器人各个关节的位置速度加速度的极限,这些都会被用于以后的规划中。
  • kinematics.yaml:这里就是上一章2.2.4里面设置的东西,用于初始化运动学求解库
  • lwr.srdf:这个是一个重要的MoveIt配置文件。
  • ompl_planning.yaml:这里是配置OMPL各种算法的各种参数。
  • .srdf文件是moveit的配置文件,配合URDF使用
    在这里插入图片描述
    我 们可以看到这是一个xml格式的配置文件,根是robot,并有一个属性值name=‘Arm’。下面各个项目应该很明显,就是我们刚刚在Setup Assistant里面所设置的东西,包含了组群,位姿,终端控制器,虚拟关节,以及碰撞免测矩阵ACM的定义。理论上,只要有了srdf和urdf,我 们就可以完全定义一个机器人moveit信息。

3.2 launch文件夹


在这里插入图片描述


  • demo.launch
    demo是运行的总结点,打开我们可以看到他include了其他的launch文件。其中第14行说,如果有需 要,发布静态的tf。比如说,你的机器人基座不在世界坐标的原点,你可以发布一个静态tf来描述机器人在世界坐标中的位置。第17-21行,就是我们发布 虚拟机器人状态的地方了,当然,如果你有实体机器人或者有gazebo之类的模拟器,你需要去掉这一部分,有其他相应的节点来发布机器人状态。26-32 行运行了另一个moveit重要的节点,move group。
  • move_group.launch
    顾名思义,move group的功能是让一个规划组群动起来。怎么动,那就要做运动规划了,在move_group.launch第24-26行定义了运动规划库的使用,我 们可以看到,默认的是使用ompl运动规划库。同样的,如果以后有时间,我会发帖详解如何创建新的运动规划库插件并让moveit使用其他的运动规划算 法。其他的都是设置一些基本参数,暂时可以略过。
  • planning_context.launch
    这里我们可以看到,定义了所使用的urdf和srdf文件,以及运动学求解库。不建议手动更改这些,但是如果你需要使用不同的urdf,srdf,可以在这里更改。
  • setup_assistant.launch
    如果你需要更改一些配置,那么可以直接运行

roslaunch myUR_moveit_config   setup_assistant.launch
  • 1

这样就可以基于当前设置做更改,而不是重新设置。


4 Simulation


参考


1、 MoveIt! Setup Assistant
2、运动规划 (Motion Planning): MoveIt! 与 OMPL
3、ur_gazebo
4、ROS探索总结-25.MoveIt基础–创客智造
5、ROS探索总结(二十五)——MoveIt基础–古月居
6、通过Moveit!配置助手配置Moveit!包
7、ROS机械臂开发:MoveIt!可视化配置
8、ROS学习笔记(1)6轴机器臂的URDF文件的生成并用rviz和moveit显示
9、ROS下如何使用moveit驱动UR5机械臂
10、利用moveit在ROS RViz下仿真控制UR机械臂