ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:1.50MB ,
资源ID:16390546      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16390546.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VoyagerII软件基础教程Word下载.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VoyagerII软件基础教程Word下载.docx

1、这里我们可以看到Visual C+的界面主要分为三个栏,左侧的工作区视图、右侧的代码编辑客户区以及下侧的信息输出窗口。工作区可以按类或文件的方式组织程序的源代码,另外还可以查看工程里的资源(如显示窗体、图标、图片等)。代码编辑客户区在工作区选择类视图和文件视图时可以显示类和文件里的源代码,在工作区选择资源时可显示资源的内容。图1.1 Visual C+编程环境3、 类视图在左侧工作区下侧选取类视图,双击各个类察看客户区的代码显示,这里可以看到类组织形式的特点:双击类名显示的是类的声明,双击类的成员函数则进入该成员函数的具体定义。4、 资源视图在左侧工作区下侧选取资源视图,展开各项,双击察看客户

2、区里窗体图表等资源,这里主要是Dialog对话框资源和Icon图标资源。5、 文件视图在左侧工作区下侧选取文件视图,展开各项,双击察看客户区里各文件的内容显示。这里可以看到与类组织形式的异同,.h头文件里多是类的声明,而类的定义则在对应的.cpp文件里。6、 程序编译按下键盘F7,在输出窗口里观察程序的编译组建信息。正常情况下编译结果应该显示 0 error(s),0 warning(s),如果出现error,则是出现语法错误或是连接错误,是无法运行的;如果出现warning,则不一定是致命错误,比较多见的是类型转换导致的数值部分信息的丢失,但也需认真排查。小结这一个试验主要是让我们对如何在V

3、isual C+里进行一个程序的代码编写和组建过程有个大概的认识。下一个实验我们将自己动手编写一个简单的界面程序。 学会用Visual C+的编译环境编写一些简单的窗体程序,为后续实验确定界面。2、 建立对话框界面程序MFC是MFC是Microsoft Foundation Class缩写,即微软基础类库,是一个架构在Windows API 之上C+ 类别库(C+ Class Library),里面包含了很多现成的窗体控件类,意图使Windows 程式设计过程更有效率,更符合物件导向的精神。Visual C+里可以创建的MFC窗体程序有三种:对话框、单文档视图和多文档视图。其中以对话框结构最为

4、简单,所以我们就以对话框作为我们的第一个Windows视窗程序。按照如下步骤:点击左上角菜单项“文件”“新建”选择MFC AppWizard输入工程名:VoyTest确定图2.1 选择工程性质图2.2 选择界面类型图2.3 设置对话框属性图2.4 生成的对话框界面3、 建立控件窗体已经建立,下面我们可以在上面添加我们需要的按钮和编辑框等控件。下面我们为“打开串口”功能建立一个编辑框与按钮,编辑框用于输入串口号,按钮用于启动串口程序。首先,我们找到Visual C+的控件工具栏。图2.5 控件工具栏点击按钮控件,在对话框上按下鼠标左键拖动,即可画出一个按钮。鼠标右击该按钮,在弹出的菜单里选择“属

5、性”,即可以修改该按钮控件的资源ID和显示文字,因为我们后面需要为这个按钮映射出一个函数,所以这里最好将资源ID修改为容易识别而没有其他重复的单词,这里改为“IDC_OPEN”。然后我们再绘制一个编辑栏控件,将其资源ID改为“IDC_PORT”,下一步我们需要为它映射一个变量,记录输入的串口号。图2.6 控件菜单图2.7 按钮控件属性图2.8 编辑框控件属性4、 添加映射变量Windows的窗体程序的交互是基于消息映射机制,比如我们的编辑框可以映射一个变量,我们在编辑框里输入数据后,这个数据可以传递到映射变量中;而我们的按钮可以映射出一个函数,当我们在运行的窗体点击这个按钮时,相应的映射函数就

6、被执行。映射变量的添加在类向导里进行,点击菜单栏的“察看”,选择“建立类向导”。在类向导里,Project选择工程名:VoyTest。Class name选择主对话框类CVoyTestDlg 选择Member Variables选项卡。找到刚才定义的编辑框ID:IDC_PORT。点击右侧的Add Variable按钮,为其映射一个UINT或者int类型的变量,这里的变量名我们定为m_nPort。图2.9 类向导图2.10 类向导添加映射变量5、 添加映射函数按钮的映射函数添加较为方便,只需要在资源预览中双击按钮控件,便会弹出一个Add Member Function的对话框。这里我们使用默认的

7、函数名OnOpen,点击OK进入函数体内编写我们的响应函数。这里我们先用UpdateData函数从编辑框获取m_nPort的值,然后用一个CString对象将这个变量显示出来。图2.11 映射函数图2.12 映射函数体图2.13 运行效果6、 从静态控件输出。 现在我们已经建立了一个具有界面输入输出功能的窗体程序,下一个实验我们将学习如何用这个程序控制机器人。在前一实验基础上,利用现有的框架代码,学习基本的机器人控制。3、安装与机器人控制方式相对应的无线通讯设备4、机器人处于可运行状态1、 按实验二建立基本的对话框界面。2、 引入控制类将IPhy.h SerialCom.h SerialCom

8、.cpp VoyCmd.h VoyCmd.cpp IBehavior.h Demo.h Demo.cpp拷贝到工程文件夹内(VoyTest)。向工程中引入串口类、协议类和行为类,即刚才拷贝的几个文件,这些类即可构成一个完整的机器人控制系统。要使用这些类,我们还需要将其实例化,即在主窗体内创建他们的对象。首先在主窗体头文件引入控制类的头文件,然后在主窗体类的声明里生成三个类的对象。图3.1 向工程中添加文件图3.2 选取添加的文件图3.3 包含头文件图3.4 实例化控制类3、 硬件层与协议层对接硬件通讯层和协议层的类已经实例化,要使他们工作起来还得进行对接。对接工作很简单,通过CSerialCo

9、m的SetCmd函数接口将协议类地址指针传递进去即可。图3.4 硬件通讯层与协议层对接4、 建立控制按钮下面我们需要界面上的一些按钮来控制机器人的具体行动。在主窗体上建立5个按钮控件,分别对应前进、后退、左转、右转和刹车。图3.5 绘出按钮图3.6 前进按钮控件属性图3.7 后退按钮控件属性图3.8 左转按钮控件属性图3.9 右转按钮控件属性图3.10 刹车按钮控件属性图3.11 修改后的界面图3.12 添加映射函数图3.13 函数体下面是各种动作的控制指令,将其添加到相应按钮的映射函数中即可。m_Cmd.SetBothMotorsSpeed(100,100); /前行m_Cmd.SetBot

10、hMotorsSpeed(-100,-100);/后退m_Cmd.SetBothMotorsSpeed(-100,100); /左转m_Cmd.SetBothMotorsSpeed(100,-100); /右转m_Cmd.Brake(1); /刹车我们已经能够控制机器人进行基本的移动了,要实现自主功能还需要借助传感器。能从机器人底层获取传感器信息并显示在软件界面上,为机器人决策提供依据。1、 按实验三建立已包含串口类、协议类和行为类的对话框界面。2、 绘制窗体显示控件。为了直观的显示返回数据,我们需要一个控件来显示传感器数据。这里我们使用ListBox控件,在界面上绘制出该控件并在类察看向导里

11、为其映射一个CListBox类型变量m_cShowList。通过这个变量我们可以对界面上的ListBox控件进行一系列操作,如用其成员函数AddString往ListBox控件里添加显示字符串。对ListBox控件的操作我们稍候介绍,在界面上还需要一个编辑框控件来输入传感器扫描时间,以及按钮控件来激活和停止自动扫描功能。如图绘制完控件之后,为编辑框添加映射变量,为按钮添加映射函数。在激活函数里,调用协议层对象的自动扫描函数:m_Cmd.AutoQueryUSonic(m_nUSonicTime); /自动查询超声信息m_Cmd.AutoQueryInfraRed(m_nInfraRedTime

12、); /自动查询红外信息里面的参数就是自动查询的循环周期,以毫秒为单位。控制程序按这个周期发送查询指令,每一个查询指令机器人都会返回相应的传感器数据。图4.1 绘制界面控件图4.2 修改ListBox控件ID图4.3 修改ListBox控件属性图4.4 为ListBox控件映射变量图4.5 映射变量列表图4.6 激活按钮的函数体3、 自动显示功能的实现查询指令发送后,机器人直接将数据返回到协议层对象m_Cmd的成员数组ValUSonic24(对应超声数据)ValInfrared24 (对应红外数据)。我们可以在主窗体中使用定时器,按照查询周期去读取和显示传感器信息。在激活函数里调用SetTim

13、er()函数启动定时器,这里我们使用0号定时器显示超声传感器信息,使用1号定时器显示红外传感器信息;在类察看向导里为主窗体添加定时器溢出消息WM_TIMER的映射函数OnTimer()。在这个映射函数体里添加传感器数据的读取和显示代码;可以看到在这里,只对1号传感器信息进行了显示。将其格式化成一个字符串对象,然后添加到ListBox控件里进行显示。图4.7 添加定时器响应消息4、 自动查询的停止可以对协议层对象的自动查询函数的参数赋值来控制自动查询的启动和停止:当参数为0时,停止自动查询;当参数非0时,自动查询启动。图4.8 停止查询函数体现在我们已经能自动获取传感器信息了,下一个实验我们学习

14、如何根据传感器信息设计机器人的一些自主行为。学习在现有框架下实现一些简单的机器人自主行为,为复杂决策奠定基础。1、 按实验四建立能自动查询传感器数据的对话框界面。2、 编写行为逻辑我们在实验三中添加的CDemo类就是一个空的行为类,里面有各个传感器信息的响应函数体,每当传感器信息返回到协议层时,协议层就会试图调用行为层的相应响应函数。所以我们只需要在特定的响应函数体内编写相应的行为逻辑即可。行为逻辑的一个重要依据就是机器人当前的运动状态,也就是参数里的nState,整个行为规划应该以这个运动状态进行分类处理。图5.1 CDemo类结构AfterSendCommand() /发送指令完毕后的处理

15、函数AfterUpdateVideoSample() /接收到一桢图象后的处理函数AfterUpdateUSonic() /超声传感器信息更新后的处理函数AfterUpdateInfrared() /红外传感器信息更新后的处理函数 switch(nState) case STOP: /机器人处于停止状态 break; case FORWARD: /机器人处于往前直行状态 case BACKWARD: /机器人处于往后直行状态 case RIGHT: /机器人处于原地右转状态break; case RIGHTFRONT: /机器人处于右转前行状态 case LEFT: /机器人处于原地左转状态

16、case LEFTFRONT: /机器人处于左转前行状态3、 实例化行为类对象编写完行为类后,我们需要将其实例化。如同硬件通讯类和协议类的实例华过程一样,在主界面类(CVoyTestDlg)的声明里(.h头文件)添加CDemo类型对象m_Demo。图5.2 行为类对象4、 与协议类对接行为类对象需要依附协议类对象才能起作用,通过协议类的SetBehavior函数完成对接工作。5、 行为的激活与停止避障行为以传感器信息为基准,将行为类接到协议类即完成行为的激活,打开传感器自动查询功能机器人便按照设计逻辑开始动作。停止行为的方式有两种,一是通过调用协议类的SetBehavior函数传递一个空指针,

17、断开行为层与协议层的连接;二是停止传感器的自动查询功能。需要注意的是仅单纯的刹车并不能停止行为层的工作。到这里,我们不仅已经能够控制机器人做一些移动动作,还能够通过传感器采集周围的信息,最后融合起来编写一些简单的自主逻辑。学习使用控制类读取机器人上电子罗盘的数据信息,为机器人决策提供依据。3、硬件上与机器人建立通讯连接4、机器人处于开启状态5、机器人平台安装了电子罗盘装置1、 按实验五建立已包含串口类、协议类和行为类的对话框界面。2、 绘制界面控件在界面添加一个输入框用于输入罗盘查询周期,添加一个“激活”和一个“停止”按钮,用于控制罗盘数据的读取操作。另外添加一个静态文本对编辑框进行说明。图6

18、.1 控制界面添加控件为编辑框添加映射变量,用于获取查询周期,为按钮添加映射函数,以便添加操作函数。图6.2 添加映射变量3、 自动查询与数据显示的实现电子罗盘的自动查询只需要调用CVoyCmd类的AutoQueryCompass接口函数即可,程序会按照参数里的周期从硬件平台读取罗盘数据,换算成与正北方向的角度值,储存到CVoyCmd类的m_angle成员变量里。因此我们需要为主窗体添加一个定时器,按照查询周期定时去读取角度数据并显示在界面上。在激活函数里,首先获取界面输入的查询周期数值,然后调用AutoQueryCompass函数激活罗盘的自动查询,同时打开2号定时器。在OnTimer()定

19、时响应函数里,为2号定时器添加响应操作,将角度数值显示到列表框控件里。图6.3 激活罗盘映射函数图6.4 罗盘数据的显示操作4、 停止查询电子罗盘自动查询的停止也是调用CVoyCmd类的AutoQueryCompass接口函数,与超声红外的接口类似,传递参数0就是停止自动查询操作。图6.5 罗盘自动查询的停止这一章试验里我们学会了如何读取电子罗盘的数据,为将来进行机器人的姿态控制奠定了基础。罗盘数据为机器人导航提供了一个宏观的依据,如果对机器人的短时间内的精确导航要求较高,建议使用电子陀螺仪。在下一章试验我们将体验一下陀螺仪导航的奇妙效果。学习使用控制类使机器人在陀螺仪导航状态下运动。5、机器

20、人安装了电子陀螺仪装置1、 按实验六建立已包含串口类、协议类和行为类的对话框界面。电子陀螺仪使用前需要进行标定,所以在界面上添加一个“标定”按钮;直行导航只需要输入行走速度值,在界面上添加一个编辑框用于直行速度值的输入,同时添加一个“直行”按钮;转向导航需要输入转向的速度和角度,所以需要添加两个编辑框,同时添加一个“转向”按钮。图7.1 控制界面添加控件3、 陀螺仪的标定电子陀螺仪使用前需要进行标定,电子陀螺仪的标定只需要调用CVoyCmd类的Demarcate接口函数。需要特别注意的是,调用这个函数后的4秒钟之内,必须保证机器人机体处于静止状态,任何轻微的震动都有可能导致导航精度的下降。图7

21、.2 陀螺仪的标定4、 陀螺仪直行导航电子陀螺仪的直行导航只需要调用CVoyCmd类的SpeedByGyro接口函数,将直行速度作为参数传递。直行状态的停止,与普通控制的刹车一样,调用CVoyCmd类的Brake函数。图7.3 直行导航操作开启连接机器人的端口后,需要点击“标定”按钮,保持机器人静止4秒钟。点击“直行”按钮开始直行导航。在导航状态中,搬动机器人改变其前进方向,观察机器人的反应。5、 陀螺仪转向导航电子陀螺仪的转向导航只需要调用CVoyCmd类的CircleByGyro接口函数,将转向的角度和速度作为参数传递。转向状态的停止,与普通控制的刹车一样,调用CVoyCmd类的Brake

22、函数。图7.4 转向导航操作开启连接机器人的端口后,对陀螺仪进行标定(若之前刚进行过标定,可省略)。利用陀螺仪的导航,可以保证机器人在不依赖其他传感器的情况下能进行短距离的精确航行。如果加上罗盘的辅助,足以保证长距离的行走精度。这方面相关试验将在高级教程中介绍,有兴趣的同学可以先自己尝试一下。学习使用视频类对USB视频设备进行图像采集。3、正确安装DirectX 9.0 SDK完整包4、USB摄像装置1、 建立新工程用Visual C+新建一个MFC对话框工程。将通用类里的所有文件拷贝到工程目录下,并将这些文件引入新工程中。设置工程属性,点击Visual C+的“工程”菜单,选择“设置”。在弹

23、出的选项卡中选择“连接”,在“对象/库模块”中输入DirectShow标准库路径。如果DirectX SDK包安装时使用的是默认路径,则Debug编译的标准连接库是:C:DXSDKSamplesC+DirectShowBaseClassesDebugstrmbasd.libRelease编译的标准连接库是:DXSDKSamplesC+DirectShowBaseClassesReleasestrmbasd.lib需要注意的是这个路径和文件名是严格区分大小写的,务必保证准确无误。在StdAfx.h文件里包含三个DirectShowSDK的头文件:#include streams.hqedit.h

24、编译一下工程,排除编译上的错误。图8.1 包含相应头文件图8.2 工程设置图8.3 新建对话框2、 添加界面控件在界面上划定一个范围,限定视频图像的显示位置和大小。这里我们使用一个图片框做显示。设置控件ID为IDC_PREVIEW,类型为矩形。为了传递这个控件的位置参数,需要在类向导里为它映射一个CStatic类型的控件变量。为视频预览的开启和关闭各自添加一个按钮,并生成相应的映射函数。图8.4 添加界面控件图8.5 预览空间属性图8.6 映射控件变量3、 视频流捕捉的实现为了实现视频流的捕捉,我们的窗体程序中必须要有一个CCaptureVideo对象,所以得在窗体类头文件里包含CCaptur

25、eVideo类头文件。图8.7 包含视频类头文件CCaptureVideo类的视频捕捉有多个模式,每个模式所搭建的视频流Graph都有所不同,为了统一处理,我们在窗体里只保留一个CCaptureVideo类型的指针,在需要进行视频捕捉的时候才生成具体对象,捕捉结束时将对象连同体内的Graph销毁。图8.8 生成类型指针图8.9 初始化指针视频类的启动接口是Create函数,将视频设备编号、显示控件指针以及捕捉模式作为参数传递进去。调用该函数后,CCaptureVideo对象会启动对应编号的视频设备的视频流捕捉工作,并将画面显示与指定的显示控件上。视频类的关闭接口是Stop函数,调用后即刻停止捕

26、获视频。为了保证视频设备的成功绑定,每次重启视频时请将原来的CCaptureVideo对象删除,生成新的对象来打开视频。图8.10 视频捕获开启操作图8.11 视频捕获关闭操作4、 图像接口CCaptureVideo类里有个CSampleGrabberCB类型对象mCB,这是视频流Graph里的一个Filter,它的主要作用就是把视频流中的图像数据暴露出来,以供我们使用。CSampleGrabberCB类里图像数据的接口是BufferCB函数,该函数里包含了我们对视频的操作,基于图像的行为调用、图像的远程传输以及静态图像的截取都在这个函数里进行。这一章试验,我们实现了数字图像的捕获,最后还简要介绍了视频图像的接口函数,为我们今后基于图像的各种研究奠定了基础。基于图像的高级应用,我们将在后面的高级教程中提到,有兴趣的同学可以先进行一些尝试。DirectX9.0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1