ROS探索总结(二十七)——ROS Industrial

  • 内容
  • 评论
  • 相关

工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟,ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-IndustrialROS-I)。

      ROS-I的官网: http://rosindustrial.org/

Capture

一、ROS-I的目标

  1. ROS强大的功能应用到工业生产的过程中;
  2. 为工业机器人的研究与应用提供快捷有效的开发途径;
  3. 为工业机器人创建一个强大的社区支持;
  4. 为工业机器人提供一站式的工业级ROS应用开发支持。

      ROS向工业领域的渗透,可以将ROS中丰富的功能、特性带给工业机器人,比如运动规划,运动学算法,视觉感知,还有rvizgazebo等工具,不仅降低了原本复杂严格的工业机器人研发门槛,而且在研发成本发面也具有极大的优势。

二、ROS-I的安装

在完整安装ROS之后,通过以下的命令就可以安装ROS-I了:

  1. $ sudo apt-get install ros-indigo-industrial-core ros-indigo-open-industrial-ros-controllers

三、ROS-I的架构

clip_image004[4]

  1. GUI:上层UI分为两个部分:一个部分是ROS中现在已有的UI工具;另外一个部分是专门针对工业机器人通用的UI工具,不过是将来才会实现。
  2. ROS LayerROS基础框架,提供核心通讯机制
  3. MoveIt! Layer:为工业机器人提供规划、运动学等核心功能的解决方案
  4. ROS-I Application Layer:处理工业生产的具体应用,也是针对将来的规划
  5. ROS-I Interface Layer:接口层,包括工业机器人的客户端,可以通过 simple message协议与机器人的控制器通信
  6. ROS-I Simple Message Layer:通信层,定义了通信的协议,打包和解析通信数据
  7. ROS-I Controller Layer:机器人厂商开发的工业机器人控制器。

从上边的架构我们可以看到,ROS-I在复用已有ROS框架、功能的基础上,针对工业领域进行了针对性的拓展,而且可以通用于不同厂家的机器人控制器。

   

四、ROS-I控制UR机械臂

Universal Robots是丹麦的一家工业机器人制作商,主要的机器人产品有:UR3UR5UR10,分别针对不同的负载:

clip_image006[4]

我们以该机器人作为示例,看一下ROS-I的应用。

4.1 安装

   首先我们需要安装UR机器人的ROS功能包集。

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

   该功能包集包含了UR仿真、运行需要的主要功能包:ur_description ur_driver ur_bringup ur_gazebo ur_msgsur10_moveit_config/ur5_moveit_config ur_kinematics

 

4.2 运行

安装完成后,使用下边的命令,我们就可以看到UR10的机器人模型了(第一次运行需要等待较长时间完成模型加载):

  1. $ roslaunch ur_gazebo ur10.launch

    clip_image008[4]

然后我们让机械臂动起来,需要运行MoveIt运动规划的节点:

  1. $ roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true

然后运行rviz

  1. $ roslaunch ur10_moveit_config moveit_rviz.launch config:=true

clip_image010[4]

启动之后,我们可以看到rivz中的机器人模型和gazebo中的机器人模型应该是一样的姿态。在rviz中,我们可以用鼠标拖动机器人的终端,然后点击planning标签页中的plan nad execute就可以让机器人规划路径并且到达目标位置了,gazebo中的模型也会跟随变化。

clip_image012[4]

 4.3 分析

看到这里,也许我们会有一个疑问:这不就是MoveIt那一套东西么, 感觉和ROS-I并没有什么关系?再回头看ROS-I的架构,这种架构的上层控制本身就是复用的已有的软件包,ROS-I目前主要关注的是如何使用这些软件包来控制工业机械臂,也就是最下边的三层结构。我们把这三层从上到下分析一下:

首先是ROS-I Interface Layer层,这一层需要我们设计一个机器人的客户端节点,主要功能是完成数据从ROS到机械臂的转发,ROS-I为我们提供了许多编程接口,可以帮助我们快速开发,下图就是几个比较常用的API,具体API的使用说明可以查看官方文档。

clip_image014[5]

对于机械臂来讲,这里最重要的是 robot_state joint_trajectory robot_state包括很多状态信息,ROS-I都已经帮我们定义好了,可以去industrial_msgs包里看到消息的定义文件。joint_trajectory订阅了MoveIt规划出来的路径消息,然后打包发送给最下层的机器人服务器端。通常会把这一层的功能封装成robot_name_driver功能包,可以看ROS-IABBUR的机械臂都是这样的,可以参考他们的源码进行设计。

然后是ROS-I Simple Message Layer层,这一层主要是上下两层的通信协议。Simple Message这个协议是基于TCP的,上下层客户端和服务器端的消息交互,全部通过这一层提供的API进行打包和解析。具体使用方法可以参考http://wiki.ros.org/simple_message,也可以直接看ROS-I的源码:https://github.com/ros-industrial/industrial_core,主要实现SimpleSerializeTypedMessage两个类的功能即可。

最下层的ROS-I Controller Layer是厂家自己的控制器,考虑到实时性的要求,一般不会使用ROS,只要留出TCP的接口即可,接收到trajectory消息解析之后,就按照厂家自己的算法完成动作了。

可见,如果我们想要通过ROS-I来控制自己的机械臂,最下边的三层使我们需要实现的重点,上层运动规划部分可以交给ROS来完成。


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

本文链接地址: ROS探索总结(二十七)——ROS Industrial

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

评论

9条评论
  1. Gravatar 头像

    pdmike 回复

    大神 您好 请问下 我运行roslaunch ur_gazebo ur10.launch时 发生以下错误
    while processing /opt/ros/indigo/share/ur_description/launch/ur10_upload.launch:
    Invalid tag: Cannot load command parameter [robot_description]: command [/opt/ros/indigo/lib/xacro/xacro --inorder '/opt/ros/indigo/share/ur_description/urdf/ur10_robot.urdf.xacro'] returned with code [2].

    Param xml is
    The traceback for the exception was written to the log file
    我UR的所有package应该都装了 是什么问题 跪求

    • 古月

      古月 回复

      @pdmike 这个错误提示是说模型文件有问题,无法解析,一般是因为xacro模型文件中的元素有问题

      • Gravatar 头像

        pdmike 回复

        @古月 您说的是 ur10_robot.urdf.xacro 中元素有问题?这些我是直接用sudo apt-get install 直接下载的,会有问题吗?另外用这个指令下载完package以后还需要操作什么步骤?需要编译吗?

        • 古月

          古月 回复

          @pdmike 直接下载的应该不会有问题,我在我的电脑上试过是可以运行的,下载之后也不需要编译。ur10_robot.urdf.xacro这个文件是确定存在的吧?

        • 古月

          古月 回复

          @pdmike 试一下这个帖子的方法:https://groups.google.com/a/rethinkrobotics.com/forum/#!topic/brr-users/JS-Kb5NbYEE
          把ur10_upload.launch中的--inorder删掉试试

  2. Gravatar 头像

    豆豆 回复

    ros-I和ros_control是什么关系

    • 古月

      古月 回复

      @豆豆 ROS-I是ROS应用于工业机器人的一套框架,ros_control是针对机器人底层控制的功能包集,不限于工业机器人

  3. Gravatar 头像

    章金锋 回复

    古月 看下邮件 ,我给您发了邮件了 谢谢!盼复

发表评论

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