遨博协作机器人高级编程 - 遨博机器人SDK用户自定义算法接口介绍与使用(转载)

目录

一、简介

二、环境版本

三、开发环境部署

1.二次开发资料下载

2. AUBO PE编程仿真环境配置

四、linux C++ SDK示例

1. 编程环境

2. 加载C++ SDK工程

3. linux C++ SDK 文件构成

4.运行SDK示例

五、构建用户自定义算法SDK示例工程

1.Linux C++ SDK透传接口

2.  创建新项目

3.导入遨博机器人SDK linux_C++依赖库

4.编写程序

5.编译运行

六、小结


一、简介

大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人高级编程),为方便离线编程与扩展机器人的应用领域,遨博协作机器人开发时增加了脚本编程和SDK开发环境等可供用户进行二次开发的开放性接口。用户可以通过二次开发接口实现获取机器人运行状态和运动控制等功能。脚本编程方面支持Lua与Python两种解释性编程语言,SDK支持C、C++、C#和Python四种编程语言。

本篇文章主要针对SDK开发方面进行讲解,掌握SDK开发示例功能包的获取与使用,掌握基于C++ SDK的用户自定义算法接口的开发流程。

二、环境版本

  1. 主机系统版本:Windwos10 64位
  2. 处理器型号:Intel-i7
  3. 虚拟机版本:VMware Workstation 16 Pro
  4. 示教器版本:AUBOPE V4.5.44
  5. SDK版本:C++ V1.3.2

三、开发环境部署

1.二次开发资料下载

(1)注册并登录遨博官网(https://www.aubo-robotics.cn/)。

  1. 点击【服务支持】-【资料下载】,将“AUBO PE虚拟机”和“SDK应用开发包”文件下载到本地电脑(D:\遨博机器人SDK开发)并解压。

说明:若使用AUBO PE教育版虚拟机镜像,可关注“遨博教育生态”微信公众号留言获取。

“SDK应用开发包”文件说明:

“AUBO PE虚拟机镜像”使用方法可参考“AUBO虚拟机使用说明.pdf”文档。

2. AUBO PE编程仿真环境配置

在没有真实机械臂环境的情况下,可以通过AUBO PE虚拟机环境进行机械臂仿真与SDK开发。由于SDK提供了多种系统版本的开发包,首先要做的就是配置VMware虚拟机网络,确保不同系统环境下SDK开发能够正常与AUBO PE仿真环境进行通讯。

  1. Vmware环境加载AUBO PE系统

用户需提前自行安装VMware WorkStation软件,之后鼠标双击“AUBOPE-V4”目录下的“aubo.vmx”文件。

(2)虚拟机网络配置

在VMware界面左侧点击【编辑虚拟机设置】,虚拟机设置界面点击【网络适配器】,将网络连接选择为【NAT模式】。

(3)进入AUBO PE系统

本课程使用AUBO PE教育版环境,系统启动如图所示。

双击桌面“AUBOPE”图标启动,自动加载进入“机器人初始化”界面。交互信息窗口点击【Yes】进入仿真模式,之后依次点击提示弹窗中的确认按钮。

进入主界面如图所示。

点击【关于】按钮,查看当前示教器版本信息,如图。

 (4)获取AUBO PE系统网络IP地址

依次点击【设置】-【系统】-【网络】,在网络调试窗口下点击【ifconfig】按钮,下方终端打印网卡详细信息,如上图所示,获取的IP地址为:192.168.136.131。

(5)Windows系统与AUBO PE系统互相进行ping通讯测试。

Windows系统下依次点击【设置】-【网络和Internet】-【更改适配器选项】,双击【以太网】,点击【详细信息】可查看当前电脑IP地址为172.15.253.168,如图。

 在各自环境下通过ping命令测试网络通讯是否正常。

四、linux C++ SDK示例

1. 编程环境

基于 AUBOPE 虚拟机自带的 Qt Creator。

2. 加载C++ SDK工程

(1)打开AUBO PE系统文件管理器,在用户目录下新建名称为sdk的文件夹。

  1. 将Windows系统下下载的C++ SDK压缩包拖拽拷贝至上述sdk文件夹下并解压。

 (3)点击AUBO PE系统任务栏左侧QT图标,启动Qt Creator,之后点击欢迎界面右侧的【Open Project】,浏览定位到上述解压文件夹下,打开 AuboInterfaceExample.pro工程文件。

 在项目窗口默认使用qt5.5.1版本,之后点击【Configure Project】按钮。

 等待项目构建完成,在编程界面,依次点开项目目录,文件结构如图所示。

3. linux C++ SDK 文件构成

  1. 《dependents》:AUBO 依赖库。
  2. 《example》:共9个例子,基本覆盖机器人的所有控制接口。
  3. AuboInterfaceExample.pro:项目文件。
  4. main.cpp:主函数,运行某个例子(不需要运行的例子注释掉)。

9个example功能如下表所示。

示例名

说明

example_0

工程模板。登录,初始化,上电,断电, 退出登录。

example_1

机械臂相关状态的获取。回调函数的方式获取实时路点,末端速度,机械臂的事件

example_3

关节运动

example_4

直线运动

example_5

轨迹运动

example_6

直线或关节方式运动至目标位置

example_8

正逆解

example_9

IO 状态获取、 IO 控制

example_toolio

工具 IO 操作

4.运行SDK示例

以运行example_3关节运动为例。

(1)取消main.cpp 中关节运动函数的注释

(2)打开example_3.cpp,修改IP

说明:本SDK示例程序运行在AUBO PE仿真环境下,可使用本地回环地址(127.0.0.1)或仿真环境IP(192.168.136.131)。

若SDK示例程序运行在非AUBO PE系统下,需填写AUBO PE系统设定的IP(192.168.136.131)。

(3)编译运行

首先点击左下方的编译图标进行程序编译,构建完成后点击绿色三角运行按钮运行SDK example_3工程。

(4)观察终端打印信息及机械臂动作过程

会观察到机械臂循环在两个路点之间进行关节运动。调用SDK接口函数为robotServiceJointMove。关闭右侧终端即可结束程序运行。

五、构建用户自定义算法SDK示例工程

下面讲解基于上述Qt Creator环境,从头开始创建遨博机器人SDK工程。

1.Linux C++ SDK透传接口

(1)进入 TCP 转 CAN 透传模式 robotServiceEnterTcp2CanbusMode

int  robotServiceEnterTcp2CanbusMode();

函数功能

进入CAN透传模式

返回值

调用成功返回ErrnoSucc,错误返回错误号

(2)退出TCP转CAN透传模式 robotServiceLeaveTcp2CanbusMode

int  robotServiceLeaveTcp2CanbusMode();

函数功能

退出can透传模式

返回值

调用成功返回ErrnoSucc,错误返回错误号

(3)发送坐标数据到关节CAN总线 robotServiceSetRobotPosData2Canbus

int robotServiceSetRobotPosData2Canbus(double jointAngle[aubo_robot_namespace::ARM_DOF]);

函数功能

通过透传将关节角度信息发送至驱动器

参数描述

jointAngle:六个关节角,单位rad

返回值

调用成功返回 ErrnoSucc,错误返回错误号

2.  创建新项目

打开Qt Creator,依次点击【欢迎】-【New Project】-【非Qt项目】-【纯C++语言项目】-【Choose】。

在接下来的项目介绍和位置窗口填写工程名及保存位置,本例程工程名称为“Custom_SDK”,保存至上述创建的sdk文件夹下。

下一步选择Qt版本为qt5.5.1。

汇总面点击【完成】,创建完成如图所示。

3.导入遨博机器人SDK linux_C++依赖库

把遨博机器人SDK C++示例工程【AuboInterfaceExample】目录下的【dependents】文件夹拷贝到上述工程Custom_SDK.pro文件同一路径下。

修改Custom_SDK.pro文件,添加以下内容:


    
    
  1. unix{
  2.     # 32 bit OS
  3.     contains(QT_ARCH, i 386){
  4.         CONFIG + = c + + 11
  5.         DEFINES + = _GLIBCXX_ USE_CXX 11_ABI = 0
  6.         INCLUDEPATH + = $$PWD /dependents /robotSDK /inc
  7.         LIBS + = -L$$PWD /dependents /robotSDK /lib /linux_x 32 / -lauborobotcontroller
  8.         LIBS + = -lpthread
  9.     }
  10.     # 64 bit OS
  11.     contains(QT_ARCH, x 86_ 64){
  12.         INCLUDEPATH + = $$PWD /dependents /robotSDK /inc
  13.         LIBS + = -L$$PWD /dependents /log 4cplus /linux_x 64 /lib / -llog 4cplus
  14.         LIBS + = -L$$PWD /dependents /robotSDK /lib /linux_x 64 / -lauborobotcontroller
  15.         LIBS + = -lpthread
  16.     }
  17. }

4.编写程序

(1)向Custom_SDK工程中添加新文件

 鼠标右键【Custom_SDK】,点击【添加新文件】,在新建文件窗口依次点击【C++】 - 【C++ Class】-【Choose】。

 类名填写为“custom_demo”,之后点击【下一步】。

 汇总页面点击【完成】,添加完成后界面如下。

 (2)编写头文件

在【custom_demo.h】头文件内新增如下代码:


    
    
  1. #ifndef CUSTOM_DEMO_H
  2. #define CUSTOM_DEMO_H
  3. #include "AuboRobotMetaType.h"
  4. #include "serviceinterface.h"
  5. class custom_demo
  6. {
  7. public:
  8.     static void demo();
  9. };
  10. #endif // CUSTOM_DEMO_H

(3)编写cpp源程序

修改【custom_demo.cpp】,新增如下代码:


    
    
  1. #include "custom_demo.h"
  2. #include <unistd.h >
  3. #include <math.h >
  4. #include < string.h >
  5. #include <stdio.h >
  6. #include <sstream >
  7. #include <fstream >
  8. #define SERVER_HOST "127.0.0.1"
  9. #define SERVER_PORT 8899
  10. ServiceInterface robotService;
  11. void custom_demo ::demo()
  12. {
  13.     int ret = aubo_robot_namespace ::InterfaceCallSuccCode;
  14.     / ** Interface call: login ** * /
  15.     ret = robotService.robotServiceLogin(SERVER_HOST, SERVER_PORT, "aubo", "123456");
  16.     if(ret = = aubo_robot_namespace ::InterfaceCallSuccCode)
  17.     {
  18.         std ::cout < < "login successful." < <std ::endl;
  19.     }
  20.     else
  21.     {
  22.         std ::cerr < < "login failed." < <std ::endl;
  23.     }
  24.     / ** If the real robot arm is connected, the arm needs to be initialized.  ** /
  25.     aubo_robot_namespace ::ROBOT_SERVICE_STATE result;
  26.     / /Tool dynamics parameter
  27.     aubo_robot_namespace ::ToolDynamicsParam toolDynamicsParam;
  28.     memset( &toolDynamicsParam, 0, sizeof(toolDynamicsParam));
  29.     ret = robotService.rootServiceRobotStartup(toolDynamicsParam / **Tool dynamics parameter ** /,
  30.                6        / *Collision level * /,
  31.                true     / *Whether to allow reading poses defaults to true * /,
  32.                true,    / *Leave the default to true * /
  33.                1000,    / *Leave the default to 1000 * /
  34.                result); / *Robot arm initialization * /
  35.     if(ret = = aubo_robot_namespace ::InterfaceCallSuccCode)
  36.     {
  37.         std ::cout < < "Robot arm initialization succeeded." < <std ::endl;
  38.     }
  39.     else
  40.     {
  41.         std ::cerr < < "Robot arm initialization failed." < <std ::endl;
  42.     }
  43.     / ** 用户自定义业务逻辑 start ** /
  44.     std ::cout < < "CAN透传模式..." < <std ::endl;
  45.     double wp 1[ 6] = {};
  46.     wp 1[ 0] = - 17.254444 *M_PI / 180;
  47.     wp 1[ 1] = 36.019474 *M_PI / 180;
  48.     wp 1[ 2] = 91.554089 *M_PI / 180;
  49.     wp 1[ 3] = 66.159787 *M_PI / 180;
  50.     wp 1[ 4] = - 89.807699 *M_PI / 180;
  51.     wp 1[ 5] = - 0.000420 *M_PI / 180;
  52.     / *关节运动至初始预设路点 * /
  53.     robotService.robotServiceJointMove(wp 1, true);
  54.     / *进入CAN 透传模式 * /
  55.     robotService.robotServiceEnterTcp 2CanbusMode();
  56.     / *用户自定义算法获取路点数据后下发给透传接口 * /
  57.     for(int i = 0; i < 1000; i + +)
  58.     {
  59.     wp 1[ 0] = wp 1[ 0] + 0.001;
  60.     / /std ::cout < < wp 1[ 0] < < std ::endl;
  61.     / /将关节角透传到关节驱动器
  62.     robotService .robotServiceSetRobotPosData 2Canbus(wp 1);
  63.     usleep( 1000 * 5); / /
    透传接口发送频率需大于 200Hz
  64.     }
  65.     robotService.robotServiceLeaveTcp 2CanbusMode();
  66.     sleep( 1);
  67.     / ** 用户自定义业务逻辑 end ** /
  68.     / ** Robotic arm shutdown ** /
  69.     robotService.robotServiceRobotShutdown();
  70.     / ** Interface call: logout  ** /
  71.     robotService.robotServiceLogout();
  72. }

(4)修改main.cpp源文件

调用custom_demo.cpp中的用户自定义函数功能,更改如下:


    
    
  1. #include <iostream>
  2. #include "custom_demo.h"
  3. using namespace std;
  4. int main()
  5. {
  6.     custom_demo:: demo();
  7.     cout << "Hello World!" << endl;
  8.     return 0;
  9. }

5.编译运行

首先点击左下方的编译图标进行程序编译,构建完成后点击绿色三角运行按钮运行Custom_SDK工程。

程序运行后会观察到,机械臂首先运动至初始预设路点位姿下,之后第一关节以0.001弧度进行步进运动直至循环结束。

程序运行完毕,在终端界面按下回车结束程序运行。

六、小结

通过本篇文章的学习,用户可以基本掌握使用遨博机器人SDK进行二次开发的流程。针对科研需求,用户可以通过遨博机器人SDK中提供的透传接口,使用机器人开源框架(ROS MoveIt!、Matlab、Vrep、Unit Robot、PyBullet等)进行自定义算法(运动学、动力学、轨迹规划、避障、柔顺控制等)的开发与验证。有关遨博机器人SDK透传接口的典型示例可参考遨博ROS功能包中的aubo_driver驱动功能包。

aubo_robot/aubo_driver.cpp at master · AuboRobot/aubo_robot · GitHub

针对应用快速开发落地,用户可以选择使用遨博提供的示教器离线编程及遨博机器人SDK中提供的机械臂算法进行运动控制。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器人编程中的TCP/IP协议是指通过网络连接来实现机器人控制的一种通信方式。机器人SDK提供了基于TCP/IP网络协议的控制接口用户可以使用接口来进行机器人编程和控制操作。SDK中的接口类提供了一系列用于操作机械臂的方法,包括机械臂的初始化、运动模块、常用算法模块、相关信息的获取与设置、IO模块等功能。用户可以通过调用指定的函数来连接机械臂,并进行相应的控制操作。具体的函数接口可以查询提供的接口说明书来了解。\[3\] #### 引用[.reference_title] - *1* *2* [协作机器人高级编程 - 机器人SDK用户定义算法接口使用](https://blog.csdn.net/aubo_academy/article/details/124491025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [协作机器人插件开发-机械臂无线手柄遥控插件开发](https://blog.csdn.net/aubo_academy/article/details/125371794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值