ROS探索总结(五十)——ROS机器人实例 (Universal Robots)

  • 内容
  • 评论
  • 相关

Universal Robots(优傲机器人)公司是一家引领协作机器人全新细分市场的先驱企业,该公司成立于2005年,关注机器人的用户可操作性和灵活度,总部位于丹麦的欧登塞市,主要的机器人产品有:UR3、UR5和UR10,分别针对不同的负载级别。

image

Universal Robots早在2009年便推出了第一款协作机器人——UR5,自重18公斤,负载高达5公斤,工作半径85cm,不仅颠覆了人们对于传统工业机器人的认识,还自此定义了“协作机器人”的真正意义。除了安全度高、无需安全围栏等特点外,协作机器人还应该具备编程简单和灵活度高等特点,才能实现真正的人机和谐共事。

2015年3月推出的UR3是现今市场上最灵活轻便、并且可与工人一起肩并肩工作的台式机器人。它自重仅为11公斤,但是有效负载却高达3公斤,所有腕关节均可360度旋转,而末端关节可作无限旋转。UR 10的有效负载为10公斤,工作半径130cm。三款机器人均以编程的简易性、高度灵活性以及与人一起工作的安全可靠性而享誉业内。

ROS中同样集成了Universal Robots机器人的功能包,使用如下命令即可安装,其中包含UR3、UR5、UR10三款机器人的相关功能:

  1. $ sudo apt-get install ros-kinetic-universal-robot

在使用之前,先来了解一下Universal Robots的相关功能包。

image

接下来我们以UR5为例,学习Universal Robots功能包的使用方法。

 

gazebo中的UR机器人

使用以下命令启动UR5机器人的gazebo仿真环境:

  1. $ roslaunch ur_gazebo ur5.launch

启动成功后可以看到仿真环境中的UR5。

image

查看当前系统中的话题列表。

image

follow_joint_trajectory是MoveIt!最终规划发布的action消息,由机器人控制器端接收该消息后控制机器人完成运动。从上边的话题列表中,可以找到follow_joint_trajectory,由仿真机器人的控制器插件订阅。

打开启动的ur5.launch文件,可以看到以下代码段:

  1.    <rosparam file="$(find ur_gazebo)/controller/arm_controller_ur5.yaml" command="load"/>   
  2.    <node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller" respawn="false" output="screen"/>

控制器管理节点controller_manager启动了一个arm_controller插件,该插件的配置可以查看arm_controller_ur5.yaml文件:

  1. arm_controller:
  2.  type:position_controllers/JointTrajectoryController
  3.  joints:
  4.     -shoulder_pan_joint
  5.     -shoulder_lift_joint
  6.     -elbow_joint
  7.     -wrist_1_joint
  8.     -wrist_2_joint
  9.     - wrist_3_joint
  10. constraints:
  11.     goal_time: 0.6
  12.     stopped_velocity_tolerance: 0.05
  13.     shoulder_pan_joint: {trajectory: 0.1, goal: 0.1}
  14.     shoulder_lift_joint: {trajectory: 0.1, goal: 0.1}
  15.     elbow_joint: {trajectory: 0.1, goal: 0.1}
  16.     wrist_1_joint: {trajectory: 0.1, goal: 0.1}
  17.     wrist_2_joint: {trajectory: 0.1, goal: 0.1}
  18.     wrist_3_joint: {trajectory: 0.1, goal: 0.1}
  19. stop_trajectory_duration: 0.5
  20. state_publish_rate:  25
  21. action_monitor_rate: 10

从上边的配置信息中可以看到,arm_controller是一个JointTrajectory类型的控制器,接收follow_joint_trajectory中的轨迹信息后,完成机器人的运动控制。

 

使用MoveIt!控制UR机器

ROS中类似于UR5这样的机械臂控制当然离不开MoveIt!,接下来我们就使用MoveIt!实现对gazebo中UR5的控制。

UR5的控制需要通过follow_joint_trajectory这个action接口实现,这就需要在MoveIt!端配置一个控制器插件,实现该接口的功能。该插件的配置在ur5_moveit_config中已经实现,可以查看ur5_moveit_config功能包中的controllers.yaml文件:

  1. controller_list:
  2.  - name:""
  3.   action_ns: follow_joint_trajectory
  4.    type:FollowJointTrajectory
  5.    joints:
  6.      -shoulder_pan_joint
  7.      -shoulder_lift_joint
  8.      -elbow_joint
  9.      -wrist_1_joint
  10.      -wrist_2_joint
  11.      -wrist_3_joint

所以我们并不需要进行任何修改,使用如下命令启动MoveIt!和rviz,启动过程会包含所需要的控制器插件:

  1. $ roslaunch ur5_moveit_config ur5_moveit_planning_execution.launchsim:=true
  2. $ roslaunch ur5_moveit_config moveit_rviz.launch config:=true

启动成功后可以看到如下界面。

image

目前,rviz和gazebo中的UR5应该保持同样的姿态。在rviz中使用MoveIt!插件选择一个运动目标姿态,然后点击“Plan”。如果可以实现运动规划,就会看到如下规划轨迹。

image

再点击“Execute”按钮,gazebo中的UR5会按照规划的轨迹开始运动,rviz中的UR5模型保持同样的运动姿态,如下图所示。

image

 

Capture


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

本文链接地址: ROS探索总结(五十)——ROS机器人实例 (Universal Robots)

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

评论

33条评论
  1. Gravatar 头像

    无效某 回复

    古月老师你好!我在调用moveit的computeCartesianPath来控制ur机械臂时,机械臂运动过程中出现了抖动现象,检查发现运动过程中机械臂的加速度不平滑,请问有什么办法可以设置computeCartesianPath规划的轨迹的速度和加速度吗?

  2. Gravatar 头像

    蛋黄 回复

    胡老师您好,谢谢您之前的解答,还有两个问题想请教:第一个问题:《ros机器人开发实践》第9章 “机器人SLAM与自主导航”中自动导航示例代码实现部分,就是在random_navigation.py中人工设置一系列目标点让机器人导航,而不是在rviz中手动设置,请问:如果我想根据自己的地图设置一些导航点坐标,地图中的点坐标如何获取?是按照地图中的像素坐标位置吗?第二个问题:random_navigation.py中有一行代码:#发布控制机器人的消息self.cmd_vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size=5) ,请问:控制机器人的消息cmd_vel不是在movebase中发布的吗,为何还要在这里重新发布一遍?不冲突吗,还是这里发布了,movebase中就不再发布?

    • 古月

      古月 回复

      @蛋黄 1. rviz工具栏中有一个设置坐标位置的小工具,选择后点击地图位置可以把坐标打印出来
      2. 多个节点可以发布同一个话题,这里的程序是为了停机减速用的,其他情况下不会发布

  3. Gravatar 头像

    无效某 回复

    大神你好,请问如何加快ur机械臂的运动速度?我已经在ur的示教器上加大了最大速度,但是用moveit来控制机械臂时速度并没有加快,在moveit的API中也没有找到可以加大运动速度的函数。

    • 古月

      古月 回复

      @无效某 有一个joint_limit.yaml的文件,把里边的加速度和速度限制调大

      • Gravatar 头像

        无效某 回复

        @古月 谢谢你的回复,请问joint_limit.yaml中速度和加速度最大可设置为多少?是否还是会受示教器设置的最大速度限制?

        • 古月

          古月 回复

          @无效某 joint_limit.yaml中的数值是可以随便设置的,但是控制器内部会有限位,应该可以使用示教器设置这个底层的限位。

          • Gravatar 头像

            无效某 回复

            @古月 好的,谢谢你的回复。

  4. Gravatar 头像

    爱学习的猫 回复

    老师您好,我想问一下可以将俩个UR5机械手集成到一个RVIZ界面上吗?

  5. Gravatar 头像

    洋洋 回复

    老师您好,在gazebo当中,怎么在ur执行器末端安装手爪模型比如Robotiq手爪,实现仿真。

    • 古月

      古月 回复

      @洋洋 和做机器人urdf模型是一样的,在urdf里边把手爪的模型安装到机械臂终端

  6. Gravatar 头像

    陈敏 回复

    胡老师,您好!运行您给出的仿真指令,第一遍成功了。
    后面关闭gazebo后,再启动运行oslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true,出现Robot model '/robot_description' not found! Did you remap 'robot_description',请问该怎么解决呢?
    在ros.wiki论坛上搜到了相同的问题,附上网址 https://answers.ros.org/question/34705/robot_description-not-found/
    是要重装libmyrqlclient.so.16吗?这个怎么重装我没找到额,希望您能解答我的问题。

    • 古月

      古月 回复

      @陈敏 可能是有什么文件损坏了,重新安装一遍moveit试试

      • Gravatar 头像

        陈敏 回复

        @古月 好吧,愚蠢的我重新装了一遍ros,应该只重装moveit试试的,多谢胡老师

      • Gravatar 头像

        阿达 回复

        @古月 古月老师你好,为什么按照步骤来做,gazebo中的机械臂下沉就是中间的部分直接扎在地面上,并且有如下提示[FATAL] [1533041262.259482371, 0.161000000]: No matching hardware interface found for 'hardware_interface/PositionJointInterface
        [FATAL] [1533041262.260538933, 0.161000000]: Could not initialize robot simulation interface
        然后用moveit也控制不了该机械臂,查看rostopic时并没有出现arm_controller

        • 古月

          古月 回复

          @阿达 首先机械臂下沉说明模型中的物理属性是有问题的,另外ROS版本的不同,模型中的hardware_interface/PositionJointInterface配置有点不同,把“hardware_interface/”删掉试试

          • Gravatar 头像

            阿达 回复

            @古月 老师是把hardware_interface内的所有文档都删除掉吗

          • Gravatar 头像

            XH 回复

            @古月 古月老师您好,我按照您出版的《ros机器人开发实践》学习,在第十章Moveit,P351中开始仿真时出现:[FATAL] [1539048185.984224836, 0.144000000]: No matching hardware interface found for 'hardware_interface/PositionJointInterface
            [FATAL] [1539048185.984367841, 0.144000000]: Could not initialize robot simulation interface错误。之后删除 arm.xacro中的'hardware_interface/'也不见效果,请问该如何处理啊?我用的时indigo版本

            • 古月

              古月 回复

              @XH 搜索下还有没有其他地方带有这个前缀的

        • Gravatar 头像

          XH 回复

          @阿达 请问这个问题最后解决了吗?

      • Gravatar 头像

        洋洋 回复

        @古月 古月老师你好,为什么按照步骤来做,gazebo中的机械臂下沉就是中间的部分直接扎在地面上,并且有如下提示[FATAL] [1533041262.259482371, 0.161000000]: No matching hardware interface found for 'hardware_interface/PositionJointInterface
        [FATAL] [1533041262.260538933, 0.161000000]: Could not initialize robot simulation interface
        然后用moveit也控制不了该机械臂,查看rostopic时并没有出现arm_controller

        • Gravatar 头像

          zq 回复

          @洋洋 我前面也出现这个问题了,当时用的是自己下载的源码编译,然后我打开了rosgraph图看了看,好像是机械臂状态根本没有传到moveit那里,具体解决方案我也没搞定,然后我通过apt get下载了ur的包,结果运行没问题,rosgraph的图也完全不一样,感觉可能是某些节点或者啥没启动。

        • Gravatar 头像

          zq 回复

          @洋洋 应该是部分包没有下载下来,我现在用源码包也通过了,在删除apt—get下来的ur包之后

  7. Gravatar 头像

    信田 回复

    古月老师您好,我看你这篇帖子做UR机械臂的仿真,就是以下3个命令:
    roslaunch ur_gazebo ur5.launch
    roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
    roslaunch ur5_moveit_config moveit_rviz.launch config:=true
    我在仿真规划演示的时候只能成功第一次,后面rviz和gazebo中的UR就不动了,rviz里显示failed;

    后来我上wiki看:
    NOTE:
    As MoveIt! seems to have difficulties with finding plans for the UR with full joint limits [-2pi, 2pi], there is a joint_limited version using joint limits restricted to [-pi,pi]. In order to use this joint limited version, simply use the launch file arguments 'limited', i.e.:
    roslaunch ur_gazebo ur5.launch limited:=true
    roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true
    roslaunch ur5_moveit_config moveit_rviz.launch config:=true
    用上面三个(limited:=true)命令就可以一直成功,希望给大家一个参考。
    我用的win7系统,装虚拟机跑的Ubuntu 16.04,运行ROS kinetic。

    • Gravatar 头像

      蹦点儿 回复

      @信田 嗯嗯,我也遇到了你说的问题,按照你说的确实成功了,十分感谢!

  8. Gravatar 头像

    Hccc 回复

    古月大大您好,我目前在用MOVEIT做机器人的路径规划,但是使用的机器人没有ROS control功能包的,没办法直接在ROS里控制机器人,需要通过TCP/IP通信发送规划好的轨迹数据。
    请问有什么办法能把规划好的轨迹信息从MOVEIT里导出来呢,比如生成一个轨迹点参数的TXT?

    • 古月

      古月 回复

      @Hccc MOVEIT本身没有这个功能,需要的话可以自己去做的,根据需求保存成需要的格式,MOVEIT只能通过action接口输出,或者自己写一个controller。

  9. Gravatar 头像

    某某某刘 回复

    前辈您好,我想问一下如果实现键盘控制UR5机器人,能用发布订阅话题吗?如果能的话应该对UR5哪个话题进行发布呀?

    • 古月

      古月 回复

      @某某某刘 应该是可以的,在moveit配置功能包里有一个手柄控制的launch文件,可以作为参考

发表评论

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