参考文:

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可以自己开门、找到插头给自己充电、打开冰箱取出啤酒、打简单的台球等等。只不过PR2价格高昂,而且能力还达不到商业应用的要求,如今主要用于学术研究。

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

二、Pr2的几个关键机制

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

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

  • pr2_controller_interface: The C++实时控制接口。interface for a realtime controller

  • pr2_controller_manager: 允许您在实时循环中运行和管理多个控制器的基础架构

  • pr2_hardware_interface: The C++ PR2 硬件接口,包含执行器、压力传感器、加速度计、数字输出和投影仪接口。

  • pr2_mechanism_model: 努力控制机器人的模型,基于 urdf 机器人描述格式。

  • pr2_mechanism_msgs: 用于与实时控制回路通信的消息,以及包含实时控制器、关节和执行器状态的消息。

  • realtime_tools: 一种实时发布到 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:重新加载所有可作为插件使用的控制器库并将所有控制器恢复到其原始状态。

4.3 批量作业器(spawner)

要一次自动加载和启动一组控制器,并一次自动停止和卸载这些相同的控制器,请使用 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_manager" 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 主题的消息发布频率

ROS-Control专题:PR2的六个概念【2】相关推荐

  1. ROS-Control专题:PR2的六个概念【4】

    一. 提要 ROS-control是ROS的重要概念,而  ROS-control是通过PR2开发而产生的,因此,实质上,吃透PR2实质就是吃透了ROS-control: ROS-control的基础 ...

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

    参考文: pr2_mechanism - ROS Wiki pr2_controller_interface - ROS Wiki 一. 提要 ROS-control是ROS的重要概念,而  ROS- ...

  3. ROS-Control专题:PR2的六个概念【6】

    一. 摘要 要学习好ROS-control,先学好PR2.ROS-control的基础是pr2,PR2(Personal Robot 2,简称人形机器人2代)是Willow Garage公司设计的机器 ...

  4. ROS-Control专题:PR2的六个概念【01】

    参考文: pr2_mechanism - ROS Wiki pr2_controller_interface - ROS Wiki 一. 摘要 要学习好ROS-control,先学好PR2.ROS-c ...

  5. 20189221 2018-2019-2 《密码与安全新技术专题》第六周作业

    20189221 2018-2019-2 <密码与安全新技术专题>第六周作业 课程:<密码与安全新技术专题> 班级: 201892 姓名: 郭开世 学号:20189221 上课 ...

  6. 2018-2019-2 20189206 《密码与安全新技术专题》 第六次作业

    学号 2018-2019-2 <密码与安全新技术专题>第六次作业 课程:<密码与安全新技术专题> 班级: 1892 姓名: 王子榛 学号:20189206 上课教师:王志强 上 ...

  7. 20189216 2018-2019-2 《密码与安全新技术专题》第六次作业

    20189216 2018-2019-2 <密码与安全新技术专题>第六次作业 课程:<密码与安全新技术专题> 班级: 1892 姓名: 鲍政李 学号:20189216 上课教师 ...

  8. ROS探索总结(十六)(十七)(十八)(十九)——HRMRP机器人的设计 构建完整的机器人应用系统 重读tf 如何配置机器人的导航功能

    ROS探索总结(十六)--HRMRP机器人的设计 1. HRMRP简介         HRMRP(Hybrid Real-time Mobile Robot Platform,混合实时移动机器人平台 ...

  9. ROS与Arduino学习(六)Logging日志

    ROS与Arduino学习(六)Logging日志 Tutorial Level:客户端与服务器 Next Tutorial:小案例节点通信      本节较为简单告诉大家如何向系统发布日志信息. T ...

最新文章

  1. 不可思议的数字:互联网每天到底能产生多少数据?
  2. XSLT - 利用template实现for循环
  3. matlab uitree update,elementUI tree 懒加载 更新节点
  4. sqlserver中的查询两个结果集的差的运算
  5. 文本处理三剑客之 awk
  6. 【jzoj】2018/2/2 NOIP普及组——D组模拟赛
  7. 你真的以为你了解Java的序列化了吗
  8. linux自动读取麦克风,检测用户向麦克吹气
  9. easydatasource能删除吗_面试官:能跟我说一下rm删除文件之后,空间都发生了什么吗?
  10. 计算机教室电脑无法启动,电子教室教师端不能启动没开机的学生机的解决办法...
  11. 文字图片转换成html代码,IMG4Me 网站在线把文字转换为图片
  12. 如何制作和部署war包
  13. androidx指纹验证
  14. android mjpg格式,Camera常用格式MJPEG和jpeg-turbo库
  15. 【软件工程】:非功能需求
  16. mobilenet压缩
  17. NLP创业破局,如何摘取更高处的果实
  18. 基于Php门禁系统设计与实现
  19. 麦克风阵列声源定位实现
  20. 蓝牙室内定位方案-灵思科

热门文章

  1. 最小字典序列--选靓号
  2. 不耗流量!云电脑用的是自己的网络吗?
  3. 最好的ADB教程,从下载安装到使用【win+ linux】
  4. 老机器Dell 710 M 安装Lubuntu
  5. 显示器恢复出厂设置 详细步骤
  6. C语言 子函数改变指针指向的值
  7. windows系统,设备和驱动器中的wps云盘,如何删除?
  8. 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Auto Encoder 自编码器 + PyTorch实战
  9. 解决阿里云盾占用80端口的问题
  10. 鲁企成南京青奥会“大数据交警”