目录
一、简介
大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人高级编程),为方便离线编程与扩展机器人的应用领域,遨博协作机器人开发时增加了脚本编程和SDK开发环境等可供用户进行二次开发的开放性接口。用户可以通过二次开发接口实现获取机器人运行状态和运动控制等功能。脚本编程方面支持Lua与Python两种解释性编程语言,SDK支持C、C++、C#和Python四种编程语言。
本篇文章主要针对SDK开发方面进行讲解,掌握SDK开发示例功能包的获取与使用,掌握基于C++ SDK的用户自定义算法接口的开发流程。
二、环境版本
- 主机系统版本:Windwos10 64位
- 处理器型号:Intel-i7
- 虚拟机版本:VMware Workstation 16 Pro
- 示教器版本:AUBOPE V4.5.44
- SDK版本:C++ V1.3.2
三、开发环境部署
1.二次开发资料下载
(1)注册并登录遨博官网(https://www.aubo-robotics.cn/)。
- 点击【服务支持】-【资料下载】,将“AUBO PE虚拟机”和“SDK应用开发包”文件下载到本地电脑(D:\遨博机器人SDK开发)并解压。
说明:若使用AUBO PE教育版虚拟机镜像,可关注“遨博教育生态”微信公众号留言获取。
“SDK应用开发包”文件说明:
“AUBO PE虚拟机镜像”使用方法可参考“AUBO虚拟机使用说明.pdf”文档。
2. AUBO PE编程仿真环境配置
在没有真实机械臂环境的情况下,可以通过AUBO PE虚拟机环境进行机械臂仿真与SDK开发。由于SDK提供了多种系统版本的开发包,首先要做的就是配置VMware虚拟机网络,确保不同系统环境下SDK开发能够正常与AUBO PE仿真环境进行通讯。
- 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的文件夹。
- 将Windows系统下下载的C++ SDK压缩包拖拽拷贝至上述sdk文件夹下并解压。
(3)点击AUBO PE系统任务栏左侧QT图标,启动Qt Creator,之后点击欢迎界面右侧的【Open Project】,浏览定位到上述解压文件夹下,打开 AuboInterfaceExample.pro工程文件。
在项目窗口默认使用qt5.5.1版本,之后点击【Configure Project】按钮。
等待项目构建完成,在编程界面,依次点开项目目录,文件结构如图所示。
3. linux C++ SDK 文件构成
- 《dependents》:AUBO 依赖库。
- 《example》:共9个例子,基本覆盖机器人的所有控制接口。
- AuboInterfaceExample.pro:项目文件。
- 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文件,添加以下内容:
-
unix{
-
-
#
32
bit OS
-
-
contains(QT_ARCH, i
386){
-
-
CONFIG
+
= c
+
+
11
-
-
DEFINES
+
= _GLIBCXX_
USE_CXX
11_ABI
=
0
-
-
INCLUDEPATH
+
= $$PWD
/dependents
/robotSDK
/inc
-
-
LIBS
+
= -L$$PWD
/dependents
/robotSDK
/lib
/linux_x
32
/ -lauborobotcontroller
-
-
LIBS
+
= -lpthread
-
-
}
-
-
#
64
bit OS
-
-
contains(QT_ARCH, x
86_
64){
-
-
INCLUDEPATH
+
= $$PWD
/dependents
/robotSDK
/inc
-
-
LIBS
+
= -L$$PWD
/dependents
/log
4cplus
/linux_x
64
/lib
/ -llog
4cplus
-
-
LIBS
+
= -L$$PWD
/dependents
/robotSDK
/lib
/linux_x
64
/ -lauborobotcontroller
-
-
LIBS
+
= -lpthread
-
-
}
-
-
}
4.编写程序
(1)向Custom_SDK工程中添加新文件
鼠标右键【Custom_SDK】,点击【添加新文件】,在新建文件窗口依次点击【C++】 - 【C++ Class】-【Choose】。
类名填写为“custom_demo”,之后点击【下一步】。
汇总页面点击【完成】,添加完成后界面如下。
(2)编写头文件
在【custom_demo.h】头文件内新增如下代码:
-
#ifndef CUSTOM_DEMO_H
-
-
#define CUSTOM_DEMO_H
-
-
#include "AuboRobotMetaType.h"
-
-
#include "serviceinterface.h"
-
-
class
custom_demo
-
-
{
-
-
public:
-
-
static void demo();
-
-
};
-
-
#endif // CUSTOM_DEMO_H
(3)编写cpp源程序
修改【custom_demo.cpp】,新增如下代码:
-
#include
"custom_demo.h"
-
-
#include
<unistd.h
>
-
-
#include
<math.h
>
-
-
#include
<
string.h
>
-
-
#include
<stdio.h
>
-
-
#include
<sstream
>
-
-
#include
<fstream
>
-
-
-
-
#define SERVER_HOST
"127.0.0.1"
-
-
#define SERVER_PORT
8899
-
-
ServiceInterface robotService;
-
-
-
-
void custom_demo
::demo()
-
-
{
-
-
int ret
= aubo_robot_namespace
::InterfaceCallSuccCode;
-
-
-
-
/
**
Interface
call: login
**
*
/
-
-
ret
= robotService.robotServiceLogin(SERVER_HOST, SERVER_PORT,
"aubo",
"123456");
-
-
if(ret
=
= aubo_robot_namespace
::InterfaceCallSuccCode)
-
-
{
-
-
std
::cout
<
<
"login successful."
<
<std
::endl;
-
-
}
-
-
else
-
-
{
-
-
std
::cerr
<
<
"login failed."
<
<std
::endl;
-
-
}
-
-
-
-
/
**
If the real robot arm
is connected, the arm needs
to be initialized.
**
/
-
-
aubo_robot_namespace
::ROBOT_SERVICE_STATE result;
-
-
-
-
/
/Tool dynamics parameter
-
-
aubo_robot_namespace
::ToolDynamicsParam toolDynamicsParam;
-
-
memset(
&toolDynamicsParam,
0, sizeof(toolDynamicsParam));
-
-
-
-
ret
= robotService.rootServiceRobotStartup(toolDynamicsParam
/
**Tool dynamics parameter
**
/,
-
-
6
/
*Collision level
*
/,
-
-
true
/
*Whether
to allow reading poses defaults
to
true
*
/,
-
-
true,
/
*Leave the
default
to
true
*
/
-
-
1000,
/
*Leave the
default
to
1000
*
/
-
-
result);
/
*Robot arm initialization
*
/
-
-
if(ret
=
= aubo_robot_namespace
::InterfaceCallSuccCode)
-
-
{
-
-
std
::cout
<
<
"Robot arm initialization succeeded."
<
<std
::endl;
-
-
}
-
-
else
-
-
{
-
-
std
::cerr
<
<
"Robot arm initialization failed."
<
<std
::endl;
-
-
}
-
-
-
-
/
** 用户自定义业务逻辑
start
**
/
-
-
std
::cout
<
<
"CAN透传模式..."
<
<std
::endl;
-
-
double wp
1[
6]
= {};
-
-
wp
1[
0]
= -
17.254444
*M_PI
/
180;
-
-
wp
1[
1]
=
36.019474
*M_PI
/
180;
-
-
wp
1[
2]
=
91.554089
*M_PI
/
180;
-
-
wp
1[
3]
=
66.159787
*M_PI
/
180;
-
-
wp
1[
4]
= -
89.807699
*M_PI
/
180;
-
-
wp
1[
5]
= -
0.000420
*M_PI
/
180;
-
-
-
-
/
*关节运动至初始预设路点
*
/
-
-
robotService.robotServiceJointMove(wp
1,
true);
-
-
/
*进入CAN 透传模式
*
/
-
-
robotService.robotServiceEnterTcp
2CanbusMode();
-
-
/
*用户自定义算法获取路点数据后下发给透传接口
*
/
-
-
for(int i
=
0; i
<
1000; i
+
+)
-
-
{
-
-
wp
1[
0]
= wp
1[
0]
+
0.001;
-
-
/
/std
::cout
<
< wp
1[
0]
<
< std
::endl;
-
-
/
/将关节角透传到关节驱动器
-
-
robotService .robotServiceSetRobotPosData
2Canbus(wp
1);
-
-
usleep(
1000
*
5);
/
/
透传接口发送频率需大于
200Hz
-
-
}
-
-
robotService.robotServiceLeaveTcp
2CanbusMode();
-
-
sleep(
1);
-
-
/
** 用户自定义业务逻辑
end
**
/
-
-
/
** Robotic arm shutdown
**
/
-
-
robotService.robotServiceRobotShutdown();
-
-
-
-
/
**
Interface
call: logout
**
/
-
-
robotService.robotServiceLogout();
-
-
}
(4)修改main.cpp源文件
调用custom_demo.cpp中的用户自定义函数功能,更改如下:
-
#include <iostream>
-
-
#include "custom_demo.h"
-
-
using
namespace std;
-
-
-
-
int main()
-
-
{
-
-
custom_demo::
demo();
-
-
cout <<
"Hello World!" << endl;
-
-
return
0;
-
-
}
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中提供的机械臂算法进行运动控制。