资讯详情

ROS-Control专题:PR2的六个概念【2】

参考文:

pr2_mechanism - ROS Wiki

pr2_controller_interface - ROS Wiki

一、 摘要

ROS-control的基础是pr2,PR2(Personal Robot 2.2代个人机器人)Willow Garage数字2代表第二代机器人是公司设计的机器人平台。本文将在此介绍ROS中的pr2机制及相应的接口开发原理。

PR2有两个手臂,每个手臂有七个关节,手臂末端有一个可以张开的爪子;PR2.高分辨率摄像头、激光测距仪、惯性测量单元、触觉传感器等丰富的传感设备分别安装在头部、胸部、肘部和爪子上。在PR2底部有两台八核电脑作为机器人硬件的控制和通信中心,都安装了Ubuntu和ROS系统。

PR2和ROS有千丝万缕的关系,可以说ROS产生于PR2,也促成了PR2。ROS原本是Willow Garage为复杂的PR2机器人平台设计的软件框架依赖于强大的ROS,PR2可以独立完成各种复杂的任务,如PR2可以自己开门、找到插头给自己充电、打开冰箱取出啤酒、打简单的台球等等。只不过PR目前主要用于学术研究,价格高,能力不能满足商业应用的要求。

可见,PR2是ROS所有的软件代码都依赖于中元老机器人平台ROS,并且全部在ROS为我们学习和应用社区开放源代码ROS资源丰富。

二、Pr几个关键机制

pr2_mechanism 堆栈包括硬实时控制循环中的控制 PR2 机器人基础设施。

如果你想写一个实时控制器和 PR2(或类似)机器人交互,pr2_mechanism 堆栈包含有用的库。这些库包含在以下内容中 ROS 包中:

三 、pr2_controller_manager

控制器管理器 (CM) 该包提供了在硬实时循环中运行控制器的基础设施。

3.1 什么是 PR2 控制器管理器?

  • 硬实时控制电路

pr2_controller_manager 提供了一个硬实时循环来控制机器人机制。机器人机构由一组受力控制的关节表示(详见 pr2_mechanism_model)。对于 PR2 机器人,我们以 1000 Hz 控制电路的频率运行。控制器管理器为将自己的实时控制器加载到其控制回路中提供基础设施。每个加载到控制器管理器中的控制器每毫秒触发一次。请查看本教程,了解如何编写您的硬实时控制器。

  • 安全限制

控制器管理器确保没有加载控制器可以命令关节超过其安全限制。如有必要,控制员经理将减少联合努力,甚至朝相反的方向努力。有关更多详细信息,请查看安全限制页面。

  • 发布关节状态

通过控制器管理器 ROS 发布所有关节的状态作为 sensor_msgs/JointState 消息。这些消息以 100 Hz 频率出现在 joint_state 主题上。您可以通过设置joint_state_publish_rate 更改此发布频率的参数。

  • 操作控制器的工具

四、命令行工具

pr2_controller_manager请从命令行与控制器交互 pr2_controller_manager 工具。

4.1 与特定控制器交互,请使用:

rosrun pr2_controller_manager pr2_controller_manager <command> <controller_name>

  • load:加载控制器(结构和初始化)
  • unload:卸载控制器(销毁)
  • start:启动控制器
  • 停止:停止控制器
  • spawn:加载并启动控制器
  • kill:停止并卸载控制器

4.2 要获得控制器的状态,请使用:

rosrun pr2_controller_manager pr2_controller_manager <command>

下列命令可用:

  • list:按执行顺序列出所有控制器,并给出每个控制器的状态
  • list-types:列出控制器管理器知道的所有控制器类型。如果您的控制器不在此列表中,您将无法生成它。
  • list-joints:列出控制器管理器使用的所有关节和执行器名称。
  • reload-libraries:重新加载所有可用作插件的控制器库。当您正在开发控制器并想要测试新的控制器代码时,不需要每次重新启动机器人。这不会重新启动以前的控制器。
  • reload-libraries --restore:重新加载所有可用作插件的控制器库,并将所有控制器恢复到原始状态。

要一次自动加载和启动一组控制器,并一次自动停止和卸载这些相同的控制器,请使用 spawner 工具:

rosrun pr2_controller_manager spawner [--stopped] name1 name2 name3 

当您运行 spawner 除非您指定,否则列出的控制器将被加载并启动( --stopped)。当控制器启动时,Spawner 将继续运行。当你杀死 spawner (ctrl-c) 它会自动停止并卸载它最初启动的所有控制器。

4.4 非批量操作器

您可以自动停止一组控制器并稍后重新启动它们 unspawner 工具:

$ rosrun pr2_controller_manager unspawner name1 name2 name3

列出的控制器将停止,但不会卸载。 spawner 关闭,控制器将重新启动。

五、 创建启动文件

您可以运行 pr2_controller_manager 从启动文件中启动控制器。但即使在启动文件被删除后,控制器也会保持运行。相反,使用 spawner 工具自动从启动文件中加载、启动、停止和卸载控制器。当您启动 spawner 它将加载并启动控制器。当您停止 spawner(当启动文件被删除时)它将停止并卸载控制器。您的启动文件将如下所示:

<launch>    <node pkg="pr2_controller_manger" 
         type="spawner" 
         args="controller_name1 controller_name2" />
 </launch>

或者,如果您只想加载控制器,但尚未启动它:

 <launch>
   <node pkg="pr2_controller_manager" 
         type="spawner" 
         args="--stopped controller_name1 controller_name2" />
 </launch>

六、 ROS API

为了与来自另一个 ROS 节点的控制器进行交互,控制器管理器提供了五个服务调用:

pr2_controller_manager

Published Topics

joint_states (sensor_msgs/JointState)

  • 每个关节的测量位置、速度和力度

mechanism_statistics (pr2_mechanism_msgs/MechanismStatistics)

  • 此消息包含有关关节、控制器和执行器的统计信息。

Services

pr2_controller_manager/load_controller (pr2_mechanism_msgs/LoadController)

  • 服务请求包含要加载的控制器的名称,响应包含指示成功或失败的布尔值。

pr2_controller_manager/unload_controller (pr2_mechanism_msgs/UnloadController)

  • 服务请求包含要卸载的控制器的名称,响应包含指示成功或失败的布尔值。控制器只有在停止状态时才能卸载。

pr2_controller_manager/switch_controller (pr2_mechanism_msgs/SwitchController)

  • 服务请求包含要启动的控制器名称列表、要停止的控制器名称列表和指示严格性的 int(BEST_EFFORT 或 STRICT)。 STRICT 表示如果出现任何问题(控制器名称无效、控制器启动失败等),切换将失败。 BEST_EFFORT 表示即使控制器出现问题,服务仍会尝试启动/停止剩余的控制器。服务响应包含一个指示成功或失败的布尔值。如果您只是停止或仅启动控制器,则要停止或启动的控制器列表可以是一个空列表。

pr2_controller_manager/list_controllers (pr2_mechanism_msgs/ListControllers)

  • 该服务返回当时在 pr2_controller_manager 中加载的所有控制器名称。此外,该服务返回每个控制器的状态:运行或停止。

pr2_controller_manager/list_controller_types (pr2_mechanism_msgs/ListControllerTypes)

  • 该服务返回 pr2_controller_manager 已知的所有控制器类型。只能构造已知的控制器类型。要让 pr2_controller_manager 了解您自己的控制器类型,请按照本教程中的说明使用插件库。

pr2_controller_manager/reload_controller_libraries (pr2_mechanism_msgs/ReloadControllerLibraries)

  • 该服务重新加载所有可作为插件使用的控制器库。这在您开发控制器时很方便,并且您想测试新的控制器代码而无需每次都重新启动机器人。此服务仅在未加载控制器时有效。

Parameters

pr2_controller_manager/joint_state_publish_rate (double, default: 100.0)

  • Joint_states 主题上消息的发布频率

pr2_controller_manager/mechanism_statistics_publish_rate (double, default: 1.0)

  • 关于mechanism_statistics 主题的消息发布频率

标签: 传感器pr9268201

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台