前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt设计仿真机器人控制器

Qt设计仿真机器人控制器

作者头像
用户6557940
发布2022-07-24 15:26:52
5190
发布2022-07-24 15:26:52
举报
文章被收录于专栏:Jungle笔记Jungle笔记

引言

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

01

Platform and robot model

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

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

02

UI设计

03

关于Robot

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

机器人尺寸

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

轴运动范围

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

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

代码语言:javascript
复制
  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);

04

关于实现

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

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

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

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

该部分代码如下:

代码语言:javascript
复制
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实现如下:

代码语言:javascript
复制
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);
}

05

效果

http://mpvideo.qpic.cn/0af2an66ym4vycqoambaeaqkb4gvzuntan2gjkuha4ba2cipa4aa.f10002.mp4?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Jungle笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 机器人尺寸
  • 轴运动范围
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档