文档详情

机械手仿真软件交互式轨迹实现

红**
实名认证
店铺
2022-11-26
PDF
243.72KB
约5页
机械手仿真软件交互式轨迹实现_第1页
1/5
机械手仿真软件交互式轨迹实现_第2页
2/5
机械手仿真软件交互式轨迹实现_第3页
3/5

1-机械手仿真软件交互式轨迹实现机械手仿真软件交互式轨迹实现 :摘摘 要:要:本篇文章,着重阐述了利用 VC+的消息机制,建立用户对话平台,使仿真手臂能够按照用户需求实现实时轨迹组合与以往相比较,通过这种人机交互平台,仿真机械手臂能够按照用户的需求实现不同单一轨迹的组合关键词关键词:机械手仿真;无模式对话框;VC+中图分类号:中图分类号:TP391.9;TP241.3 1.引言引言 在仿真机械手软件最初设计阶段,由于没有利用消息机制,只能事先编写出固定的轨迹函数,譬如使仿真机械手按 BUPT 这四个字母的书写规则进行轨迹运动4,继而在 PC 屏幕上写出这四个字母但却无法按照用户的需求写出别的字母或数字,或者多个数字的组合,也无法实现别的轨迹仿真软件的设计,其最终目的是能与用户实现交互这款优化后的仿真机械手软件亦是如此,期望其最终能够按照用户的想法实现自身轨迹,而不不仅仅是只能实现一种或固定几种预先规定好的轨迹在此设计中,通过消息机制,设计一种用户交互平台,便可令仿真机械手按用户的不同需求,实现不同轨迹或不同轨迹组合同时,也可在此原理基础上进一步扩展轨迹种类2.交互式轨迹实现的机制交互式轨迹实现的机制 利用 VC+的消息处理机制,对基于 MFC 单文档的 OpenGL 并联机械手的模型进行轨迹控制,通过交互界面,用户下达自己所需的轨迹命令,使机械手按其要求实现轨迹。

2.1 消息机制消息机制 在使用 Visual C+进行应用程序开发时,除了用户界面的定制之外,其他大部分工作是编写各种消息处理函数消息用来通知系统,用户的操作为了轨迹实现的可交互性,此仿真软件建模后的绝大部分的工作便是进行消息处理Visual C+6.0 提供了 MFC 类库,很多底层的消息都进行了封装,只需要处理一些高层的消息,如选择菜单等命令3WINDOWS 应用程序开始执行后,操作系统会为该应用程序创建一个消息队列,用于存放该应用程序所接受的各种消息在执行必要的初始化工作后,就进入消息循环,直到该应用程序被终止消息循环就是应用程序依次查询消息队列的中的每一条消息,对其进行解释、分解、处理过程应用程序在其消息循环中得到属于自己的消息,并调用相应的窗口过程,而当应用程序没有消息时,消息循环就将将控制权交还给操作系统12.2 消息处理消息处理 在程序运行时,譬如当用户单击菜单时,操作系统马上“感知”了这一事件,并能知道用户选择的是哪个菜单项操作系统通过消息将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应这即是消息相应在 MFC 中,对消息的响应处理采用的是消息映射机制,也就是消息和其处理函数的一-2-一对应关系的解析机制。

通过消息映射,应用程序找到该消息对应的响应函数的入口因此只需定义消息处理函数,即可实现设计者的需要23.交互式轨迹的设计思路交互式轨迹的设计思路 为实现按用户需求实现轨迹,这里暂且将用户需求定为,客户端输入 4 个 09 之间任意数字,仿真机械手按照一定轨迹运动后均能够书写出来此设计实现后,按此原理进一步优化时,便可满足用户的需求,使仿真机械手按照用户的实时想法,实现其他轨迹4.设计的实现设计的实现 4.1 交互的界面设计交互的界面设计 在菜单中添加“参数设置”这一项,单击,即可弹出一个无模式对话框,用户可在此无模式对话框中输入 4 个 09 的任意数字见图 1,图 2图 1 整体界面及菜单 图 2 无模式对话框-3-4.2 定制消息,编写消息处理函数和建立消息映射定制消息,编写消息处理函数和建立消息映射 4.2.1 定制消息定制消息 为了实现数据的传输,将对话框的输入数字传送给 VIEW 类,需要自定义消息所有的消息都是通过消息的名称来访问的因此自定义一个消息名称,并利用自定义的消息来发送和传递数据在这里,#define WM_DIALOG_CREAT WM_USER+100 这里需要从 WM_USER+100 开始,以免和系统定义的其他消息冲突。

如需自定义其他消息,只需依次定义即可像其他函数一样,也要在类的定义中声明消息响应函数:OnDlgNotifyMsg();class CEmulationView:public CView /AFX_MSG(CEmulationView)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnDestroy();afx_msg void OnSize(UINT nType,int cx,int cy);afx_msg void OnTimer(UINT nIDEvent);afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);afx_msg void OnLButtonDown(UINT nFlags,CPoint point);afx_msg void OnLButtonUp(UINT nFlags,CPoint point);afx_msg void OnMouseMove(UINT nFlags,CPoint point);afx_msg BOOL OnMouseWheel(UINT nFlags,short zDelta,CPoint pt);/AFX_MSG afx_msg void OnDlgNotifyMsg(WPARAM wP);此处一定将声明放在/AFX_MSG 外,否则系统便会将其认为 MFC 已封装的消息函数,而忽略。

4.2.2 编写消息处理函数编写消息处理函数 void CEmulationView:OnDlgNotifyMsg(WPARAM wP)if(float)wP=1.0)yi=mydlg-m_Letter1;er=mydlg-m_Letter2;san=mydlg-m_Letter3;si=mydlg-m_Letter4;Describe();/UpdateData(FALSE);Invalidate();/return 0;这里定义具体的函数4-4.2.3 建立消息映射建立消息映射 此时消息和消息响应函数已经定义好,现在需要建立二者之间的一一对应,添加消息映射BEGIN_MESSAGE_MAP(CEmulationView,CView)/AFX_MSG_MAP(CEmulationView)ON_WM_CREATE()ON_WM_DESTROY()ON_WM_SIZE()ON_WM_TIMER()ON_WM_KEYDOWN()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_WM_MOUSEWHEEL()/AFX_MSG_MAP /Standard printing commands ON_MESSAGE(WM_DLG_CREATE,OnDlgNotifyMsg)同样,也需将消息映射放在/AFX_MSG 之外。

4.3 消息、数据的传递消息、数据的传递 4.3.1 消息的传递消息的传递 此时,消息、消息响应函数和消息响应机制已经建立,现在需要进行消息的传递用户输入 4 个 0 至 9 之间的数字后,譬如 2561,点击 OK 按键后,发送消息因此,为 OK 键添加代码,如下,void CMyDlg:OnOK()/TODO:Add extra validation here UpdateData(TRUE);m_pParent-SendMessage(WM_DLG_CREATE,(WPARAM)1);以上各步完成后,即可实现,用户输入完想要显示的数据后,点击 OK 键,发送消息,系统即将数据传递给 view 类4.3.2 数据的传递数据的传递 当接受了传送过来的数据后,需在 OnDlgNotifyMsg()函数中及时调用轨迹规划函数,将传递过来的数据赋值给 view 的数据成员即可完成交互的过程图 3 即为截取的仿真机械手按照一定轨迹运动后模拟写出的数字图 3 仿真模拟轨迹 -5-5.结论结论 基于 MFC 单文档的 OpenGL 仿真软件,可以利用强大 MFC 类库和消息机制,实现了对轨迹控制的可交互性,避免了机械手按照单一的轨迹运动。

在此基础上,只需进一步优化、强大消息的处理函数,便可真正达到按人所需而运动参考文献参考文献 1 孔鹏.Visual C+6.0 完全自学手册.北京:机械工业出版社,2006.2 宋坤,刘锐宁,李伟明.Visual C+开发技术大全.北京:人民邮电出版社,2007.3 姚领田.精通 MFC 程序设计.北京:人民邮电出版社,2006.4 黄如慧.基于 OPENGL 技术对并联机构的仿真和轨迹规划研究.北京:北京邮电大学,2007.。

下载提示
相关文档
正为您匹配相似的精品文档