1.引言及本文简介

在上两篇博客里,Jungle介绍了Qt键盘事件,并在小程序中应用Qt键盘事件监测按键输入:

  • Qt键盘事件(一)——检测按键输入及解决无法响应方向键问题
  • Qt键盘事件(二)——长按按键反复触发event事件问题解决

在之前的一篇博客(Qt设计机器人仿真控制器)Jungle结合Qt和Coin3D设计实现了机器人仿真控制器,鼠标拖拽控制器界面6个轴的滑条,分别控制机器人6个关节转动。本文Jungle将结合Qt键盘事件和机器人仿真控制器,实现一下功能:

  • 按键按下1、2、3、4、5、6中的某个键n,表示接下来的按键操作将控制第n个关节转动;
  • 按键按下“-”或“+”,控制第n个关节向正向或负向转动。

2.实现

在之前机器人仿真控制器的基础上,加上Qt按键相关功能。

2.1.头文件

  • 增加成员变量axisNum,用于记录用户想要控制哪个轴(1、2、3、4、5、6)
  • 声明Qt按键事件函数
    //按键事件void keyPressEvent(QKeyEvent *event);void keyReleaseEvent(QKeyEvent *event);//用户按键控制轴号int axisNum;

2.2.实现

在 Qt键盘事件(二)——长按按键反复触发event事件问题解决里提到关于按键event反复被触发的问题,但是在本文里将不作处理,因为本文要实现的效果是:比如用户想按键控制第一个关节,先按下数字“1”键,axisNum被置为1;再按下“-”键,在用户按下过程中(直至用户松键),机器人的第一个关节应该是持续转动,而不是在用户松键的时候才突然转动某个角度。基于上述考虑,keyPressEvent和keyReleaseEvent 实现如下:

void Robot::keyPressEvent(QKeyEvent *event)
{double curValue[6] = {0};//获取当前机器人各个轴的转动角度getAxis(curValue);switch(event->key()){case Qt::Key_Equal:{switch(this->axisNum){     case 1:ui.horizontalSlider_Axis1->setValue(curValue[0]*100+1000);break;case 2:ui.horizontalSlider_Axis2->setValue(curValue[1]*100+1000);break;case 3:ui.horizontalSlider_Axis3->setValue(curValue[2]*100+1000);break;case 4:ui.horizontalSlider_Axis4->setValue(curValue[3]*100+1000);break;case 5:ui.horizontalSlider_Axis5->setValue(curValue[4]*100+1000);break;case 6:ui.horizontalSlider_Axis6->setValue(curValue[5]*100+1000);break;default:break;}break;}case Qt::Key_Minus:{switch(this->axisNum){       case 1:ui.horizontalSlider_Axis1->setValue(curValue[0]*100-1000);break;case 2:ui.horizontalSlider_Axis2->setValue(curValue[1]*100-1000);break;case 3:ui.horizontalSlider_Axis3->setValue(curValue[2]*100-1000);break;case 4:ui.horizontalSlider_Axis4->setValue(curValue[3]*100-1000);break;case 5:ui.horizontalSlider_Axis5->setValue(curValue[4]*100-1000);break;case 6:ui.horizontalSlider_Axis6->setValue(curValue[5]*100-1000);break;default:break;}break;}}
}void Robot::keyReleaseEvent(QKeyEvent *event)
{//在松键的时候记录用户按下的哪个键switch(event->key()){case Qt::Key_1:axisNum = 1;break;case Qt::Key_2:axisNum = 2;break;case Qt::Key_3:axisNum = 3;break;case Qt::Key_4:axisNum = 4;break;case Qt::Key_5:axisNum = 5;break;case Qt::Key_6:axisNum = 6;break;default:break;}
}

需要说明的是,在keyPressEvent中,只是通过代码改变horizontalSlider_Axis1(代表控制器界面上机器人第一根轴的滑条)的值来控制机器人的第一个轴,这是因为horizontalSlider_Axis1值改变会自动触发控制机器人运动的槽函数:

 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()));

3.效果

视频效果请见https://zhuanlan.zhihu.com/p/85066106

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

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

Qt设计机器人仿真控制器——按键控制机器人关节转动相关推荐

  1. 通过joystick遥感和按键控制机器人--11

    原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.首先安装joystick遥控器驱动: sudo apt-get install ros-indigo ...

  2. Qt设计机器人仿真控制器

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

  3. webots2019机器人仿真(3)机器人控制器(Python) Hello Word

    记录使用webots过程 目标: 机器人仿真 Python交互界面 添加机器人 接着上次的工程,具体怎么添加就不详细说了,直接一个简单的截图,然后先保存,建议多保存 添加控制器 菜单栏:向导-> ...

  4. ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真

    ROS探索总结(四)--简单的机器人仿真 前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by ...

  5. 【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)

    文章目录 前言 1. Arbotix使用流程 1.1 安装 Arbotix 1.2 创建新功能包,准备机器人 urdf.xacro 文件 1.3 添加 Arbotix 配置文件 1.4 编写 laun ...

  6. 本地电脑ssh连接机器人,使用rviz控制机器人导航

    本地电脑ssh连接机器人,使用rviz进行机器人ROS导航控制 环境:机器人和本地电脑都是 ubuntu 系统,都安装了ROS.本地电脑连接机器人自带路由器发射的wifi,通过 ssh 远程连接控制机 ...

  7. 微信群机器人(仿真企业微信群机器人)

    使用过企业微信的朋友应该应该用过企业微信群机器人,它是企业微信的原生功能,你在企业微信群中新建一个机器人,随后就可以获得这个群机器人的web挂钩,调用这个web挂钩并加上消息参数就可以让这个机器人在群 ...

  8. 机器人与机器人仿真技术(zz)

    http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...

  9. walking机器人仿真教程-应用-自动查找ArUco Marker位置进行自主对接

    系列文章目录 walking机器人仿真教程-启动仿真环境 walking机器人仿真教程-查看仿真环境相关话题 walking机器人仿真教程-仿真控制 walking机器人仿真教程-激光建图-仿真sla ...

最新文章

  1. python【蓝桥杯vip练习题库】ADV-304矩阵转置
  2. 公共关系计算机操作题,2012年计算机二级Access考前模拟题及答案(8)
  3. arm linux 核心板 制作,Linux下制作给ARM开发板使用的文件系统
  4. 天气预报API使用心得
  5. Android---手动创建线程与GUI线程同步(一)
  6. 11、jeecg 笔记之 界面常用整理 - 方便复制粘贴
  7. php 501解决办法,PHP 使用错误处理解析
  8. 如何用指针判定系统是32bit还是64bit?一次惨痛的经历,想想都脸红
  9. maven工程分开common和server
  10. keychain 专研
  11. 如何解决从VBA中复制出的代码是乱码这一问题
  12. matlab字符串中的换行符,如何在MATLAB中的子图中显示文本/字符串行?
  13. SQL Server 中位数、标准差、平均数
  14. dev c 编程语言,devc如何自定义头文件并使用
  15. JDE 开发-部分系统函数
  16. 端到端无人驾驶文献学习:ChauffeurNet: Learning to Drive by Imitating the Best and Synthesizing the Worst
  17. ui测试怎么做?依据文档有哪些_软件开发流程涉及到哪些文档?其中有你需要了解的外包开发中的猫腻...
  18. sci四区计算机期刊,计算机 | SCI期刊专刊信息4条
  19. 华晨宏盛分享2021年个人所得税起征点是个人所得税税率一览表
  20. Compose学习笔记1-compose、state、flow、remember

热门文章

  1. [转贴]AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
  2. python股票分析之放量跌倒底买入2.0
  3. 【如何成为SQL高手】第二关:表记录的插入、更新、删除
  4. 大龄焦虑?如何看待程序员35岁职业危机?
  5. Linux export 命令及如何删除export设置的环境变量
  6. 此版本的 Windows 不再支持 Microsoft Edge
  7. 计算机键盘一般分四个区域 其中,四个键盘区域分别在哪里
  8. 芝诺数解|「十」渝味之城,愉味无穷——重庆十一旅游数据分析报告
  9. 撤消git stash pop导致合并冲突
  10. IT项目经理的大项目售前、售中和售后感悟