规格:
Rapp指代rocon_app或者叫robot_app,用在机器人的控制中Robotics in Concert,这是通过 Rapp Manager 安装和执行的元数据。它旨在允许更高级别的控制器采用提供所需公共接口的系统,而不管其平台如何。Rapps 根据平台相关参数(例如启动)和 Rapp 继承的存在分为实现/虚拟和祖先/子级。
rapp类型
虚拟祖先:是rapp;包含公共接口,没有与平台相关的信息;不可执行;示例:rocon_apps/teleop
实现子:不完整的rapp;包含与平台相关的数据,但没有公共 API。它从父母那里继承参数,成为一个完整的 Rapp;示例:turtle_concert/teleop
实现祖先:是完整的rapp;包含要执行的完整信息;例 : turtle_concert/turtle_stroll
虚拟子:无效的rapp;有关详细信息,请参阅设计决策。
rapp参数
下表描述了每种 rapp 类型和要求的特征
R = 必需
O = 可选
N = 不允许
i = 从父级继承(如果不存在)
功能依赖关系
ROS中功能的概念是机器人拥有的大多数“能力”存在更高级别的接口。格式遵循功能接口规范。
- name: <capability interface name>
interface:
topics:
requires:
<interface topic>: <rapp topic>
provides:
<interface topic>: <rapp topic>
services:
requires:
<interface service>: <rapp service>
provides:
<interface service>: <rapp service>
actions:
requires:
<interface action>: <rapp action>
provides:
<interface action>: <rapp action>
设计决策
虚拟/实现rapp
如果存在以下两个,则它是 rapp 实现。否则,它是一个虚拟的rapp。
- compatibility : Rocon URI
- launch - <package_name>/</.launch>
如果是rapp以下三个参数是可选的
- icon
- capabilities
父 VS 祖先
如果rapp是连接的,继承则会涉及多个rapp,父是子继承的rapp,如果一个孩子从它继承,一个子可以同时是一个父。不从另一个子/父继承的父项是祖先。
child -> parent/child -> parent/child -> parent(ancestor)
子 VS 祖先
如果存在以下内容,则为子rapp。否则就是祖先的rapp。
- parent_name : <package_name>/<rapp name>
parent_name和public_interface是相互排斥的。
祖先可以是虚拟的也可以是实现的
子rapp必须是实现的
为什么没有虚拟子rapp
引入了虚拟和实现 rapp 的分离,以简化 rapp 组合并最大限度地提高各种平台之间的可移植性。Virtual Child被丢弃,因为其他三个都可以满足所有rapp设计选择。
列子
Chirp -虚拟祖先rapp
# rocon_apps/chirp display: Chirp description: Make an audible "chirp" sound. icon: chirp_bubble_icon.png public_interface: chirp.interface public_parameters: chirp.parameters
Chirp -子rapp是实现
# turtlebot_apps/chirp description: Make a "moo" sound. launch: chirp.launch compatibility: rocon:/turtlebot parent_name: rocon_apps/chirp
Kobuki Random Walker-功能型rapp
# kobuki_apps/random_walker display: Random Walker description: Makes Kobuki wander off and explorer the world compatibility: rocon:/kobuki|turtlebot2 launch: random_walker.launch.xml public_interface: random_walker.interface icon: random_walker.png required_capabilities: - name: std_capabilities/DifferentialMobileBase interface: topics: requires: '/cmd_vel': 'kobuki_random_walker_controller/commands/velocity' provides: [] - name: kobuki_capabilities/KobukiLED1 interface: topics: requires: '/kobuki_led1': 'kobuki_random_walker_controller/commands/led1' provides: [] - name: kobuki_capabilities/KobukiLED2 interface: topics: requires: '/kobuki_led2': 'kobuki_random_walker_controller/commands/led2' provides: []
输出
... <export> <rocon_app>RELATIVE_PATH_IN_PACKAGE</rocon_app> <!--<rocon_app>apps/chirp/chirp.rapp</rocon_app>--> </export> ...