移动机器人轨迹跟踪软件设计站点设计DOC.docx
《移动机器人轨迹跟踪软件设计站点设计DOC.docx》由会员分享,可在线阅读,更多相关《移动机器人轨迹跟踪软件设计站点设计DOC.docx(16页珍藏版)》请在冰豆网上搜索。
![移动机器人轨迹跟踪软件设计站点设计DOC.docx](https://file1.bdocx.com/fileroot1/2023-1/14/624ea2f5-c504-402e-8626-d533b2a5e152/624ea2f5-c504-402e-8626-d533b2a5e1521.gif)
移动机器人轨迹跟踪软件设计站点设计DOC
燕山大学
课程设计说明书
题目:
移动机器人轨迹跟踪软件设计(站点设计)
学院(系):
电气工程学院
年级专业:
10级过程控制二班
学号:
学生姓名:
指导教师:
陈贵林李雅倩
燕山大学课程设计(论文)任务书
院(系):
电气工程学院基层教学单位:
自动化系
学号
学生姓名
专业(班级)
过控10-2
设计题目
移动机器人轨迹跟踪软件设计
设
计
技
术
参
数
履带式移动机器人一台
CCD摄像头一个
设
计
要
求
1、通过摄像头识别轨迹
2、机器人跟踪轨迹移动
工
作
量
1、完成设计说明书一份(包括封面、任务书、目录、正文、参考文献、个人体会),文稿建议打印,但要排版整洁规范,用B5纸打印。
2、正文包括软件使用方法、设计思路、主要算法流程、主要函数的说明;
3、提交软件源程序一份,程序要有完整、规范的注释
4、软件调试,包括轨迹识别、轨迹跟踪等。
工
作
计
划
第1周:
查阅相关资料,进行方案设计;
第2周:
编写程序;
第3周:
编写、调试程序;
第4周:
编写设计说明书,进行答辩。
参
考
资
料
1.郑阿奇.VisualC++实用教程.北京:
电子工业出版社,2012
2.DavidSimon,周瑜萍等编著.VisualC++6编程宝典.北京:
电子工业出版社,2005
3.肖宏伟编著.VisualC++6.0实效编程百例.北京:
人民邮电出版社,2002
指导教师签字
陈贵林李雅倩
基层教学单位主任签字
李海滨
说明:
此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2013年11月25日
目录
前言……………………………………………………………………………
第一章设计思路……………………………………………………………
第二章程序……………………………………………………………
第三章算法……………………………………………………………
心得体会
前言
机器人的应用越来越广泛,几乎渗透到所有领域。
移动机器人是机器人学中的一个重要分支。
早在60年代,就已经开始了关于移动机器人的研究。
关于移动机器人的研究涉及许多方面,首先,要考虑移动方式,可以是轮式的、履带式、腿式的,对于水下机器人,则是推进器。
其次,必须考虑驱动器的控制,以使机器人达到期望的行为。
第三,必须考虑导航或路径规划,对于后者,有更多的方面要考虑,如传感融合,特征提取,避碰及环境映射。
因此,移动机器人是一个集环境感知、动态决策与规划、行为控制与执行等多种功能于一体的综合系统。
对移动机器人的研究,提出了许多新的或挑战性的理论与工程技术课题,引起越来越多的专家学者和工程技术人员的兴趣,更由于它在军事侦察、扫雷排险、防核化污染等危险与恶劣环境以及民用中的物料搬运上具有广阔的应用前景,使得对它的研究在世界各国受到普遍关注
关键字:
移动机器人
第一章设计思路
1.1机器人的介绍
机器人的诞生和机器人控制技术发展作为20世纪自动控制原理最具说服力的成就、人类科学技术进步的重大成果[1],是现代计算机与自动化等技术高速发展的产物,同时也是当代最高意义上的自动化。
自1956年第一台工业机器人诞生之日起,机器人的应用越来越普及。
20世纪60年代末机器人开始进入商业化和工业领域以来,机器人的应用范围已经遍及到工业、国防、宇宙空间、海洋开发、医疗保健、抢险救灾等人类生活的各个方面。
机器人由于具有高度的灵活性、快速的反应能力以及巨大的信息处理能力,使其能够在很多环境替代人进行工作。
从重复动作的流水线机械手到智能机器人,从平地到高山海底甚至太空,以至于在比较恶劣危险的工作环境,都是机器人发挥其作用的重要舞台,然而控制系统作为机器人的心脏,其性能的好坏直接决定了机器人的智能化水平。
近年来对移动机器人的研究已成为了一大热点,促进了移动机器人在各个领域中的进一步应用,本文也将在这一方面进行一些分析和研究。
智能移动机器人,是一个集环境感知、动态决策与规划、行为控制与执行等多功能于一体的综合系统。
它集中了传感器技术、信息处理、电子工程、计算机工程、自动化控制工程以及人工智能等多学科的研究成果,代表机电一体化的最高成就,是目前科学技术发展最活跃的领域之一。
随着机器人性能不断地完善,移动机器人的应用范围大为扩展,不仅在工业、农业、医疗、服务等行业中得到广泛的应用,而且在城市安全、国防和空间探测领域等有害与危险场合得到很好的应用。
因此,移动机器人技术已经得到世界各国的普遍关注。
1.2实训任务分配
本次的设计任务在老师的帮助下得到了细致地划分,而且也增加了一些项目,总体来说任务分为三大块:
1.轨迹的识别与跟踪。
2.站的设计。
3.自定义轨迹的运行。
这三部分的任务既是相互独立的又是相互联系的。
首先来分析第一个任务:
轨迹的识别与跟踪,这个任务包含了摄像头的初始化以及图像的采集以及图像的存取,轨迹的识别用到了一个算法。
机器人的控制也是这个任务包含的一个总要部分,其中包括了速度控制,方向控制等等。
第二个任务是站的设计,老师提到了“站”这个概念,这是在工厂的生产中的一些重要的机制,也是非常有实用性的一个设计。
第三个任务是自定义轨迹的运行,老师提到了可以设计一个圆形轨迹也可以设计一个方形轨迹,机器人的这种运动在生产生活中的应用也是很广泛的。
1.3CCD摄像头的介绍
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_5DE026FE6947__INCLUDED_)
#defineAFX_DLGSETTING_H__036F7483_B3C7_4494_88D7_5DE026FE6947__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
//DlgSetting.h:
headerfile
//
#include"resource.h"
#include"XPButton.h"
/////////////////////////////////////////////////////////////////////////////
//CDlgSettingdialog
structPattern//定义结构体,保存0~99的站点的特征
{
intnum;//站点序号
inttimer;//停靠时间
BOOLbIsPositive;//滚筒是否正转
BOOLbIsNegative;//滚筒是否反转
};
classCDlgSetting:
publicCDialog
{
//Construction
public:
CDlgSetting(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CDlgSetting)
enum{IDD=IDD_DIALOG_SETTING};
CComboBoxm_ComboLowVel;
CComboBoxm_ComboHighVel;
CComboBoxm_ComboHandVel;
CComboBoxm_ComboRollerNegative;
CComboBoxm_ComboRollerPositive;
CComboBoxm_ComboStopTime;
CComboBoxm_ComboStation;
//按钮美化
CXPButtonm_XPbtn_1,m_XPbtn_2,m_XPbtn_3,m_XPbtn_4;
//}}AFX_DATA
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CDlgSetting)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//Generatedmessagemapfunctions
//{{AFX_MSG(CDlgSetting)
virtualBOOLOnInitDialog();
afx_msgvoidOnBUTTONSaveSpeed();
afx_msgvoidOnBUTTONSaveStation();
afx_msgvoidOnCloseupCOMBOStation();
afx_msgvoidOnButtonPrior();
afx_msgvoidOnButtonNext();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif//!
defined(AFX_DLGSETTING_H__036F7483_B3C7_4494_88D7_5DE026FE6947__INCLUDED_)
2.2对于前一站与后一站的定义
/DlgSetting.cpp:
implementationfile
//
#include"stdafx.h"
#include"REBotW.h"
#include"DlgSetting.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
constintcomboStopTime[5]={0,2,15,30,40};//停靠时间,单位:
秒
constdoublecomboLowSpeed[5]={0.50,0.40,0.30,0.20,0.10};//低速
constdoublecomboHandSpeed[5]={1.20,1.00,0.80,0.60,0.40};//手动
constdoublecomboHighSpeed[5]={1.30,1.20,1.10,1.00,0.80};//高速
constdoubleg_dAGV_VEL_NORMAL=8000;//21000;//每秒21000脉冲
doubleg_dAGV_VEL_LOW;
doubleg_dAGV_VEL_HAND;
doubleg_dAGV_VEL_HIGH;
PatternpStation[100];
/////////////////////////////////////////////////////////////////////////////
//CDlgSettingdialog
CDlgSetting:
:
CDlgSetting(CWnd*pParent/*=NULL*/)
:
CDialog(CDlgSetting:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CDlgSetting)
//}}AFX_DATA_INIT
}
voidCDlgSetting:
:
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_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CDlgSettingmessagehandlers
BOOLCDlgSetting:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
//打开"站点配置"文件
CFileTheFile("Station.dat",CFile:
:
modeRead);
CArchivear(&TheFile,CArchive:
:
load,40960);
TheFile.SeekToBegin();
for(inti=0;i<100;i++)
{
ar>>pStation[i].num;
ar>>pStation[i].timer;
ar>>pStation[i].bIsPositive;
ar>>pStation[i].bIsNegative;
CStringstr;
str.Format("%d",i);
m_ComboStation.AddString(str);
}
ar.Close();
TheFile.Close();
m_ComboStation.SetCurSel(0);
OnCloseupCOMBOStation();
//打开"速度配置"文件
CFileTheFile2("Velocity.dat",CFile:
:
modeRead);
CArchivear2(&TheFile2,CArchive:
:
load,40960);
TheFile2.SeekToBegin();
intnum_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_ComboHandVel.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();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
voidCDlgSetting:
:
OnButtonPrior()//前一站
{
if(m_ComboStation.GetCurSel()>0)
{
m_ComboStation.SetCurSel(m_ComboStation.GetCurSel()-1);
OnCloseupCOMBOStation();
}
}
voidCDlgSetting:
:
OnButtonNext()//后一站
{
if(m_ComboStation.GetCurSel(){
m_ComboStation.SetCurSel(m_ComboStation.GetCurSel()+1);
OnCloseupCOMBOStation();
}
}
voidCDlgSetting:
:
OnCloseupCOMBOStation()//当IDC_COMBO_Station控件发生变化时
{
for(inti=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);
}
}
voidCDlgSetting:
:
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();
CFileTheFile("Station.dat",CFile:
:
modeCreate|CFile:
:
modeReadWrite);
CArchivear(&TheFile,CArchive:
:
store,40960);
TheFile.SeekToBegin();
for(inti=0;i<100;i++)
{
ar<ar<ar<ar<}
ar.Close();
TheFile.Close();
MessageBox("新的站点设置完毕!
下次打开应用软件时有效!
","提示",MB_ICONWARNING);
}