机器人制作

上传人:夏** 文档编号:500808398 上传时间:2023-09-13 格式:DOCX 页数:25 大小:655.82KB
返回 下载 相关 举报
机器人制作_第1页
第1页 / 共25页
机器人制作_第2页
第2页 / 共25页
机器人制作_第3页
第3页 / 共25页
机器人制作_第4页
第4页 / 共25页
机器人制作_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《机器人制作》由会员分享,可在线阅读,更多相关《机器人制作(25页珍藏版)》请在金锄头文库上搜索。

1、实验机器人制作过程(图文)从对机器人感兴趣开始,买了一堆书,也看了很多资料,决定先从最简单的车轮机器人开始做。普通电脑虽然强大,但是不能直接采集外界环境的物理数据,也不能直接控制电机。查找了下,虽然可以直接在电脑上接 USB 接口的数据采集器用于采集传感器的数据,也可以使用 PCI 的电机控制卡来驱动各种电机,不过成本有些高,暂时不考虑了。找了一圈,发现还是单片机方案廉价,顺便可以学习下单片机控制和作一些电路实验。于是最终决定实验方案采用单片机来做了。 下面是采购的零件: 8 位单片机 Atmegga168 开发板。 电路面包板和连连线用于驱动动车轮的两个个减速电机。没没有找到合适适的齿轮,自

2、自己也没有加加工设备,图图简单,所以以直接用集成成减速齿轮的的电机代替了了。距离传感感器,作为机机器人的主要要传感器,用用来探测障碍碍物的距离。使使用的是常用用的红外距离离传感器作为为机器人的眼眼睛。舵机,用用来控制机器器人“眼睛”的的方向。一堆堆零件:下一一步就可以验验证简单的功功能了 实验 接下来先搞清楚楚怎么用单片片机。 Hello wworld 先让单片机跑起起来再说。习习惯了操作系系统下编程,第第一次用单片片机还真有些些不习惯,担担心遇到问题题,不过比较较顺利。这个个程序用来点点亮单片机上上的一个 LLED 。代码: int leddPin = 13; / LEED connnect

3、eed to digittal piin 13 void setupp() pinMoode(leedPin, OUTPPUT); / seets thhe diggital pin aas outtput void looop() digittalWriite(leedPin, HIGHH); / setss the LED oon dellay(10000); / waaits ffor a seconnd diggitalWWrite(ledPiin, LOOW); / setts thee LED off ddelay(1000); / waitss for a seccond 以间隔

4、 10000ms 的的时间把单片片机的第 113 个 PPin 脚循循环输出高低低电平,从而而达到点亮和和熄灭 LEED 功能。很很简单,就是是验证下单片片机是否可用用。 控制舵机舵机就就是遥控模型型上用来控制制的,其实就就是一个带闭闭环控制的电电机,能转动动到指定的角角度。工作原理是:控控制信号由接接收机的通道道进入信号调调制芯片,获获得直流偏置置电压。它内内部有一个基基准电路,产产生周期为 20ms ,宽度为 1.5mss 的基准信信号,将获 得的直流偏偏置电压与电电位器的电压压比较,获得得电压差输出出。 最后,电压差的的正负输出到到电机驱动芯芯片决定电机机的正反转。当当电机转速一一定时,

5、通过过级联减速齿齿轮带动 电电位器旋转,使使得电压差为为 0 ,电电机停止转动动。 在程序中控制舵舵机的转动角角度,就是生生成不同脉宽宽的 PWMM 就行了。 上面的代码简单单的生成一个个 PWM 驱动舵机旋旋转,比较简简单。 代码码中用 deelay 来来实现延时,如如果是同时控控制多个舵机机,用这样的的代码是不行行的,需要自自己计算时间间。因为用 delayy 整个单片片机都“休息息”了,无法法执行任何代代码。在实际际实现中,还还需要不断的的读取传感器器输入和进行行其他处理。红外距离传感器器 传感器介绍: SHARP 红红外距离传感感器,用于模模型或机器人人制作,可以以用来测量距距离。每个

6、模模块赠送一根根 15cmm 长 PHH2.0 的的单头排线 . 技术规格: 探测距离: 110-80ccm 工作电压: 44-5.5VV 标准电流消耗: 33-550 mA 输出量:模拟量量输出,输出出电压和探测测距离成比例例 接好电源,把模模拟信号输出出端接在单片片机的模拟输输入 Pinn 就行了。 测试代码: int pottPin = 2; int leddPin = 13; int vall = 0; void seetup() pinModee(ledPPin, OOUTPUTT); void looop() val = aanaloggRead(potPiin); digital

7、lWritee(ledPPin, HHIGH); delay(vval); digitallWritee(ledPPin, LLOW); delay(vval); 运行结果, lled 随着着传感器距离离的变化闪烁烁间隔也随着着变化。控制制电机 常用的直流电机机使用 L2293D 来来控制,使用用 H2933 的电路如如下: 不过在验证是发发现,对于小小电机,直接接用单片机的的 PWM 端子来输出出不同电压的的来控制速度度也是可行的的,虽然不太太精确,但是是对于实现运运动特征是足足够了。单片片机无法输出出真正的线性性模拟电压, PWM 是是通过调整空空占比间隔来来模拟不同电电压值的。测量了电机

8、在空空载和负载情情况下电流都都只有几十毫毫安,所以先先采取这种简简单的办法验验证。 直接把电机接到到单片机的 Gnd 和和 PWM Pin 99 接口,然然后在程序中中直接向 PPin 9 输出就可以以让电机运转转了。 int vallue = 0; innt leddpin = 9; vvoid ssetup() / notthing for ssetup voiid looop() for(valuee = 0 ; vallue =00; vallue-=55) aanaloggWritee(ledppin, vvalue); dellay(300); 上面的程序用不不同的输出值值驱动电机

9、,可可以看到电机机的旋转效果果。 单片机和主要部部件的验证基基本就完成了了,下一步要要开始程序设设计了。 软件设计 思路路 在进行代代码编写之前前,想找到一一种简介的实实现低级智能能机器人的方方式。目前的的工业机器人人采用的是精精确控制的方方法,在程序序中固化每种种处理逻辑。用用程序员的思思维来完成对对机器人的操操作。对于程程序员来说,机机器人无非就就是外接了物物理传感输入入和运动控制制输出的一台台电脑,不管管是64位多多核CPU或或者8位单片片机,只是性性能的不同而而已。理论上上,都能通过过程序设计来来达到预定的的目标。如果果按照计算机机上的普通程程序来设计,那那么大量的功功能代码会相相互耦

10、合,每每次为了增加加一个新的运运动功能或者者任务,都需需要编制新的的代码,而新新的代码给原原来的环路反反馈系统带来来新的逻辑分分支,所有的的步骤都得经经过程序员的的验证和设计计。这样的设设计对于精确确计算的PCC程序或者擅擅长固定场景景精确动作的的工业机器人人来说,都没没有问题。但但是对于这里里要实现的“小小强一号”机机器人,是处处在一个动态态的变化环境境当中,如果果按照传统的的软件设计逻逻辑,会存在在大量耦合的的逻辑分支,导导致程序扩展展性很差。举举例来说,为为了完成一个个沿墙壁行走走的功能,必必须对各种传传感器输入情情况进行判断断,然后做出出预置的动作作序列。如果果要执行的动动作和需要判判

11、断的情况很很多,那么程程序逻辑分支支就比较复杂杂,扩展性也也比较差,有有没有更好的的适合机器人人软件设计的的方法呢?换换一种思维来来思考的话,我我们要做的不不是电脑程序序,只是一个个实验机器人人。这个实验验机器人能做做到自然界昆昆虫级的“智智能”就很不不错了。 试试想,一只蚂蚂蚁,一只蟑蟑螂会去思考考这么复杂的的逻辑分支吗吗?去考虑各各种情况下应应该采取的动动作? 不太太可能。我们们用了复杂的的想法去解决决简单的事情情。机器人和和计算机的主主要区别在于于,计算机是是按照预先规规划的指令运运行,而机器器人需要根据据变化的环境境选择合适动动作。我们首首先可以简化化动作模型,我我把机器人的的执行任务

12、分分成3个层次次:任务-行行为-动作作任务机机器人完成的的一个期望目目标,比如“在在一个范围内内收集地面上上的垃圾”可可以界定为一一个机器人的的任务。行为为行为是是对任务的分分解,行为是是机器人根据据环境变化选选择要做什么么。比如碰到到墙壁需要进进行躲避。电电源不足需要要充电,就可可以划分为一一个行为。动动作机器器人最终控制制电机等输出出设备做出的的动作,比如如前进,后退退,转弯。转转动摄像头都都可以划分成成一个动作单单元。说明:任务由一系系列的行为构构成;行为有有一个或者多多个动作组成成,动作是立立即执行的最最小单元。在在任意一个时时刻,只有一一个动作可以以得到执行。软件实现的对象就是分解出

13、简单的行为,针对每个行为单独实现,互相之间无干涉、无耦合。当多个行为要输出互相矛盾的动作时,通过一个行为优先级表来决定优先级高的行为来做出动作。在这个思路中,参考了基于行为编程的理论,关于详细的基于行为编程的描述,可以在网上搜索“Behavior-based robotics”。通过这种设计思路,可以实现对动物反射特性的模拟,不需要把精力放在复杂的逻辑处理上,只需要根据分解出的基本行为实现一个一个小的行为单元。每个行为单元只关心自己的传感输入和需要输出的控制动作就行了。确定了设计思路,下一部分开始针对小强一号来设计软件了。参考资料,有兴趣的可以阅读: 如果需需要增加其他他更加复杂的的智能,那么

14、么只需要增加加对应的行为为单元就行了了,不用修改改已有的逻辑辑结构。每个个行为单元只只需要处理自自己关心的传传感器和需要要控制的动作作执行部分。这这种方式的好好处就是程序序逻辑变得非非常简单,功功能单元之间间不会存在互互相影响的弊弊端。下面的代码是是“巡航”行为:class BBhCruiis:pubblic BBehaviior public: public: BhCCruis(constt charr* namme):Beehavioor(namme) ; BhCruiis(); void RRun(); void SSetup(); ; void BhhCruiss:Settup() void BhhCruiss:Runn() intt bid = GettId(); GO_speedd_lefttbid = 2555; GO_speedd_righhtbidd = 2255; GT_beh_aactionnACTIION_TYYPE_MOOTORbid = truue; 上面的的代码很简单单,就是让两两个电机以同同样的速度晕晕装,其他都都不用考虑。对对于某些行为为,需要引入入稍微复杂一一些的处理,比比如发现障碍碍物,首先要要停下来,然然后判断是应应该往左还是是往右,做出出决定之后,再再进行具体的的动作。针对对这种不能在在

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号