• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Qt设计机器人仿真控制器

人工智能 冯Jungle 2561次浏览 0个评论

本文Jungle简单实现一个6自由度的工业机器人仿真控制器,用户可以通过界面上6个轴的滑条控制机器人的姿态

1.Platform and robot model

Platform——vs2008,Qt4.8.6,Coin3D3.1.3

Robot model——KUKA KR16 robot,模型文件可以在官网上下载(https://www.kuka.com/)。

2.UI设计

Qt设计机器人仿真控制器

3.关于机器人

本文选择KUKA KR16机器人为例。查看该机器人的手册可知和示意图可得知机器人的各个杆长,各个轴的运动范围等参数。

3.1 机器人尺寸

机器人的杆长等尺寸用于确定机器人的DH参数(与机器人运动学相关)

Qt设计机器人仿真控制器

3.2 轴运动范围

各个轴的运动范围则需要在程序中给予限定:

Qt设计机器人仿真控制器

UI界面的滑条使用的是Qt提供的QSlider,因此各个QSlider的最大值最小值设置如下:

        this->ui.horizontalSlider_Axis1->setRange(-185,185);
	this->ui.horizontalSlider_Axis2->setRange(-35,155);
	this->ui.horizontalSlider_Axis3->setRange(-130,154);
	this->ui.horizontalSlider_Axis4->setRange(-350,350);
	this->ui.horizontalSlider_Axis5->setRange(-130,130);
	this->ui.horizontalSlider_Axis6->setRange(-350,350);

4.关于实现

界面相关的实现过程如下:鼠标拖动任意一个轴的滑块滑动,对用的机器人轴转动到指定角度。这里采用的是QSlider的一个signal:valueChanged(int),每次拖动都会发射这个信号。

在对应的槽函数里主要实现:

(1)得到此时刻6个滑块的值,让机器人各个轴转动到各自对应的角度处;

(2)每个滑块左侧的文本框里实时显示角度数。

该部分代码如下:

void Robot::initUiRobotAxis()
{
	this->ui.horizontalSlider_Axis1->setRange(-185,185);
	this->ui.horizontalSlider_Axis2->setRange(-35,155);
	this->ui.horizontalSlider_Axis3->setRange(-130,154);
	this->ui.horizontalSlider_Axis4->setRange(-350,350);
	this->ui.horizontalSlider_Axis5->setRange(-130,130);
	this->ui.horizontalSlider_Axis6->setRange(-350,350);
 
	connect(ui.horizontalSlider_Axis1,SIGNAL(valueChanged(int)),this,SLOT(setRobotPose()));
	connect(ui.horizontalSlider_Axis2,SIGNAL(valueChanged(int)),this,SLOT(setRobotPose()));
	connect(ui.horizontalSlider_Axis3,SIGNAL(valueChanged(int)),this,SLOT(setRobotPose()));
	connect(ui.horizontalSlider_Axis4,SIGNAL(valueChanged(int)),this,SLOT(setRobotPose()));
	connect(ui.horizontalSlider_Axis5,SIGNAL(valueChanged(int)),this,SLOT(setRobotPose()));
	connect(ui.horizontalSlider_Axis6,SIGNAL(valueChanged(int)),this,SLOT(setRobotPose()));
}

槽函数setRobotPose实现如下: 

void Robot::setRobotPose()
{
	double input_Joint[6] = {0,0,0,0,0,0};
	input_Joint[0] = 0.01*ui.horizontalSlider_Axis1->value();
	input_Joint[1] = 0.01*ui.horizontalSlider_Axis2->value();
	input_Joint[2] = 0.01*ui.horizontalSlider_Axis3->value();
	input_Joint[3] = 0.01*ui.horizontalSlider_Axis4->value();
	input_Joint[4] = 0.01*ui.horizontalSlider_Axis5->value();
	input_Joint[5] = 0.01*ui.horizontalSlider_Axis6->value();
 
	ui.lineEdit_Axis1->setText(QString::number(input_Joint[0]));
	ui.lineEdit_Axis2->setText(QString::number(input_Joint[1]));
	ui.lineEdit_Axis3->setText(QString::number(input_Joint[2]));
	ui.lineEdit_Axis4->setText(QString::number(input_Joint[3]));
	ui.lineEdit_Axis5->setText(QString::number(input_Joint[4]));
	ui.lineEdit_Axis6->setText(QString::number(input_Joint[5]));
 
	this->setAxis(input_Joint);
}

5.效果

Qt设计机器人仿真控制器

6.源代码

源代码环境:VS2017+Qt5+Coin3D4.0

代码路径:https://github.com/FengJungle/QtCoin3D_Robot 


欢迎关注知乎专栏:Jungle是一个用Qt的工业Robot

欢迎关注Jungle的微信公众号:Jungle笔记


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Qt设计机器人仿真控制器
喜欢 (0)

您必须 登录 才能发表评论!

加载中……