为了更明确的了解ROS-I,特把Robot Driver Specification详细阅读了一下,在这里记录下一些要点。Robot Driver Specification为ROS节点功能提供指导以提高跨平台兼容性。所有为工业机器人控制器提供接口的ros节点都应该遵守此规范。

初衷(Motivation)

ROS-Industrial的一个主要好处是,它通过将来自不同厂商的机器人的控制集成到通用的ros框架中,从而实现了机器人之间的互操作。ROS集成是一个良好的开端,当这些不同的ros节点都使用一组公共的接口来进行控制和反馈时,可以实现更好的兼容性。本页试图提供一些指导方针,说明什么具体的ROS接口应该由ROS-Industrial提供,以确保最大程度的兼容性。同时某此特定于供应商的方面可能需要进行折中,但还是有希望提供一个标准的实现描述。

操作(Operation)

本部分描述了机器人如何应对高层次的操作性活动(例如,启动关闭等)。

初始化(Initialization)

  • ROS节点应该自动初始化到机器人控制器的所有连接。不需要人工连接服务。
  • 在控制器启动时自动运行机器人端代码。比如单独开辟一个任务后台运行,且任何启动要求都应在节点的文档中明确说明。

通信(Communications)

  • 机器人和ROS端都要对信息丢失现象进行处理。
    • 在ROS端:
      • 自动尝试与机器人端重新建立连接。
      • 停止大部分消息发布。
      • 继续以connected=false发布状态信息。
    • 在机器人端:
      • 停止运动并且关闭驱动器。
      • 重新初始化所有的连接以等待新的连接接入。
    • 如果连接无法直接检测通信丢失,则可能需要在机器人和ROS之间实现心跳消息。
  • 未指定任何机制将某物标记为不受支持的。
    • 如果不支持,则不应发布(或订阅)主题。
    • 如果节点发布了服务声明,则假定支持该服务调用。如果客户端调用未实现的服务,标准的ROS机制将确保客户端获得错误提示。

ROS API

本部分描述机器人应该提供的特定的ROS接口(主题、服务和参数)。这些功能根据机器人通信体系结构的需要由单个节点或多个节点提供。也可以使用不同的节点以不同的假设、通信方法提供相同的功能,比如,ROS启动文件可用于控制哪些节点适合运行给定的应用程序。

通用(General)

Parameters

  • robot_ip_address (string)
    • 机器人连接的IP地址。
  • robot_description (urdf map)
    • URDF XML机器人描述。

状态反馈(State Feedback)

Published Topics

  • feedback_states (control_msgs/FollowJointTrajectoryFeedback)
    • 提供当前与期望位置、速度或加速度的反馈信息。
    • joint_trajectory_action用来监视正在进行的运动。
      • 关节名称、次序和比例应该与ROS的约定相匹配(例如,关节的次序从基座到末端工具,角度以弧度表示等)。
      • 如果期望值与错误值不可用,则保留数组为空。
      • 如果速度值和加速度值不可用,则将数组保留为空。
  • joint_states (sensor_msgs/JointState)
    • 提供当前关节位置(以及速度/加速度)的反馈信息。
    • 被robot_state_publisher节点用于广播运动变换。
      • 关节名称、次序和比例应该与ROS的约定相匹配(例如,关节的次序从基座到末端工具,角度以弧度表示等)。
      • 如果速度值和effort值不可用,则将数组保留为空。
  • robot_status (industrial_msgs/RobotStatus)
    • 提供当前机器人关键参数的状态。
    • 应用程序用于监视和响应不同的故障条件。
      • 使用显示的消息字段来提高客户端代码的可重用性。
      • 如果尚未可用或未实现,状态值应设置为-1。

运动控制(Motion Control)

该节点实现控制机器人运动的方法。可以实现几种不同类型的控制(轨迹下载、点数据流式下载、力控制等),但不同的控制方法之间可能彼此不兼容。这些方法可以在单一的“主运动节点”或分散的单独的节点上实现。如何保证不同运动控制器之间的冲突输入得到正确的处理取决于系统的实现。一般来说,一次只能有一个控制器来控制机器人的运动。对于复杂的系统,应该有一个“运动管理器”节点,该节点聚合来自不同运动控制器的相互冲突的命令并能对其按优先级进行排序。

Subscribed Topics

  • joint_path_command (trajectory_msgs/JointTrajectory)
    • 在机器人上执行预先计算的关节轨迹
    • 被ROS的轨迹生成器(例如:joint_trajectory_action)用来发送运动指令
      • 通常, 将整个轨迹下载到机器人控制器之后才开始执行
        • 如果需要, 轨迹会一个点一个点的下载,然后立即开始执行
        • 或者, 将单个数据点以数据流的形式传送到JointCommand接口
      • 如果轨迹长度超过最大长度(由机器人指定),节点应忽略该轨迹并记录错误
        • 此时可以调用采样滤波器以减少路径点
      • 如果可能,机器人应尝试自动启动运动
        • 这可能需要启用驱动器、执行运动任务等,请参阅驱动程序的使用情况以获得更多详细信息。
      • 如果在现有的运动正在进行时接收到新的轨迹:
        1. 取消当前的运动(机器人的运动可能停止)
        2. 开始新的轨迹运动
        3. 所有轨迹点按指定的速度依次执行。注意:如果非确定性协议(例如UDP)用于向机器人传输轨迹,应该使用某种方法确保维持正确的序列。
      • time_from_start可以代替速度信息来控制运动轨迹。这假设‘time_from_start’值是为连续运动计算的(这是一般正确的,但对ROS来说不总是对的)。
  • joint_command (trajectory_msgs/JointTrajectoryPoint)
    • 通过流连接命令执行动态运动
    • 由客户端代码用于“实时”控制机器人的位置
      • 机器人可以使用一个小缓冲区来实现连续点之间的平滑运动。
      • 主题发布节点负责以足够的速度提供新的命令,以跟上机器人的运动。
        • 更密集的路径(或更快的机器人运动)将需要更高的更新速率。
      • 此节点应该监视主题流,以确保不接收点不正常。
        • 放弃过去的命令。
      • 如果接收命令的速度超过机器人处理的速度,则行为可能依赖于实现:
        1. 首选:立即取消当前的运动,并开始移动到新的点。只要运动保持平稳。
        2. 替代方案:新命令将取代机器人端命令队列中过去最接近的命令。

Services

所有服务都应该返回一个值,这样客户端就知道调用成功还是失败。

  • stop_motion (industrial_msgs/StopMotion)
    • 停止机器人的当前运动
    • 可以通过发送一个新的运动命令恢复运动
  • joint_path_command (industrial_msgs/CmdJointTrajectory)
    • 在机器人上执行新的运动轨迹
    • 与joint_path_command相同的功能
    • 命令轨迹由机器人节点实际接收到之后,实现的服务允许调用代码接收确认信息。

运动学(Kinematics)

为了实现实时的运动规划和避碰,节点应该提供机器人特有的逆运动学解。虽然在ROS中提供了一个通用的求解器,但是对于避碰路径规划来说,它的速度太慢。正如这里这里所描述的,IKFAST工具可以用于生成任何6dof机械手所需的运动学文件。这些文件作为插件与ros集成,而不是作为一种调用服务,以避免昂贵的通信相关开销。这涉及到创建一个启动文件,以将插件连接到arm_kinematics_constraint_aware 节点,如链接中所述。

路径精度(Path Accuracy)

上面概述的运动接口没有指定跟踪某一特定轨迹所需的精度。路径精度的高低限制将取决于特定机器人、控制器和ros接口驱动程序。ROS路径规划器和碰撞检查器使用路径点之间轨迹的高阶平滑。由机器人控制器执行的最终轨迹将遵循类似的“平滑”轨迹,但可能与“理想”计划轨迹不完全匹配。基于这个原因,机器人路径规划器在机器人模型中添加了一定数量的“填充”,以解释计划路径和实际路径之间的差异。这就产生了很高的无碰撞运动的概率。增加填充级别可以减少碰撞的几率。路径规划器和机器人控制器之间的更紧密的集成将减少路径执行误差和碰撞填充需求。然而,这种水平的集成超出了当前的ROS-Industrial努力的范围,可能需要机器人特有的解决方案。

实现(Implementation)

本部分详细介绍了ROS-Industrial的当前实施情况,以及它们与这些参考指南的的密切程度。

基本能力(Essential Capabilities)

以下功能对机器人与其他的ROS-Industrial组件的顺利交互来讲是必不可少的:

  • publish feedback_states
    • at a minimum, the names and positions fields
  • publish joint_states
    • at a minimum, the names and actual\positions fields
  • subscribe to JointPathCommand
    • at a minimum, execute the joint-positions in sequence at a default velocity

参考实现(参考实现)

这里可以找到实现这些功能的ros工业节点的参考实现。该实现使用一个简单的基于消息的套接字协议与工业机器人通信。
如果合适的话,提倡新的机器人考虑使用这个client实现。有关如何将机器人端服务器应用程序与ROS-Industrial Client节点集成的参考实现实例,可以参阅ABB和Motoman的相关实现实例。

硬件兼容性表(Hardware Compatibility List)

硬件兼容性列表文档,列举了支持的各种机器人的特定实现。在开发应用程序之前,请参阅此列表,以确定目标机器人平台是否支持所有必要的ROS接口。硬件兼容性列表文档详细描述了不同的机器人平台如何符合工业机器人驱动程序规范。它是为需要评估特定功能功能的开发人员和系统集成商而设计的。在这里可以找到更多的一般性兼容性信息。下面直接将硬件兼容性列表列上来:
ROS-Industrial Robot Driver Specification
ROS-Industrial Robot Driver Specification
ROS-Industrial Robot Driver Specification

相关文章:

  • 2022-12-23
  • 2022-02-22
  • 2021-07-05
  • 2022-12-23
  • 2021-10-07
  • 2021-11-07
  • 2022-12-23
  • 2021-04-01
猜你喜欢
  • 2021-04-23
  • 2022-12-23
  • 2021-08-06
  • 2021-07-03
  • 2021-10-03
  • 2021-12-31
  • 2021-11-05
相关资源
相似解决方案