当前位置:文档之家› 移动机器人轨迹跟踪软件设计(站点设计)(DOC)

移动机器人轨迹跟踪软件设计(站点设计)(DOC)

燕山大学课程设计说明书题目:移动机器人轨迹跟踪软件设计(站点设计)学院(系):电气工程学院年级专业: 10级过程控制二班学号:学生姓名:指导教师:陈贵林李雅倩燕山大学课程设计(论文)任务书2013年11 月25 日目录前言……………………………………………………………………………第一章设计思路……………………………………………………………第二章程序……………………………………………………………第三章算法……………………………………………………………心得体会前言机器人的应用越来越广泛,几乎渗透到所有领域。

移动机器人是机器人学中的一个重要分支。

早在60年代,就已经开始了关于移动机器人的研究。

关于移动机器人的研究涉及许多方面,首先,要考虑移动方式,可以是轮式的、履带式、腿式的,对于水下机器人,则是推进器。

其次,必须考虑驱动器的控制,以使机器人达到期望的行为。

第三,必须考虑导航或路径规划,对于后者,有更多的方面要考虑,如传感融合,特征提取,避碰及环境映射。

因此,移动机器人是一个集环境感知、动态决策与规划、行为控制与执行等多种功能于一体的综合系统。

对移动机器人的研究,提出了许多新的或挑战性的理论与工程技术课题,引起越来越多的专家学者和工程技术人员的兴趣,更由于它在军事侦察、扫雷排险、防核化污染等危险与恶劣环境以及民用中的物料搬运上具有广阔的应用前景,使得对它的研究在世界各国受到普遍关注关键字:移动机器人第一章设计思路1.1 机器人的介绍机器人的诞生和机器人控制技术发展作为20世纪自动控制原理最具说服力的成就、人类科学技术进步的重大成果[1],是现代计算机与自动化等技术高速发展的产物,同时也是当代最高意义上的自动化。

自1956年第一台工业机器人诞生之日起,机器人的应用越来越普及。

20世纪60年代末机器人开始进入商业化和工业领域以来,机器人的应用范围已经遍及到工业、国防、宇宙空间、海洋开发、医疗保健、抢险救灾等人类生活的各个方面。

机器人由于具有高度的灵活性、快速的反应能力以及巨大的信息处理能力,使其能够在很多环境替代人进行工作。

从重复动作的流水线机械手到智能机器人,从平地到高山海底甚至太空,以至于在比较恶劣危险的工作环境,都是机器人发挥其作用的重要舞台,然而控制系统作为机器人的心脏,其性能的好坏直接决定了机器人的智能化水平。

近年来对移动机器人的研究已成为了一大热点,促进了移动机器人在各个领域中的进一步应用,本文也将在这一方面进行一些分析和研究。

智能移动机器人,是一个集环境感知、动态决策与规划、行为控制与执行等多功能于一体的综合系统。

它集中了传感器技术、信息处理、电子工程、计算机工程、自动化控制工程以及人工智能等多学科的研究成果,代表机电一体化的最高成就,是目前科学技术发展最活跃的领域之一。

随着机器人性能不断地完善,移动机器人的应用范围大为扩展,不仅在工业、农业、医疗、服务等行业中得到广泛的应用,而且在城市安全、国防和空间探测领域等有害与危险场合得到很好的应用。

因此,移动机器人技术已经得到世界各国的普遍关注。

1.2 实训任务分配本次的设计任务在老师的帮助下得到了细致地划分,而且也增加了一些项目,总体来说任务分为三大块:1.轨迹的识别与跟踪。

2.站的设计。

3.自定义轨迹的运行。

这三部分的任务既是相互独立的又是相互联系的。

首先来分析第一个任务:轨迹的识别与跟踪,这个任务包含了摄像头的初始化以及图像的采集以及图像的存取,轨迹的识别用到了一个算法。

机器人的控制也是这个任务包含的一个总要部分,其中包括了速度控制,方向控制等等。

第二个任务是站的设计,老师提到了“站”这个概念,这是在工厂的生产中的一些重要的机制,也是非常有实用性的一个设计。

第三个任务是自定义轨迹的运行,老师提到了可以设计一个圆形轨迹也可以设计一个方形轨迹,机器人的这种运动在生产生活中的应用也是很广泛的。

1.3 CCD摄像头的介绍CCD(电荷耦合器)摄像头基本知识现在科学级的摄像头比前几年更尖端,应用领域也更广了。

在生物科学领域,从显微镜、分光光度计到胶文件、化学放光探测系统,都用到了CCD的摄像头。

但是很多研究工作者对CCD的指标仍云里雾里。

下面对CCD的一些常见指标进行表述。

常见的CCD一般指:CCD摄像头和插在电脑的采集卡区别数字摄像头与模拟摄像头所有CCD芯片都属于模拟的设备。

当图像进入计算机是数字的。

如果信号在摄像头、采集卡两部分完成数字化的,这个CCD被认为是模拟CCD。

数字摄像头事实上是由内置于摄像头的数字化设备完成数字化过程,这样可以减少图像噪音。

与模拟摄像头相比,数字摄像头提高了摄像头的信噪比、增加摄像头的动态范围、最大化图像灰度范围。

科学级的绝大多数的CCD芯片都是由Kodak、Sony、SIT制造。

评价CCD的基本指标信噪比SNR真实体现摄像头的检测能力。

所有的CCD摄像头的厂家为提高摄像头的性能,都尽力使信号(可达到满井电子的数目)最大同时尽可能减少噪音。

SNR=满井电子/噪音电子=动态范围=最大灰阶=2bit数在相同满井电子的CCD,降低CCD噪音,就能提高CCD的监测能力,热或者暗电流对于CCD都是噪音,噪音在Cool CCD基本都可以被深度致冷的Peltier 消除。

在曝光超过5-10秒,CCD芯片就会发热,没有致冷设备的芯片,“热”或者白的像素点就会遮盖图像。

-20度的摄像头可以拍摄不超过5分钟的图像,-40度的摄像头拍摄时间可以超过1小时1.4机器人从一站到另一站的界面第二章2.1定义站点的程序#if !defined(AFX_DLGSETTING_H__036F7483_B3C7_4494_88D7_5DE026FE694 7__INCLUDED_)#defineAFX_DLGSETTING_H__036F7483_B3C7_4494_88D7_5DE026FE6947__INCLU DED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// DlgSetting.h : header file//#include "resource.h"#include "XPButton.h"/////////////////////////////////////////////////////////////////////////////// CDlgSetting dialogstruct Pattern//定义结构体,保存0~99的站点的特征{int num; //站点序号int timer; //停靠时间BOOL bIsPositive; //滚筒是否正转BOOL bIsNegative; //滚筒是否反转};class CDlgSetting : public CDialog{// Constructionpublic:CDlgSetting(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DATA(CDlgSetting)enum { IDD = IDD_DIALOG_SETTING };CComboBox m_ComboLowVel;CComboBox m_ComboHighVel;CComboBox m_ComboHandVel;CComboBox m_ComboRollerNegative;CComboBox m_ComboRollerPositive;CComboBox m_ComboStopTime;CComboBox m_ComboStation;//按钮美化CXPButton m_XPbtn_1,m_XPbtn_2,m_XPbtn_3,m_XPbtn_4;//}}AFX_DATA// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CDlgSetting)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected:// Generated message map functions//{{AFX_MSG(CDlgSetting)virtual BOOL OnInitDialog();afx_msg void OnBUTTONSaveSpeed();afx_msg void OnBUTTONSaveStation();afx_msg void OnCloseupCOMBOStation();afx_msg void OnButtonPrior();afx_msg void OnButtonNext();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_DLGSETTING_H__036F7483_B3C7_4494_88D7_5DE026FE6947 __INCLUDED_)2.2对于前一站与后一站的定义/ DlgSetting.cpp : implementation file//#include "stdafx.h"#include "REBotW.h"#include "DlgSetting.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifconst int comboStopTime[5] = {0, 2, 15, 30, 40}; //停靠时间,单位:秒const double comboLowSpeed[5] = {0.50, 0.40, 0.30, 0.20, 0.10}; //低速const double comboHandSpeed[5] = {1.20, 1.00, 0.80, 0.60, 0.40}; //手动const double comboHighSpeed[5] = {1.30, 1.20, 1.10, 1.00, 0.80}; //高速const double g_dAGV_VEL_NORMAL = 8000;//21000; //每秒21000脉冲double g_dAGV_VEL_LOW;double g_dAGV_VEL_HAND;double g_dAGV_VEL_HIGH;Pattern pStation[100];/////////////////////////////////////////////////////////////////////////////// CDlgSetting dialogCDlgSetting::CDlgSetting(CWnd* pParent /*=NULL*/): CDialog(CDlgSetting::IDD, pParent){//{{AFX_DATA_INIT(CDlgSetting)//}}AFX_DATA_INIT}void CDlgSetting::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CDlgSetting)DDX_Control(pDX, IDC_COMBO_LOW, m_ComboLowVel);DDX_Control(pDX, IDC_COMBO_HIGH, m_ComboHighVel);DDX_Control(pDX, IDC_COMBO_HAND, m_ComboHandVel);DDX_Control(pDX, IDC_COMBO_Roller_negative, m_ComboRollerNegative);DDX_Control(pDX, IDC_COMBO_Roller_positive, m_ComboRollerPositive);DDX_Control(pDX, IDC_COMBO_StopTime, m_ComboStopTime);DDX_Control(pDX, IDC_COMBO_Station, m_ComboStation);//按钮美化DDX_Control(pDX, IDC_BUTTON_PRIOR, m_XPbtn_1);DDX_Control(pDX, IDC_BUTTON_NEXT, m_XPbtn_2);DDX_Control(pDX, IDC_BUTTON_SaveSpeed, m_XPbtn_3);DDX_Control(pDX, IDC_BUTTON_SaveStation, m_XPbtn_4);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CDlgSetting, CDialog)//{{AFX_MSG_MAP(CDlgSetting)ON_BN_CLICKED(IDC_BUTTON_SaveSpeed, OnBUTTONSaveSpeed) ON_BN_CLICKED(IDC_BUTTON_SaveStation, OnBUTTONSaveStation) ON_CBN_CLOSEUP(IDC_COMBO_Station, OnCloseupCOMBOStation) ON_BN_CLICKED(IDC_BUTTON_PRIOR, OnButtonPrior)ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CDlgSetting message handlersBOOL CDlgSetting::OnInitDialog(){CDialog::OnInitDialog();// TODO: Add extra initialization here//打开"站点配置"文件CFile TheFile("Station.dat",CFile::modeRead);CArchive ar(&TheFile,CArchive::load,40960);TheFile.SeekToBegin();for(int i=0;i<100;i++){ar>>pStation[i].num;ar>>pStation[i].timer;ar>>pStation[i].bIsPositive;ar>>pStation[i].bIsNegative;CString str;str.Format(" %d",i);m_ComboStation.AddString(str);}ar.Close();TheFile.Close();m_ComboStation.SetCurSel(0);OnCloseupCOMBOStation();//打开"速度配置"文件CFile TheFile2("Velocity.dat",CFile::modeRead);CArchive ar2(&TheFile2,CArchive::load,40960);TheFile2.SeekToBegin();int num_vel;ar2>>num_vel;g_dAGV_VEL_LOW = g_dAGV_VEL_NORMAL * comboLowSpeed[num_vel]; //低速m_ComboLowVel.SetCurSel(num_vel);ar2>>num_vel;g_dAGV_VEL_HAND = g_dAGV_VEL_NORMAL * comboHandSpeed[num_vel]; //手动m_ComboHandV el.SetCurSel(num_vel);ar2>>num_vel;g_dAGV_VEL_HIGH = g_dAGV_VEL_NORMAL * comboHighSpeed[num_vel]; //高速m_ComboHighVel.SetCurSel(num_vel);ar2.Close();TheFile2.Close();return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}void CDlgSetting::OnButtonPrior() //前一站{if(m_ComboStation.GetCurSel()>0){m_ComboStation.SetCurSel(m_ComboStation.GetCurSel()-1);OnCloseupCOMBOStation();}}void CDlgSetting::OnButtonNext() //后一站{if(m_ComboStation.GetCurSel()<m_ComboStation.GetCount()){m_ComboStation.SetCurSel(m_ComboStation.GetCurSel()+1);OnCloseupCOMBOStation();}}void CDlgSetting::OnCloseupCOMBOStation() //当IDC_COMBO_Station控件发生变化时{for(int i=0;i<5;i++){if(pStation[m_ComboStation.GetCurSel()].timer == comboStopTime[i]){m_ComboStopTime.SetCurSel(i);}}if(pStation[m_ComboStation.GetCurSel()].bIsPositive){m_ComboRollerPositive.SetCurSel(1);}else{m_ComboRollerPositive.SetCurSel(0);}if(pStation[m_ComboStation.GetCurSel()].bIsNegative){m_ComboRollerNegative.SetCurSel(1);}else{m_ComboRollerNegative.SetCurSel(0);}}void CDlgSetting::OnBUTTONSaveStation() //保存站点设置{if(MessageBox("您确定要更改当前的站点设置?","询问",MB_YESNO|MB_ICONQUESTION)==IDYES){pStation[m_ComboStation.GetCurSel()].timer = comboStopTime[m_ComboStopTime.GetCurSel()];pStation[m_ComboStation.GetCurSel()].bIsPositive = m_ComboRollerPositive.GetCurSel();pStation[m_ComboStation.GetCurSel()].bIsNegative = m_ComboRollerNegative.GetCurSel();CFile TheFile("Station.dat",CFile::modeCreate|CFile::modeReadWrite);CArchive ar(&TheFile,CArchive::store,40960);TheFile.SeekToBegin();for(int i=0;i<100;i++){ar<<pStation[i].num;ar<<pStation[i].timer;ar<<pStation[i].bIsPositive;ar<<pStation[i].bIsNegative;}ar.Close();TheFile.Close();MessageBox("新的站点设置完毕! 下次打开应用软件时有效!","提示",MB_ICONWARNING);}}void CDlgSetting::OnBUTTONSaveSpeed() //保存速度设置{if(MessageBox("您确定要更改当前的速度设置?","询问",MB_YESNO|MB_ICONQUESTION)==IDYES){CFile TheFile("Velocity.dat",CFile::modeCreate|CFile::modeReadWrite);CArchive ar(&TheFile,CArchive::store,40960);TheFile.SeekToBegin();ar<<m_ComboLowVel.GetCurSel();ar<<m_ComboHandVel.GetCurSel();ar<<m_ComboHighVel.GetCurSel();ar.Close();TheFile.Close();MessageBox("新的速度设置完毕! 下次打开应用软件时有效!","提示",MB_ICONWARNING);}}第三章算法1 算法目的:运动目标跟踪算法的目的就是对视频中的图象序列进行分析,计算出目标在每帧图象上的位置。

相关主题