Appearance
插件开发指南(v1.1)
1 前言
AuboCaps 为 AUBO 机器人的 ARCS 软件提供插件开发需要的所有接口与配置。用户可根据本手册提供的信息进行插件开发,加载到 ARCS 软件中,配合 AUBO 机器人,扩展机器人的功能。
1.1 ARCS 工作流程
插件最终都是在示教器上运行,因此插件的部分功能(主要在程序节点中)需要配合示教器软件进行。
在 ARCS 软件架构中,主要有示教器和控制器两个部分。ARCS 软件与机械臂通过脚本进行沟通,其流程大体如下:
- 用户在线编程或者进行配置相关参数;
- 将程序或配置的参数记录至示教器中;
- 示教器产生脚本文件;
- 示教器将所有脚本文件一同发送给控制器;
- 控制器生成机器人控制语言,然后下发给机械臂,机械臂执行相关操作。
(插入流程图)
1.2 插件开发的主体任务
由 ARCS 工作流程可知,插件开发的实质是为机械臂控制器提供来自插件的脚本。在示教器中,脚本源自安装节点和程序节点,因此插件开发的主体任务是完成插件的安装节点与程序节点模块。
1.2.1 安装节点
安装节点主要负责配置该插件的各类参数,并保存这些配置。类似在使用相机时,需要配置相机的基本参数,如曝光时间、相机内参等,安装节点就负责设置这些参数。
需要注意的是,安装节点在程序中只实例化一次,这类似安装其他软件时,只需要安装一次。因为参数是一个全局的概念,之后的实体机操作均基于该参数,因此只需要实例化一次。此外,该特性也可以大大优化运行效率。
1.2.3 程序节点
程序节点主要根据参数生成脚本,执行具体功能。比如机械臂移动到某一点的时候,在该点设置一个程序节点负责打开抓手;机械臂移动到另一个节点的时候,设置一个程序节点负责关闭抓手。
2 插件模板结构
2.1 API
ARCS 提供 API 接口,用户可以在插件开发过程中直接调用,缩短开发时间。根据不同 API 在安装节点和程序节点中的使用限制,可以将 API 分为两大类:domain_api 和 aubo_cpa_api。其中 domain_api 中的 system_api、user_interface_api、application_api 均既可用于安装节点,又可用于程序节点。aubo_cpa_api 中的 program_api 仅可用于程序节点,installation_api 则仅可用于安装节点。domain_api 和 aubo_cpa_api 的具体描述请参考下图。
注意:各接口的详细信息请参见《附录:aubo_caps API》
2.2 API 使用概述
在模板中,安装节点和程序节点中均包含 service、contribution 和 view 三个类。其中service 类是节点的服务,可以创建 contribution 和 view 类;contribution 类中包含与数据相关的内容,view 类则包含与界面相关的内容,具体信息如下所示:
安装节点 service 类的接口:
getTitle
、getIcon
、createView
、configureContribution
、createInstallationNode
程序节点 service 类的接口:
getTitle
、getIcon
、getId
、createView
、configureContribution
、createNode
安装节点 contribution 类中的 api_provider_ 接口:
systemApi
、userInterfaceApi
、installationApi
程序节点 contribution 类中的 api_provider_ 接口:
systemApi
、userInterfaceApi
、programApi
安装节点和程序节点 view 类中 view_api_ 接口:
systemApi
、userInterfaceApi
DataModel 存取数据:
- 配置数据一般保存在【/root/arcs_ws/program】文件夹下,当 aubo_scope 启动时,保存的配置数据会加载到 DataModel 中。
- 接口 DataModelPtr model_{ nullptr } 在 installation 和 program 中分别提供了一个。该接口可以将该项数据存放到 DataModel 中(但目前只提供部分数据类型,详情请参见《附录:aubo_caps API》)。
- 接口 DataModelPtr model_{ nullptr } 使用方式:
- 添加头文件
#include "aubo_caps++/meta_type.h"
。 - 在 contribution 类的 private 区域添加
DECLARE_ATTR(名称,类型,初始值)
。
- 添加头文件
3 插件开发流程
3.1 环境配置
软件环境:
分类 名称 推荐版本 操作系统 Ubuntu 16 及以上 软件 QT Creator 5.0.0 及以上 软件配置 QT 5.12.9 及以上 软件配置 GCC 7.5 及以上 打开终端,进行以下操作,安装 aubo_caps:
git clone http://git.aubo-robotics.cn:8001/aubo_plus/template.git cd template chmod +x ./INSTALL.sh ./INSTALL.sh
操作完成以后,可以进行以下操作查看是否操作成功:
打开 QT Creator,单击【文件 > 新建文件或项目】。
弹框中选择【Library】,查看是否存在 aubo_caps。
如果没有 aubo_caps ,请尝试重新进行第 2 步操作。
3.2 新建插件工程
打开 QT Creator,单击菜单栏【文件 > 新建文件或项目】。
在【新建文件或项目】的向导中单击【Library > aubo_caps】,单击【Choose】。
设置新工程的名称及保存路径,单击【下一步】。
设置工程详细信息:厂商名字(Vendor name)、邮箱(Email)、工程描述(Description)、官网链接(URL),单击【下一步】。
选择编译系统,单击【下一步】。目前仅支持 CMake。
选择编译工具链,单击【下一步】。选择 Qt 5.12.9 + gcc7.5 工具链。
检查添加到工程的文件,单击【完成】。
3.3 编译工程
单击工程名字,右键弹出下拉菜单,单击【执行 CMake(Run CMake)】。
- CMake 将联网下载依赖,因此这一步要求开发设备必须联网;
- 根据网络连接情况,CMake 过程会持续一段时间。
CMake 完成之后即可对该工程进行编译,单击工程名字,右键弹出下拉菜单,单击【构建(Build)】。
3.4 工程内添加新节点
菜单栏单击【文件 > 新建文件或工程】,在【新建文件或项目】的向导中单击【aubo_caps > Aubo installation/program Node】,单击【Choose】。
设置安装/程序节点名称(Installation/Program Node name)。
单击【浏览(Browse)】设置节点路径。在【src】文件夹下新建文件夹【installation】或【program】,单击【打开(Open)】选择文件夹。单击【下一步】。
- 安装节点对应【installation】文件夹,程序节点对应【program】文件夹。
选择节点类型,单击【下一步】。
检查将要添加到工程的文件列表,单击【完成】。
添加节点后,需对【CMakeLists.txt】和【activator.cpp】进行相应的配置:
在【CMakeLists.txt】中添加节点源码。由于在【src】文件夹下已经创建【installation】文件夹或【program】文件夹,因此将下面对应的语句取消注释(删除前面的 "#")即可。
... ## file(GLOB_RECURSE install_src "src/installation/*") ## file(GLOB_RECURSE program_src "src/program/*") ...
在【activator.cpp】中添加响应语句。
将对应的服务类头文件引入。
#include "program/firstnode_program_node_service.h"
<img class="img-center" src="./pics/qtcreator-cpp-add-include.png"style="width:40em;">
取消对应需要注册的节点类型的注释,修改类名。
单击工程名字,右键弹出下拉菜单,单击【构建(Build)】。
4 插件打包与加载
示教器软件第一次载入某个插件时,需先在开发环境下将插件打包成 zip 文件,然后将打包后的文件拷贝至示教器软件指定路径下,打开示教器软件加载插件,方可使用插件。
插件载入示教器软件后,如果需要更新,只需要更新【.../arcs_ws/extensions】文件夹下对应插件的内容即可,具体内容请参见 “5. 插件调试”。
4.1 准备工作
插件中的 package.json 文件用于描述插件信息,其包含的字段如下:
json
"name": "plugin_name", # 插件名称
"displayName": "plugin_name",
"group": "aubo_scope",
"description": "Visual localization plugin",
"version": "0.1.0",
"publisher": "aubo-robotics",
"url": "https://www.aubo-robotics.com",
"email": "aubo_developer@aubo-robotics.com",
"license": "aubo",
"icon": "",
"api_version": "0.6.0" # 插件当前使用的 api 版本
其中,api_version 用于表示开发当前插件所使用的 aubo_caps_interface 版本,是打包前必须添加的字段。示教器软件会验证当前插件所用的 api 版本,若所用的版本大于示教器软件所支持的版本,将无法加载插件(可通过升级示教器软件版本解决无法加载问题)。若 api_version 为空可能会因为兼容问题导致插件不可用。
4.2 插件打包
插件开发环境下,打开终端,运行以下指令,通过执行【deploy,sh】脚本进行打包。
cd <工程根目录> chmod +x ./deploy.sh ./deploy.sh ## 插件将生成在 build 目录
脚本运行成功后,【build】文件夹中将创建一个 zip 文件,即打包成功。
4.3 插件加载与卸载
请参见 示教器插件的加载与卸载 。
5 插件调试
请参见 示教器插件调试方案 。
6 插件与资源文件
请参见 插件资源加载方式说明 。
7 插件与 ARCS 内置键盘
请参见 示教器内置键盘使用说明。
8 插件翻译
请参见 插件翻译文件使用说明 。
9 RPC 接口
请参见 RPC 接口使用说明 。
附录:AuboCaps API 总览
本文将详细介绍各类API的功能,读者可以通过浏览本文对 aubo_scope API
系统有个整体把握,在 aubo_caps
开发过程中能更好的使用这些API。
1 域 API
1.1 系统 API (systemApi)
getmajorVersion()
: 获取软件的主要版本。getMinVersion()
: 获取软件的最小版本。getBugfixVersion()
: 获取软件的 bug 修复版本 。getBuildNumber()
: 获取软件的内部版本号。getLocale()
: 获取本地语言。getlocale for Programming Language()
: 获取系统设置语言。getUnitType()
: 获取系统当前的单位类型。getSerialNumber()
: 获取机器人的序列号。isRealRobot()
: 如果控制的是真实物理机器人返回 true,如果是模拟的返回 false
获取最大位置的关节弧度。
getJointMaxPositions()
: 获取关节最大位置。getJointMinPositions()
: 获取关节最小位置。getJointDefaultVelocity()
: 获取关节默认速度。getJointDefaultAcceleration()
: 获取关节默认的加速度。getJointMaxVelocity()
: 获取关节最大速度。getJointMaxAcceleration()
: 获取关节最大加速度。getTcpDefaultVelocity()
: 获取 TCP 的默认速度。getTcpDefaultAcceleration()
: 获取 TCP 的默认加速度。getTcpMaxVelocity()
: 获取 TCP 的最大速度。getTcpMaxAcceleration()
: 获取 TCP 的最大加速度。getTcpMaxDistance()
: 获取 TCP 的最远距离。getMaxPayloadMass()
: 获取最大有效载荷的质量。getMaxPayloadDistance()
: 获取最大有效载荷的距离。getHomeDefaultPosition()
: 获取 home 默认位置。getHomePackagePosition()
: 获取 home paceage 位置。getRobotDhParams()
:获取机器人 Dh 参数(连杆)。getMaxPower()
: 获取最大力。getMinPower()
: 获取最小力。getMaxMomentum()
: 获取最大动量。getMinMomentum()
: 获取最小动量。getMaxStoppingTime()
: 获取最大的 stop 时间。getMinStoppingTime()
: 获取最小的 stop 时间。getMaxStoppingDistance()
: 获取最大的 stop 距离。getMinStoppingDistance()
: 获取最小的 stop 距离。getMaxToolForce()
: 获取工具的最大力。getMinToolForce()
: 获取工具的最小力。getMaxElbowSpeed()
: 获取最大的肘部速度。getMaxElbowForce()
: 获取最大的肘部力量。getMinElbowForce()
: 获取最小的肘部力量。getStandardDigitalInputConfigure()
: 获取标准的数字输入配置。getToolDigitalInputConfigure()
: 获取 Tool 的数字输入配置。getConfigureableDigitalInputConfigure()
: 获取 configureable 的数字输入配置。getStandardDigitaloutputConfigure()
: 获取标准的数字输出配置。getToolDigitaloutputConfigure()
: 获取 Tool 的数字输出配置。getConfigureableDigitaloutputConfigure()
: 获取 configureable 的数字输出配置。getStandardAnalogoutputConfigure()
: 获取标准的模拟输出配置。getToolAnalogoutputConfigure()
: 获取 Tool 的模拟输出配置。getStandardAnaloginputConfigure()
: 获取标准的模拟输入配置。getToolAnaloginputConfigure()
: 获取 Tool 的模拟输入配置。getStaticSafetyInputConfigure()
: 获取安全系统配置的输入值。getStaticSafetyoutputConfigure()
: 获取安全系统配置的输出值。getStaticLinkInputConfigure()
:获取 Link 输入配置。getStaticLinkOutputConfigure()
:获取 Link 输出配置。
1.2 应用程序 API (applicationApi)
getIoModel()
: 获取机器人 IO 数据。getFeatureModel()
: 获取机器人环境坐标系配置信息。getTcpModel()
: 获取机器人工具中心点的所有配置。getPayloadModel()
: 获取机器人末端执行器的有效负载配置信息。getVariableModel()
: 获取所有的程序变量和表达式信息。getValueFactory()
: 创建复杂的变量以及表达式。getDeviceManager()
: 提供设备管理器接口,访问所有已注册的设备。
1.3 用户界面 API (userInterfaceApi)
getUserInteraction()
: 提供请求输入功能的接口,这些接口如下所示:
getUserDefinedRobotPosition(): 要求用户去定义机器人位姿,并返回该位姿
getRobotThumb(): 获取机器人缩略图;
getKeyboardInputFactory():创建各类键盘
requestUserToMoveJoint(): 根据用户要求位姿去移动关节
2 安装 API
安装 API 是对应用程序 API 的扩展,因此首先它具有应用程序 API 的所有功能,其次扩展的 API 功能如下:
getFunctionModel()
: 为aubo_scopet
提供脚本函数。getTcpContributionModel()
: 创建、配置、获取、更新 TCP。getFeatureContributionModel()
: 创建、配置、获取、更新 Feature。getPayloadContributionModel()
: 创建、配置、获取、更新 Payload。
3 程序 API
Program API
是服务于程序域中的程序节点,而程序节点可能需要获取有关机器人的系统信息(例如序列号,软件版本)这涉及到 System API
的访问,因此 Program API
中提供了对 System API
访问的接口 getSystemApi()
程序节点还可能需要与用户交互的功能,这涉及到 UserInterface API
的访问,因此 Program API
中提供了对 UserInterface API
访问的接口 getUserInterfaceApi()
。而 Program API
还提供了仅在程序域中才有意义的API,这些API功能如下:
getProgramModel()
:在这个接口中有以下功能可使用。
getProgramNodeFactory(); //创建各类程序节点(包括已经注册的插件提供的程序节点)
getTreeNode(ProgramNodeContribution *root); //在程序树中添加、删除、移动子节点
getWaypointModel()
:创建、配置路点信息。
getUndoRedoManager()
: 记录程序节点可撤销更改。
4 节点数据
4.1 程序节点
getId()
: 获取程序节点的唯一标识符。getTitle()
: 获取程序节点在程序树上应显示的文本。getIcon()
: 获取程序节点在程序树上应显示的图标的资源路径。configureContribution()
: 为 Contribution 设置配置项。createView()
: 为程序节点创建相应界面。createNode()
: 为程序节点创建 Contribution。
4.2 安装节点
getTitle()
: 获取安装节点在界面上应显示的名字。getIcon()
: 获取安装节点在界面上应显示的图标的资源路径。configureContribution()
: 为 Contribution 设置配置项。createView()
: 为安装节点创建相应界面。createInstallationNode()
: 为安装节点创建 Contribution。
4.3 DataModel
get()
: 获取指定键对应的值。set()
: 设定指定键对应的值。getKeys()
: 获取所有的键。remove()
: 移除一项指定的键值。