Qt设计机器人仿真控制器——按键控制机器人关节转动
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设计机器人仿真控制器——按键控制机器人关节转动相关推荐
- 通过joystick遥感和按键控制机器人--11
原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.首先安装joystick遥控器驱动: sudo apt-get install ros-indigo ...
- Qt设计机器人仿真控制器
本文Jungle简单实现一个6自由度的工业机器人仿真控制器,用户可以通过界面上6个轴的滑条控制机器人的姿态. 1.Platform and robot model Platform--vs2008,Q ...
- webots2019机器人仿真(3)机器人控制器(Python) Hello Word
记录使用webots过程 目标: 机器人仿真 Python交互界面 添加机器人 接着上次的工程,具体怎么添加就不详细说了,直接一个简单的截图,然后先保存,建议多保存 添加控制器 菜单栏:向导-> ...
- ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真
ROS探索总结(四)--简单的机器人仿真 前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by ...
- 【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)
文章目录 前言 1. Arbotix使用流程 1.1 安装 Arbotix 1.2 创建新功能包,准备机器人 urdf.xacro 文件 1.3 添加 Arbotix 配置文件 1.4 编写 laun ...
- 本地电脑ssh连接机器人,使用rviz控制机器人导航
本地电脑ssh连接机器人,使用rviz进行机器人ROS导航控制 环境:机器人和本地电脑都是 ubuntu 系统,都安装了ROS.本地电脑连接机器人自带路由器发射的wifi,通过 ssh 远程连接控制机 ...
- 微信群机器人(仿真企业微信群机器人)
使用过企业微信的朋友应该应该用过企业微信群机器人,它是企业微信的原生功能,你在企业微信群中新建一个机器人,随后就可以获得这个群机器人的web挂钩,调用这个web挂钩并加上消息参数就可以让这个机器人在群 ...
- 机器人与机器人仿真技术(zz)
http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...
- walking机器人仿真教程-应用-自动查找ArUco Marker位置进行自主对接
系列文章目录 walking机器人仿真教程-启动仿真环境 walking机器人仿真教程-查看仿真环境相关话题 walking机器人仿真教程-仿真控制 walking机器人仿真教程-激光建图-仿真sla ...
最新文章
- python【蓝桥杯vip练习题库】ADV-304矩阵转置
- 公共关系计算机操作题,2012年计算机二级Access考前模拟题及答案(8)
- arm linux 核心板 制作,Linux下制作给ARM开发板使用的文件系统
- 天气预报API使用心得
- Android---手动创建线程与GUI线程同步(一)
- 11、jeecg 笔记之 界面常用整理 - 方便复制粘贴
- php 501解决办法,PHP 使用错误处理解析
- 如何用指针判定系统是32bit还是64bit?一次惨痛的经历,想想都脸红
- maven工程分开common和server
- keychain 专研
- 如何解决从VBA中复制出的代码是乱码这一问题
- matlab字符串中的换行符,如何在MATLAB中的子图中显示文本/字符串行?
- SQL Server 中位数、标准差、平均数
- dev c 编程语言,devc如何自定义头文件并使用
- JDE 开发-部分系统函数
- 端到端无人驾驶文献学习:ChauffeurNet: Learning to Drive by Imitating the Best and Synthesizing the Worst
- ui测试怎么做?依据文档有哪些_软件开发流程涉及到哪些文档?其中有你需要了解的外包开发中的猫腻...
- sci四区计算机期刊,计算机 | SCI期刊专刊信息4条
- 华晨宏盛分享2021年个人所得税起征点是个人所得税税率一览表
- Compose学习笔记1-compose、state、flow、remember
热门文章
- [转贴]AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
- python股票分析之放量跌倒底买入2.0
- 【如何成为SQL高手】第二关:表记录的插入、更新、删除
- 大龄焦虑?如何看待程序员35岁职业危机?
- Linux export 命令及如何删除export设置的环境变量
- 此版本的 Windows 不再支持 Microsoft Edge
- 计算机键盘一般分四个区域 其中,四个键盘区域分别在哪里
- 芝诺数解|「十」渝味之城,愉味无穷——重庆十一旅游数据分析报告
- 撤消git stash pop导致合并冲突
- IT项目经理的大项目售前、售中和售后感悟