第一篇:机器人控制技术基础实验报告
华北电力大学
实 验 报 告
| |
实验名称:
机器人控制技术基础
课程名称: 机器人控制技术基础
实 验 人:张 钰 信 安1601 201609040126 李 童 能 化1601 201605040111 韩翔宇 能 化1601 201605040104 成 绩:
指导教师: 林永君、房静
实验日期: 2016年3月4日-3月26日
华北电力大学工程训练中心
第一部分:单片机开发板 实验一:流水灯实验
实验目的:通过此实验,初步掌握单片机的 IO 口的基本操作。实验内容:控制接在 P0.0上的 8个LED L0—L8 依次点亮,如此循环。硬件说明:
根据流水灯的硬件连接,我们发现只有单片机的IO口输出为低电平时LED灯才会被点亮,我们先给P0口设定好初值,只让其点亮一盏灯,然后用左右移函数即可依次点亮其他的灯。源程序如下: #include
for(;;){ led_1=0;display_ms(10);
}
} led_1=1;led_2=0;display_ms(10);led_2=1;led_3=0;display_ms(10);led_3=1;led_4=0;display_ms(10);led_4=1;led_5=0;display_ms(10);led_5=1;led_6=0;display_ms(10);led_6=1;led_7=0;display_ms(10);led_7=1;led_8=0;display_ms(10);led_8=1;第二部分:机器人小车
内容简介:机器人小车完成如图规定的赛道,从规定的起点开始,记录完成赛道一圈的时间。必须在30秒之内完成,超时无效。其中当小车整体都在赛道外时停止比赛,视为犯规,小车不规定运动方向,顺时针和逆时针都可以采用,但都从规定的起点开始记录时间。作品优点及应用前景:
单片机可靠性高,编程简单单片机执行一条指令的时间是μs级,执行一个扫描周期的时间为几ms乃至几十ms。相对于电器的动作时间而言,扫描周期是短暂的,可以认为在一个扫描周期内输入端子的状态是不变的,而对其状态变化的采集和处理也是实时的,从而满足了实时控制的要求。本次设计的简易智能电动车,采用STC89C52RC单片机作为小车的检测和控制核心,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,通过控制单片机进而控制小车,体现了智能化,通过使用不同的函数及设定不同的函数参数,能够在不同的要求下改变小车的前后轮转动方向以及转动速度,来完成不同的目的要求。在画正方形的同时能够完成四个1/4圆弧的制作。
循迹实验场地图:
传感器电路图:
源程序:
#include
} void main(){ unsigned int i;
l_l = 1;r_l = 1;l_m = 1;r_m = 1;for(;;)unsigned int i,j;for(i=0;i if((l_l ==0)&&(r_l ==1)){ l_m = 1;for(i=0;i<5;i++) { } r_m = 0;delay(5);r_m = 1;delay(45); } else if((l_l ==1)&&(r_l ==0)){ } else if((l_1==1)&&(l_2==1)){ } else { l_m = 0;r_m = 0;delay(5);l_m = 1;r_m=1;l_m=1;r_m = 1;for(i=0;i<5;i++){ } l_m = 0;delay(5);l_m = 1;delay(45); } r_m = 1;delay(45);} } 第三部分:心得体会、合理性建议或意见 参加这次机器人实验基础培训,我最大的收获便是对机械控制有了初步的了解,然后学会了Keil uVison和Proteus等软件的用法,掌握了基本的C51单片机的初步调试和更改程序。在调试程序的过程中,我认识到了规范的重要性,写程序时一定要规范,否则就会在调试过程中报错。然后就是在焊制传感器的过程中,掌握了电络铁的使用,并了解了传感器的构成和程序控制方法。然后在调试程序过程中,一开始我们准备将所有控制函数写在头文件中,然后在主函数中调用,可是后来实践过程中总是不能达到预期效果,经过思考后,我想到了调用函数过程中变量的生存期问题,最终不得不放弃这种方法,采用正常的C语言函数写法。其次,在理论课的学习中,接触到了对未来学习模电或者数电有用的知识和模拟程序。非常感谢学长们的帮助,我们从中学到了很多。 机器人及控制技术教学大纲 第一篇 机器人控制的数学基础 第一章 引言 第二章 拓扑学基础 第三章近世代数基础 第二篇 机器人本体控制(自学)第一章 引言 第二章 刚体运动 第三章 机器人运动学 第四章 机器人动力学 第三篇 机器人手指抓取控制 第一章 引言 第二章 微分几何学基础 曲线几何(The Geometry of Curves)2 曲面(Surfaces)3 曲率(Curvatures)4 恒平均曲率曲面(Constant Mean Curvatures Surfaces)5 侧地线,度量和等长(Geodesics, Metrics and Isometries)6 完整和Gauss-Bonnet定理(Holonomy and the Gauss-Bonnet theorem)第三章 机器人手指抓取运动学 第四章 机器人手指抓取动力学 第四章 机器人技术最新进展 《工业机器人技术基础》教学大纲 一、课程基本信息 课程名称:工业机器人技术基础 学时:48 适用对象: 工业机器人技术专业、电气自动化技术专业、机电一体化技术专业 考核方式:考查 二、课程简介 机器人学是一门高度交叉的前沿学科,机器人技术是集力学、机械学、生物学、人类学、计算机科学与工程、控制论与控制工程学、电子工程学、人工智能、社会学等多学科知识之大成,是一项综合性很强的新技术。通过该课程的学习,使得学生基本熟悉这门技术以及其发展状况,为今后从事工业机器人的操作管理、维护维修、系统安装调试和集成设计的工作打下基础。 三、课程性质与教学目的 本课程是专业基础课,通过本课程的学习,使学生了解机器人及其应用,掌握机器人系统组成、机构、运动分析、控制和使用的技术要点和基础理论。机器人是典型的机电一体化装置,它不是机械、电子的简单组合,而是机械、电子、控制、检测、通信和计算机的有机融合,通过这门课的学习,使学生对机器人有一个全面、深入的认识。培养学生综合运用所学基础理论和专业知识分析问题解决问题的能力。第1章概述 机器人的基本概念,机器人的组成原理、机器人应用与外部的关系、机器人应用技术的现状 第2章机器人的基础知识 机器人的分类、机器人的基本术语与图形符号、机器人的技术参数、机器人的运动学基础、机器人的动力学基础 第3章机器人的机械结构系统 机器人的机械结构系统、机器人的腕部机构、机器人的手部机构、机器人的行走机构 第4章机器人的驱动系统 机器人的驱动系统概述、电动机及其特性、液压驱动系统及其特性 第5章机器人的控制系统 机器人的控制系统、伺服控制系统及其参数、交流伺服电动机的调速、机器人控制系统结构、机器人控制的示教再现、机器人控制系统举例第6章机器人的感觉系统 机器人的传感技术、机器人的内部传感器、机器人的外部传感器、机器人的视觉系统、机器人传感器的选择 第7章机器人的语言系统 机器人的语言系统概述、常用的机器人语言简介、机器人的离线编程、机器人的编程示例 第8章工业机器人及其应用 工业机器人概述、焊接机器人、搬运机器人、喷涂机器人、装配机器人 五、需要说明的问题 1.本大纲适用于工业机器人技术、电气自动化技术、机电一体化技术专业;2.本大纲的学时为参考学时,学时如有变化,任课教师可在此大纲的基础上增减一些内容。3.选用教材时要尽量选用新版教材,或最新获奖教材。 4.习题和实验内容着重加深基本概念的理解,基本方法的运用和创新能力的培养,从而巩固课堂教学效果。2017年8月24日 本文档下载自360文档中心,www.360docs.net更多营销,职业规划,工作简历,入党,工作报告,总结,学习资料,学习总结,PPT模板下载,范文等文档下载;转载请保留出处:http://www.360docs.net/doc/info-c6444f51777f5acfa1c7aa00b52acfc789eb9f23.html 课程名称:工业组态控制技术 任务一:我的第一个工程,时间3月8日 任务二:水箱控制,时间3月22日 任务三:用户权限的管理,时间 4月18日 任务一:我的第一个工程 一、工作任务 1、理解组态技术、MCGS组态软件的特点和构成。 2、建立一个简单的MCGS组态工程。 二、工作要求 1、正确回答相关的理论知识点。 2、建立名为“我的第一个工程”的工程项目,保存到F盘以自己学号和姓名命名的文件夹中。 3、工程运行时,立即最大化显示工程画面,窗口标题为“我的第一个工程”。画面中有:1台水泵、2个水罐、2个阀门、3段水管和相关文字注释。工程效果图可参见MCGS帮助系统:MCGS快速入门。 三、工作过程 (一)理论学习,回答下列问题: 1、什么是工控组态软件? 2、说明英文缩写的含义:MCGS、ODBC、OPC、OLE。 3、MCGS系统包括哪些部分?其核心是什么? 4、MCGS系统为什么与设备无关? (二)详细写出组态工作过程 1、创建自己的文件夹 打开F盘,鼠标右击,新建文件夹,将文件夹命名为自己的学号和姓名,如:41011150 XX。这样在F盘根目录下就建立了自己的文件夹——F:41011150 XX。(每次组态工作前,先创建自己的文件夹,然后将组态工程文件保存在此文件夹中,今后不再重复说明)。 2、创建工程 (1)双击桌面“MCGS组态环境”图标,打开MCGS组态环境窗口。(一般会自动弹出一个最近编辑过的工作台窗口,将它关闭。) (2)单击“文件”菜单中的“新建工程”选项,弹出一个工作台窗口。一般会在D:MCGSWORK下自动生成新建工程,默认的工程名为:“新建工程0.MCG”(若新建工程0.MCG已经存在,则新建工程的顺序号顺延,如:1、2、3等)。 (3)单击“文件”菜单中的“工程另存为”选项,弹出文件保存窗口。在“文件名”一栏内输入“我的第一个工程”。再单击“保存在”一栏内的小黑三角,找到自己的文件夹,如F:41011150 XX。点击“保存”按钮,工程创建完毕。 3、创建用户窗口 (1)在工作台中,单击“新建窗口”按钮,新建一个用户窗口,名称为“窗口0”。(2)选择“窗口0”,单击“窗口属性”按钮,进入“用户窗口属性设置”。将窗口名称改为:我的第一个工程,窗口标题改为:我的第一个工程,窗口内容注释改为:××设计(如:41011150 XX设计),窗口位置选中“最大化显示”,其它不变,单击“确认”按钮。这时原来的“窗口0”已经变为“我的第一个工程”。 (3)选中“我的第一个工程”,点击右键,选择下拉菜单中的“设置为启动窗口”选项,将该窗口设置为MCGS运行环境中自动加载的启动窗口。 4、编辑画面 (1)选中“我的第一个工程”窗口图标,单击“动画组态”按钮(或直接双击“我的第一个工程”窗口图标),进入动画组态窗口。若没有看见工具箱则单击“查看”菜单,选择“绘图工具箱”。下面开始编辑本窗口的画面。 (2)画水泵:单击工具箱“插入元件”,弹出“对象元件库管理”对话框,从“泵”类中选取泵40,再将泵调整为适当大小,用鼠标拖动到适当位置(参照效果图)。从最下一行的状态条中,记录泵的位置和大小。若没有看见状态条则单击“查看”菜单,选择“状态条”。(3)画“储藏罐”:同理,在“储藏罐”类中分别选取罐 17、罐53。参照效果图调整位置和大小,并做好记录。 (4)画“阀门”:同理,在“阀门”类中分别选取阀 58、阀44。参照效果图调整位置和大小,并做好记录。 (5)画“水管”:单击工具箱“流动块”,移动鼠标至窗口的预定位置,点击一下鼠标左键,移动鼠标,在鼠标光标后形成一道虚线,拖动一定距离后,点击鼠标左键,生成一段流动块。再拖动鼠标(可沿原来方向,也可垂直原来方向),生成下一段流动块。双击鼠标左键即可结束绘制。(若想修改流动块,先选中流动块,鼠标指针指向流动块周围的某一小方块,按住左键拖动鼠标,即可调整流动块的形状)。参照效果图,用流动块画出3段水管。为了让水管两端与水罐连接的美观,或者水管挡住了阀门画面,可以将水管的图层移动至最底层。选择所画的流动块,右击鼠标,选择“排列”,再选择“最后面”。(6)作出“文字注释”:单击工具箱“标签”,在水泵下方用鼠标拖动出一个文本框,输入“水泵”。再双击“水泵”标签,弹出“对象组态属性设置”对话框,边线颜色选“无边线颜色”,字符颜色选“蓝色”,字符字体选“宋体/粗体/三号”,单击“确认”。若文字显示不全,则用鼠标调整文本框大小(调大一些没有关系)。同理,在适当的位置分别画出另外的文字标签“水罐1”、“水罐2”、“调节阀”、“出水阀”。(7)保存画面:选择“文件”菜单中的“保存窗口”选项,保存画面。 5、工程运行 单击单击“文件”菜单中的“进入运行环境”,系统提示:并口(USB接口)上没有软件狗,只能运行30分钟!点击“确认”即可进入MCGS运行环境(若关闭了“MCGS组态环境”窗口,则在桌面上双击“MCGS运行环境”即可)。 6、工程提交 将电脑中建立的自己的文件夹发送到自己的移动盘中,并尝试运行一次,确认组态工程被正确保存。运行过的组态工程会多一个加字母D的数据库文件“我的第一个工程D”,下次运行时还会自动生成,若运行数据无需保存,可以删除。 四、工作结果 进入MCGS运行环境,立即最大化显示标题为“我的第一个工程”的工程画面,画面内容达到设计要求。工程效果图如下:(参见程序文件) 五、总结与体会 围绕以下要点来谈谈完成本次任务的体会: 1、本次任务中自己做了什么?遇到哪些问题?如何解决的? 2、完成这次任务有什么收获? 任务二:水箱控制 一、工作任务 1、制作水箱控制组态画面。 2、模拟水箱控制过程。 二、工作要求 1、正确回答相关的理论知识点。 2、建立名为“水箱控制”的工程项目,保存到F盘以自己学号和姓名命名的文件夹中。 3、工程运行时,立即最大化显示工程画面,窗口标题为“水箱控制”。画面中有:2台水泵、1个水罐、1个滑动输入器、2段水管和相关文字注释。下水泵排水、上水泵进水。水位可以人工调节,也可以在20-80之间自动调节。 三、工作过程 (一)理论学习,回答下列问题: 1、什么是用户窗口? 2、怎样产生动画效果?动画连接主要有哪几种?rdf 3、水管是用什么构件制作的?怎样使进、出水的流动方向相反? 4、脚本程序有什么用处?共有几种语句? (二)详细写出组态工作过程 1、创建自己的文件夹 打开F盘,鼠标右击,新建文件夹,将文件夹命名为自己的学号和姓名,如:41011150 XX。这样在F盘根目录下就建立了自己的文件夹——F:41011150 XX。 2、创建工程 3、创建用户窗口 4、编辑画面 5、工程运行 6、工程提交 四、工作结果 进入MCGS运行环境,立即最大化显示标题为“水箱控制”的工程画面,画面内容达到设计要求。可以看到水箱水位在自动变化。工程效果图如下:(参见程序文件)人工调节水位的模拟:„„ 五、总结与体会 围绕以下要点来谈谈完成本次任务的体会: 1、本次任务中自己做了什么?遇到哪些问题?如何解决的? 2、完成这次任务有什么收获? 任务三:用户权限的管理 一、工作任务 1、设置工程密码,保护工程不会被其他人打开使用或修改。 2、设置工程试用期,通过多级密码控制系统的运行或停止。 3、规定操作权限,提高工程安全性。 二、工作要求 1、正确回答相关的理论知识点。 2、建立名为“安全机制练习”的工程项目,保存到F盘以自己学号和姓名命名的文件夹中。 3、工程运行时,立即最大化显示工程画面,窗口标题为“安全机制练习”。画面中有:用户权限分配表,和相关文字注释。通过菜单操作,可根据不同用户权限在其他5个画面之间跳转。 三、工作过程 (一)理论学习,回答下列问题: 1、主控窗口的主要功能是什么? 2、权限设置的作用是什么? 3、怎样设置试用期? 4、怎样设置启动属性? (二)详细写出组态工作过程 1、创建自己的文件夹 2、创建工程 3、创建用户窗口 4、编辑画面 5、工程运行 6、工程提交 四、工作结果 进入MCGS运行环境,显示„„工程画面,画面内容达到设计要求。可以操作„„。工程效果图如下:(参见程序文件) 五、总结与体会 围绕以下要点来谈谈完成本次任务的体会: 1、本次任务中自己做了什么?遇到哪些问题?如何解决的? 2、完成这次任务有什么收获? 《软件开发技术基础》实验报告 《软件开发技术基础》实验报告 姓名: 学号: 班级: 《软件开发技术基础》实验报告 实验一 线性表的操作(2学时) 实验类型:验证性 实验要求:必修 实验学时: 2学时 一、实验目的: 参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。 二、实验要求: 1、掌握线性表顺序表类和链表类的特点。掌握线性表的常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 设计一个静态数组存储结构的顺序表类,要求编程实现如下任务: 1)建立一个线性表,首先依次输人整数数据元素(个数根据自己的需要键盘给定) 2)删除指定位置的数据元素(指定元素位置通过键盘输入)再依次显示删除后的线性表中的数据元素。 3)查找指定数据的数据元素(指定数据的大小通过键盘输入),若找到则显示位置,若没有找到就显示0。 四、要求 1)采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。 2)写出完整的程序并能调试通过即可 《软件开发技术基础》实验报告 { if(nn==mm) return(-1);if(nn==0) return(0);return(1);} template cout<<“overflow”< return;} if(i>nn) i=nn+1;if(i<1) i=1;for(k=nn;k>=i;k--) v[k]=v[k-1];v[i-1]=b;nn=nn+1;return;} template cout<<“underflow!”< return;} if((i<1)||(i>nn)){ cout<<“Not this element in the list!”< return;} for(k=i;k v[k-1]=v[k]; 《软件开发技术基础》实验报告 return 0;} 运行结果如下: 心得体会: 1.通过本次试验,我掌握了线性表的基本概念。 2.通过本次试验,我懂得了如何建立一个顺序表,并能对顺序表进行基本的建立、插入、检测、删除以及查找的操作。 3.本次试验我知道了线性表的顺序存储结构具有如下两个特点:(1)线性表中所有元素所占的存储空间是连续的。 (2)线性表中各元素在存储空间中是按逻辑顺序依次存放的。 实验二 栈、队列的操作 《软件开发技术基础》实验报告 #define stacksize 5 typedef struct { char taskname[10];int taskno; }DataType; class stack { private: public: }; //任务名 //任务号 int top;DataType task[stacksize];bool init();bool empty();bool push(DataType d);bool pop(DataType &d); bool stack::init(){ top=0;int i;for(i=0;i strcpy(task[i].taskname,“"); task[i].taskno=-1;} return true;} bool stack::empty(){ return top>0?false:true; } 《软件开发技术基础》实验报告 queue_node(int d){ data=d; next=NULL;} }; class queue { private: queue_node *front,*rear;public: bool init();bool empty();bool enqueue(int d);bool dequeue(int &d);}; bool queue::init(){ front=rear=new queue_node; return true;} bool queue::empty(){ if(front==rear)return true;else return false;} bool queue::enqueue(int d){ rear->next=new queue_node(d);rear=rear->next;return true;} 《软件开发技术基础》实验报告 bool sqqueue::enqueue(int d){ if((rear+1)%queuesize==front)return false;base[rear]=d;rear=(rear+1)%queuesize;return true;} bool sqqueue::dequeue(int &d){ if(front==rear)return false;d=base[front];front=(front+1)%queuesize;return true;} void main(){ DataType dd[5],tt; char tn[]=”任务a“;int i;for(i=0;i<5;i++){ strcpy(dd[i].taskname,tn);tn[4]++;dd[i].taskno=i+1;} stack mystack;mystack.init();for(i=0;i<5;i++){ mystack.push(dd[i]);} cout<<”入栈完成,按回车键继续……“;getchar(); 《软件开发技术基础》实验报告 实验结果: 实验三 查找算法实现(2学时) 实验类型:验证性 实验要求:必修 实验学时: 2学时 一、实验目的: 参照各种查找算法程序样例,验证给出的查找常见算法。 二、实验要求: 1、掌握各种查找算法的特点,测试并验证查找的常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.建立有序表,采用折半查找实现某一已知的关键字的查找。 2.利用折半查找算法在一个有序表中插入一个元素,并保持表的有序性。 源程序如下: #include int mm; int nn; T *v;public: sL_List(){mm=0;nn=0;return;} sL_List(int); int search_sL_List(T); int insert_sL_List(int,T); void prt_sL_List();}; template 《软件开发技术基础》实验报告 int i;for(i=0;i cout< int main(){ int k,t,q,result;int a[20]={10,20,30,40,50,60,70,80};sL_List s.insert_sL_List(k+1,a[k]);cout<<”输出有序对象s:“< 实验结果如下: 《软件开发技术基础》实验报告 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 输入一组关键字序列分别实现下列排序: 1.实现直接插入排序; 2.实现冒泡排序算法; 3.实现快速排序算法(取第一个记录或中间记录作为基准记录); 4.快速排序的非递归算法; 5.堆排序。 把上述几种排序的算法编写成菜单,根据输入的数字不同执行对应的排序算法。 源程序如下: #include t=p[j]; k=j-1; while((k>=0)&&(p[k]>t)) { p[k+1]=p[k]; k=k-1; } p[k+1]=t;} return;} //实现冒泡排序 template 《软件开发技术基础》实验报告 static int split(T p[],int n){ int i,j,k,l;T t;i=0;j=n-1;k=(i+j)/2;if((p[i]>=p[j])&&(p[j]>=p[k])) l=j;else if((p[i]>=p[k])&&(p[k]>=p[j])) l=k;else l=i;t=p[l];p[l]=p[i];while(i!=j){ while((i j=j-1; if(i { p[i]=p[j]; i=i+1; while((i i=i+1; if(i { p[j]=p[i]; j=j-1; } } } p[i]=t;return(i);} //实现堆排序 template sift(p,i,n-1);for(i=n-1;i>=1;i--) 《软件开发技术基础》实验报告 p[i]=100.0+200.0*p[i];cout<<”排列前的序列为:“< cout< cout< cout< cout< cout< 运行结果如下: 《软件开发技术基础》实验报告第二篇:机器人及控制技术教学大纲
第三篇:《工业机器人技术基础+++》教学大纲
第四篇:《工业组态控制技术》实验报告
第五篇:软件开发技术基础的实验报告