Qt-MinGW
安装
文件准备
Qt: qt-opensource-windows-x86-mingw530-5.7.0
百度网盘下载(提取码:a54r)环境安装
安装 QtCreator5.7.0
安装包下载好后,双击运行,根据提示一步步往下走到安装完成即可
使用
快速开始项目
下载 DEMO
1.下载我们准备好的 DEMO 文件,点击这里;
2.解压后用 QtCreator 程序打开 qt_mingw32_demo.pro 工程
3.编译程序
选择 Release 版编译即可
编译完成
连续运动模式
上位机二次开发中的连续运动模式是一个可以摆脱指令化运行的运动模式,可以抛开作业程序直接控制机器人做连续运动。
环境搭建
新建一个工程
工程创建完成
将官网下载的库文件 lib_nrc.a 和 interface.h 文件放到工程目录内
右击工程选择添加库
选择外部库
选择刚刚放到同级目录的库文件,然后勾选 Windows 和静态
点击完成静态库就添加成功了
如果.pro 中无 network 需手动添加
开发
右击头文件选择添加现有文件,选择 interface.h 文件然后点击打开
在 mainwindow.cpp 中添加#include "interface.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "interface.h"
选择 ui 界面添加 3 个按钮
分别右击按钮选择转到槽
选择 clicked()信号,点击 OK
在第一个按钮的槽函数中添加机器人连接接口
void MainWindow::on_pushButton_clicked()
{
char ip[100] = "192.168.1.13";
if(connect_robot(ip))
{
qDebug()<<"连接成功";
}
else
{
qDebug()<<"连接失败";
}
}
使用接口 connect_robot(char *ip),填写需要连接的控制器 IP 地址
连续运动模式
连续运动模式支持一次性插入多条运动指令,并在其中包含 IO 操作和逻辑判断等功能,下面的例程将举例说明如何使用连续运动模式
在第二个按钮的槽函数中添加连续运动模式打开接口
void MainWindow::on_pushButton_2_clicked()
{
if(get_current_mode() != 2)
{
set_current_mode(2);
}
continuous_motion_mode(1);
}
使用接口get_current_mode()
判断当前模式是否在运行模式下,不在则需要使用接口set_current_mode(2)
切换到运行模式下
使用接口continuous_motion_mode(1)
打开连续运动模式
get_current_mode()
获取当前模式,返回值 0:示教模式,1:远程模式,2:运行模式
set_current_mode(int num)
设置当前模式,0:示教模式,1:远程模式,2:运行模式
continuous_motion_mode(int num)
设置连续运动模式,0:关闭,1:打开
在第三个按钮的槽函数中添加需要发送的连续运动指令队列
void MainWindow::on_pushButton_3_clicked()
{
//以下点位为测试点位,谨慎使用!
cmdPara cmd[6];
cmd[0].cmdType = cmdPara::MOVJ;
cmd[0].m_velocity = 30;
cmd[0].m_acc = 30;
cmd[0].m_dec = 30;
cmd[0].m_pl = 0;
cmd[0].m_coord[0] = 0;
cmd[0].m_coord[1] = 0;
cmd[0].m_coord[2] = 0;
cmd[0].m_coord[3] = 0;
cmd[0].m_coord[4] = 0;
cmd[0].m_coord[5] = 0;
cmd[0].m_coord[6] = 0;
cmd[0].m_position[0] = 0;
cmd[0].m_position[1] = 0;
cmd[0].m_position[2] = 0;
cmd[0].m_position[3] = 0;
cmd[0].m_position[4] = 0;
cmd[0].m_position[5] = 0;
cmd[1].cmdType = cmdPara::MOVL;
cmd[1].m_velocity = 300;
cmd[1].m_acc = 30;
cmd[1].m_dec = 30;
cmd[1].m_pl = 0;
cmd[1].m_coord[0] = 0;
cmd[1].m_coord[1] = 0;
cmd[1].m_coord[2] = 0;
cmd[1].m_coord[3] = 0;
cmd[1].m_coord[4] = 0;
cmd[1].m_coord[5] = 0;
cmd[1].m_coord[6] = 0;
cmd[1].m_position[0] = 10;
cmd[1].m_position[1] = 10;
cmd[1].m_position[2] = 10;
cmd[1].m_position[3] = 10;
cmd[1].m_position[4] = 10;
cmd[1].m_position[5] = 10;
cmd[2].cmdType = cmdPara::MOVC;
cmd[2].m_velocity = 300;
cmd[2].m_acc = 30;
cmd[2].m_dec = 30;
cmd[2].m_pl = 0;
cmd[2].m_coord[0] = 0;
cmd[2].m_coord[1] = 0;
cmd[2].m_coord[2] = 0;
cmd[2].m_coord[3] = 0;
cmd[2].m_coord[4] = 0;
cmd[2].m_coord[5] = 0;
cmd[2].m_coord[6] = 0;
cmd[2].m_position[0] = 20;
cmd[2].m_position[1] = 20;
cmd[2].m_position[2] = 0;
cmd[2].m_position[3] = 0;
cmd[2].m_position[4] = 0;
cmd[2].m_position[5] = 0;
cmd[3].cmdType = cmdPara::MOVC;
cmd[3].m_velocity = 300;
cmd[3].m_acc = 30;
cmd[3].m_dec = 30;
cmd[3].m_pl = 0;
cmd[3].m_spin = 0;
cmd[3].m_coord[0] = 0;
cmd[3].m_coord[1] = 0;
cmd[3].m_coord[2] = 0;
cmd[3].m_coord[3] = 0;
cmd[3].m_coord[4] = 0;
cmd[3].m_coord[5] = 0;
cmd[3].m_coord[6] = 0;
cmd[3].m_position[0] = 0;
cmd[3].m_position[1] = 0;
cmd[3].m_position[2] = 0;
cmd[3].m_position[3] = 0;
cmd[3].m_position[4] = 0;
cmd[3].m_position[5] = 0;
cmd[4].cmdType = cmdPara::MOVCA;
cmd[4].m_velocity = 300;
cmd[4].m_acc = 30;
cmd[4].m_dec = 30;
cmd[4].m_pl = 0;
cmd[4].m_spin = 0;
cmd[4].m_coord[0] = 0;
cmd[4].m_coord[1] = 0;
cmd[4].m_coord[2] = 0;
cmd[4].m_coord[3] = 0;
cmd[4].m_coord[4] = 0;
cmd[4].m_coord[5] = 0;
cmd[4].m_coord[6] = 0;
cmd[4].m_position[0] = 0;
cmd[4].m_position[1] = 5;
cmd[4].m_position[2] = 5;
cmd[4].m_position[3] = 5;
cmd[4].m_position[4] = 5;
cmd[4].m_position[5] = 5;
cmd[5].cmdType = cmdPara::MOVCA;
cmd[5].m_velocity = 300;
cmd[5].m_acc = 30;
cmd[5].m_dec = 30;
cmd[5].m_pl = 0;
cmd[5].m_spin = 0;
cmd[5].m_coord[0] = 0;
cmd[5].m_coord[1] = 0;
cmd[5].m_coord[2] = 0;
cmd[5].m_coord[3] = 0;
cmd[5].m_coord[4] = 0;
cmd[5].m_coord[5] = 0;
cmd[5].m_coord[6] = 0;
cmd[5].m_position[0] = 15;
cmd[5].m_position[1] = 15;
cmd[5].m_position[2] = 15;
cmd[5].m_position[3] = 15;
cmd[5].m_position[4] = 15;
cmd[5].m_position[5] = 15;
send_continuous_motion_queue(cmd,6);
}
创建指令队列结构体数组cmdPara cmd[6]
;
- 第一组关节运动速度 30%,加速度 30,减速度 30,平滑 0,目标点位关节坐标系(0,0,0,0,0,0)
- 第二组直线运动速度 300mm/s,加速度 30,减速度 30,平滑 0,目标点位关节坐标系(10,10,10,10,10,10)
- 第三四组圆弧运动速度 300mm/s,加速度 30,减速度 30,平滑 0,过目标点位关节坐标系(20,20,0,0,0,0)和关节坐标系(0,0,0,0,0,0)的圆弧运动
- 第五六组整圆运动速度 300mm/s,加速度 30,减速度 30,平滑 0,过目标点位关节坐标系(0,5,5,5,5,5)和关节坐标系(15,15,15,15,15,15)的整圆运动
指令结构体说明:
- MOVJ:关节运动
- MOVL:直线运动
- MOVC:圆弧运动
- MOVCA:整圆运动
- MOVJEXT:带外部轴的关节运动
- MOVLEXT:带外部轴的直线运动
- MOVCEXT:带外部轴的圆弧运动
- double m_velocity:速度。关节运动速度范围是 1~100%,非关节运动速度范围是 2~1000mm/s
- double m_acc:加速度。范围是 1~100
- double m_dec:减速度。范围是 1~100
- double m_pl:平滑。范围是 0~5
- int m_spin:姿态(仅 MOVCA 需要这个参数) 0:姿态不变 1:六轴不转 2:六轴旋转
- double m_coord[7]:第 1,2 位表示坐标 第 3 位左右手(0-无 1-左 2-右)/姿态(0-8) 第 4 位工具手 第 5 位坐标系 第 6,7 位备用
- double m_position[7]:第 1 位到第 7 位代表机器人点位坐标(最多支持到七轴机器人,没有位置补 0 即可)
- double m_syncPosition[5]:第 1 位到第 5 位代表外部轴点位坐标(最多支持到五轴外部轴,没有位置补 0 即可)
注:
圆弧运动,整圆运动,带外部轴的圆弧运动必须 2 条指令为一组指令来使用,否则无法运行
连续运动模式速度如想提速可以在当前模式内修改全局速度,使用接口 void set_jogging_speed(int speed);speed 范围(0~100)
运行中若未按自己需求运行完所设置的目标点位可能出现的情况如下:
- 目标位置不可达
- 部分轴目标位置超限
- 速度过大导致伺服报错
- 程序编写内容有问题
- 未在运行模式的连续运动模式内
- 伺服状态有问题
建议点位事先通过示教调试一下,看是否可以达到,之后再使用上位机二次开发来设置点位