我“手工”制作了一个Arduino四足机器人,这意味着没有套件或3D打印机。它使用“长步”步态行走,看起来非常流畅和自然。虽然它并没有完全按照我想要的方式出现。然而,为了让我的机器人独一无二,我想在地板上创造一种掠过式的运动,类似于船夫水甲虫游泳的方式。在我所有的在线搜索中,我还没有遇到过被编程为以这种方式移动的四足机器人,所以这可能是第一个在线发布的此类机器人(?)。浏览动作是一种笨拙、生涩的移动方式,但非常有趣,而且比走路快得多。此外,它允许我编程一个“抓手模式”,前部让机器人能够拾取小的、重量轻的物体。在下面的第一个视频中,机器人先走,然后沿着地板掠过。在第二个视频中,机器人会走路,然后大约在视频播放到一半时它会抓住垃圾并在掠过之前将其处理掉。这不是一个初学者项目,所以我假设你有一些关于使用Arduino和上传草图等的知识.第1步:设计概述每条腿由三个部分组成,并带有伺服电机来移动每个部分。这三个马达被命名为:臀部、股骨和胫骨,并为每条腿编号。例如,在第1腿的电机编程中,它们被称为“hip1”、“fem1”和“tib1”。每个臀部马达的底部是一个½英寸的小脚轮,可以在撇脂运动中滚动。机器人使用两节9伏电池。一个为ArduinoNano供电,后者又为伺服电机驱动器和遥控接收器供电。另一个电池用于电机,它很轻但提供了足够的电压。我使用红外线(IR)遥控器来控制机器人。它们易于使用,可通过Internet上的预编程代码使用,并且具有许多按钮,可以轻松运行机器人的所有不同功能。第1步:获取零件伺服电机SG90(x12)–带伺服喇叭(随伺服电机提供:4个十字型,8个单杆型)和附带的螺钉纳米微控制器(x1)迷你170孔面包板(x1)脉波调制(PWM)伺服驱动器(x1)½”脚轮(x4)聚苯乙烯塑料板-3.2毫米厚聚苯乙烯塑料板(只需一块废料即可)聚苯乙烯“L”形塑料角钢(4.8mm)红外接收器模块和红外遥控器9VNiMh可充电电池(x2)和充电器9v电池(x2)的连接器M2螺丝10mm(x38)M2螺母(x60)M2螺丝6mm(x14)M3螺丝14mm(x2)M3螺母(x4)5毫米LED1000欧姆电阻跳线,公对母可选:橡胶乐高轮胎其他工具/用品:ArduinoIDEMiniUSB电缆Testors模型胶水尖嘴钳带2毫米钻头和更大钻头的电钻Twist手电钻-用于手持小钻头进行手钻M2螺丝的小螺丝刀砂纸烙铁和焊料主体由3.2毫米塑料聚苯乙烯制成。我是从多伦多的这家商店买的,但是你不能在他们的网站上搜索。较薄的片材(例如2毫米)可能足够硬,但重量不会太大。无论如何,聚苯乙烯很容易切割、钻孔和粘合在一起,所以我推荐它用于这个项目。模型胶将碎片熔化在一起,形成牢固的粘合。第2步:制作每个可容纳两个电机的髋部框架要制作臀部框架的模板,首先在纸上描绘出伺服电机底部的尺寸。这代表伺服器将滑入的孔(尽管最后您需要使孔比这大一点)。接下来绘制一个更大的矩形,使伺服孔周围至少有0.5厘米,但一侧应为1厘米。使用这个模板、一把尺子和一个正方形,在聚苯乙烯中标记框架的外边缘。然后用模板用你的刀尖通过模板按压所有角落的位置。重复直到有八个框架,外边缘标记为电机的内部矩形。如果做直线,切割聚苯乙烯非常容易。用一把尺子或方形尺子,用X-acto刀划几下,在聚苯乙烯上划出划痕。它不需要太深。您应该能够用手弯曲纸张,它会沿着刻痕线折断。它并不总是一种精确的塑料切割方式,但它既快速又简单。对于太小而无法用手握住的零件,请使用尖嘴钳夹住,但用纸盖住塑料,以免钳子留下痕迹。切割后,用刀或砂纸修整边缘,使切割过程留下的凹凸不平。因为伺服孔在塑料内,所以不能刻痕和折断。因此,对于每个伺服孔,使用尺子和刀在伺服孔内约2毫米处标出第二个较小的内部矩形。使用这个双矩形,外部矩形将大致是完成的伺服孔的尺寸,而较小的内部矩形为制作穿孔提供了有用的物理指南。这是通过使用带有2毫米钻头的钻头完成的,并在不损坏外部矩形的情况下沿着内部矩形打很多孔。然后按x-acto刀切割穿孔以获得一个粗糙的孔。用刀削掉矩形的内部,将其加宽,直到它大到足以让伺服器滑入而不会损坏电线。这个矩形需要更长一点,以防止在您稍后插入电机时损坏电线。(请注意,有些伺服器的电线从底部边缘而不是从外壳的侧面出来,这样更容易进入。)要将两个矩形以90度放在一起,请在每个矩形的外边缘切一个0.5厘米深的槽。它们足够宽(3.2毫米)可以将两个插槽互锁在一起。这最终会将八个部分变成四个臀部框架,但不要将它们粘合起来。确保插槽的深度不要太深,以免堵塞伺服孔。另外,请记住,每个臀部框架都是两个相邻电机的镜像:腿1和4的股骨电机齿轮面向前方,而两个后股骨伺服机构,腿2和3的齿轮面向落后。换句话说,腿1和2分别是腿4和3的镜像。当所有的槽都完成后,用刀在角上划痕,然后用尖嘴钳夹住角,然后将它们一个一个地折断,将矩形做成六边形。用刀和锉刀清理边缘。现在将六边形粘合起来形成4个臀部框架,仔细检查方向,以便有两对彼此镜像。为了加强髋部框架的接合处,切下“L”形角塑料片并将它们沿着接合处粘上。胶水干燥后,将电机滑动到位,而不会损坏电线。如果需要,将伺服器的孔变大。然后使用2毫米钻头和手持钻头支架标记孔的位置。对髋部框架中的所有8个电机重复上述操作,然后用2毫米钻头和电钻钻出这些孔。第3步:准备伺服喇叭——钻2毫米孔舵机通常带有许多不同形状的舵机喇叭。使用十字形喇叭将臀部电机连接到主体上。十字形舵机喇叭的两个较长的臂长不一样。使用最长手臂上的倒数第二个孔,以及另一只手臂上的倒数第三个孔。您应该只需要两颗螺钉即可将十字形喇叭连接到主体上。喇叭上的孔对于M2螺钉来说太小了,因此用手用2毫米钻头将它们加宽。对于每个股骨和胫骨伺服系统,使用单臂喇叭(总共八个)。这些喇叭末端的宽度也可能太窄而无法固定M2螺钉,因此请使用倒数第二个孔。第4步:制作胫骨件在其他项目中,胫骨块的形状有很多变化。这个机器人的顶部宽2厘米,长7厘米。在胫骨的顶部为伺服切割矩形孔,在两侧和顶端留下0.5厘米的聚苯乙烯。使用尺子、刀子和钳子,在胫骨件的锥形底端进行刻划和切割,并去除两个顶角。第5步:制作股骨碎片股骨与胫骨的宽度相同(2厘米x7厘米)。用铅笔沿着股骨中心画一条纵向线。这将用于对齐伺服喇叭并标记将喇叭固定到股骨块的螺钉的位置。为此,请在股骨片上标出tib和fem电机的齿轮中心所在的位置,距每端约1厘米。用小钻头打一个孔,然后用更大的钻头逐渐加宽这些孔,直到可以插入喇叭的圆形部分。重复使每个股骨块都有两个孔。然后一个一个地将喇叭对齐到位,并用2毫米钻头穿过喇叭标记在聚苯乙烯塑料上钻孔的位置。取下喇叭并钻出2毫米的孔。稍后,当需要安装时,一个M2螺丝会穿过每个喇叭。第6步:制作主体主体是一块3.2毫米的聚苯乙烯,尺寸为9厘米x12厘米。身体前后比宽。要标记并钻出用于安装髋关节电机的孔,请将髋关节电机放入髋部框架和不带螺钉的十字形伺服系统中。髋部电机放置在臀部框架中,使前部电机的齿轮不在主体前部,后部髋部电机的齿轮不在后面。两个前股骨马达朝前,两个后股骨马达朝后。此外,确保伺服喇叭的方向一致——前电机(1和4)的最长臂指向后,后电机(2和3)指向前。确保这三个对齐点后,将臀部框架的边缘与主体的边缘对齐。例如,固定电机hip1的框架的前左侧与主体的左前角对齐。(臀部框架的前部和左侧与主体的前部和左侧)。将伺服喇叭放在正确的方向上,将其牢固地靠在主体上,然后卸下伺服和臀部部件,使喇叭靠在机器人主体的下侧就位。标记M2安装螺钉所在的两个扩大孔的位置。更换喇叭并三重检查1)定位喇叭到电机,2)臀部框架的方向,3)臀部与主体边缘对齐,以及4)钻孔前的孔位置用2毫米钻头钻孔。在顶面上,您可以使用更大的钻头小心地加宽开口,以便能够埋头钻螺钉。第7步:组装腿将所有舵机居中至90度。您可以在ArduinoIDE的伺服示例草图中修改扫描草图。现在是有趣的部分!使用四个M2螺钉和螺母将两个电机连接到臀部框架。记住臀部框架中臀部马达的方向,并将fem马达的方向与齿轮靠近底部。然后使用伺服随附的安装螺钉将十字形伺服喇叭连接到臀部电机。这是通过喇叭的顶部中心拧入电机的齿轮。然后将臀部电机安装到主体上,将臀部框架的边缘与主体边缘对齐,并用尖嘴钳夹住M2螺母,同时从主体顶部拧紧M2螺钉。股骨片应垂直安装,平行于主体。将短的单杠杆角压入股骨块,并用M2螺钉和螺母连接。我为tib电机的喇叭使用了6毫米M2螺钉,因为蓝色电机在喇叭下方的间隙较小,并且固定喇叭的10毫米螺钉的末端会接触到伺服的外壳。然后将胫骨电机安装到胫骨件上,使齿轮更靠近顶部。现在股骨上的角可以安装在股骨和胫骨电机上,这应该完成腿!当机器人掠过时,在每条腿的末端放置一个小的橡胶乐高轮胎将有助于牵引。第8步:接线组件将Nano插入面包板。我将跳线的公针连接到9V电池连接器的引线末端。这样,来自9V电池的红色引线和黑色引线分别连接到Nano的“Vin”和“GND”引脚。PWM电机驱动器的连接方式如图表和Fritzing接线图所示。所有跳线的连接如下:GND.......................GNDSCL............................A5SDA......................A4VCC..........................5V电机连接到PWM/伺服驱动器,确保来自伺服系统的3根电线正确定向到电机驱动器上的每排3个引脚。驱动器上伺服器的引脚标有5V、接地(GND)和数据线。舵机的线一般为红色为5V,黑色或棕色为地线,橙色为数据线。在这个方向上,电机连接到PWM/伺服驱动器,如下所示:hip1.....................0fem1.........................1tib1.....................2hip2..........4hip3....................8fem3.........................9tib3......................10hip4.....................12fem4........................13tib4...................................14注:3、7和11未使用。第二块9V电池通过连接线连接到PWM电机驱动器的螺丝端子,红色引线接正极,黑色引线接负极。红外传感器通过跳线通过面包板连接到Nano,如下所示:Vcc....................5VGND..............GND数据.......D12发光二极管(LED)用于指示机器人何时等待另一个命令。因为步行动作需要一些时间。这很有帮助,因为如果您过早按下遥控器,机器人将错过命令。如果您连续多次按下,遥控器会发出机器人未编程的“重复”命令。LED连接到面包板,LED的阳极(长引线)连接到Nano的引脚D13。1kOhm电阻器将阴极连接到Nano的地(GND)。第9步:将组件连接到主体将带有Nano、PWM伺服驱动器、IR接收器和两块电池的面包板放在主体的顶部中央,以确保东西居中并有足够的空间。带有Nano的面包板位于机器人后部的中央。放置Nano时,请注意,如果您需要修改编程,则需要将miniUSB电缆插入Nano,同时腿仍然可以移动。一旦您对位置感到满意,您就必须能够安装面包板。面包板底部有一个双面胶垫,但如果你以后想移动它,你可以用螺丝代替。面包板有两个螺丝孔,但10毫米M2螺丝不够长,无法穿过面包板和3.2毫米聚苯乙烯。因此,在面包板就位后,使用2毫米的小钻头标记孔的位置。这意味着切割双面胶带并切入机器人的主体。取下面包板并完成两个2mm孔的钻孔。然后从机身底部取出10毫米M2螺丝,并在顶部用螺母固定。两个螺丝的轴从主体上伸出。将面包板放在这些螺丝上,以防止面包板四处滑动,但可以轻松地将面包板抬离原位。PWM伺服驱动器集中在机器人的前部。标记钻孔的位置。伺服驱动器用两个M3螺钉和螺母固定到位。对于每个螺钉,您可以在主体和伺服驱动器之间放一个螺母,以留出一点空间。用胶水粘上四段“L”形聚苯乙烯,将电池固定到位,以免它们四处滑动。红外接收器放置在左后方,靠近第二条腿,并用两个6毫米M2螺钉固定到位。请记住,红外接收器必须对遥控器“可见”,因此任何东西都不能阻挡接收器的视线。两个M2螺母可用作垫片,两个螺母可用作固定IR接收器。第10步:将脚轮连接到臀部伺服器的底部为了连接1/2英寸脚轮,我们构建了一个盒子以适合每个髋部伺服器的底部。盒子的底部是一块3.2mm的聚苯乙烯,大小与臀部舵机底部一样大。盒子的三(3)个侧面是“L”形角塑料片。这些位于3.2毫米的部件上,水平边的角以45度角切割,以形成盒子的紧角。(在图片中,您可以看到我在将它们粘在一起之前将要粘合的表面粗糙化,但这不是必需的,因为胶水会将表面熔化在一起。)此时,将脚轮放在盒子底部的中心并标记通过底部钻孔进入盒子的内部。在盒子中使用更大的钻头,以便能够埋头钻M2螺钉的头部。埋头孔将使伺服器尽可能深地放置在盒子中。盒子的第四面是一块较薄的聚苯乙烯,从盒子的侧面伸出约0.5厘米,制成一个标签。它比其他三个边高,因为这个凸片用于将螺钉安装到臀部框架的垂直部分。将一小块3.2毫米聚苯乙烯放在此标签上以紧密贴合。切割并粘合四小块“L”形角塑料以加固盒子。然后使用两个6毫米M2螺钉从盒子内部穿过舵机的安装孔。使用M2螺母和尖嘴钳将脚轮连接到盒子上。最后将盒子滑过伺服器的底部。第11步:代码有很多关于如何将代码上传到Arduino(ArduinoIDE、YouTube、带有Arduino套件等)的教程,所以我不会解释。但是,我将解释代码的一些亮点。代码远非完美,而且很长,所以我不会全部介绍。其中大部分基于Adafruit的PWM/Servo驱动程序示例草图(链接)和DronebotWorkshop的IR远程控制教程(链接)。该代码依赖于三个库作为后台编程。这些是:远程文件Wire.hAdafruit_PWMServoDriver.hPWMServoDriver可以从上面的Adafruit链接下载。顾名思义,它控制控制伺服电机的伺服驱动器。Wire库是ArduinoIDE软件附带的标准库。IRremote库可以在ArduinoIDE的库管理器中找到。代码中的变量之一是在代码顶部附近声明的“togglePosture”。这会跟踪机器人的模式:行走、浏览或抓取。当机器人即将移动时,Nano会检查togglePosture的值以确定当前的模式。如有必要,它将运行适当的函数来改变姿势,然后将togglePosture变量更新为新模式(skimming=0,或standing=1,或grip/skimming=2,或这些都没有=3)。例如,这允许用户在机器人站立时激活“skimForward”功能。由于机器人不处于浏览模式,togglePosture不等于0。因此,机器人将调用“skimPosture”函数,使机器人下降到脚轮,然后togglePosture变量的值将是更新为等于0,由于电机的方向,有些电机顺时针转动以向上弯曲或前进,而另一些则逆时针转动以进行相同的运动。因此,例如,对于tib1和tib3,值100是完全弯曲的。但是,对于tib2和tib4,600的值是完全弯曲的。对于步行,前后运动意味着平滑的协调运动,一次移动多个关节。它需要一系列动作,机器人移动其重量以将重心保持在三条腿下方,同时抬起并缓慢移动第四条腿。为了做到这一点,向前和向后行走函数在代码中被分成几个“for”循环(类似于伺服库的“扫描”示例代码的编程,如果你已经使用过它的话)。例如,向前行走的第一个动作之一是将重心转移到第4腿。这有以下代码:for(tib2=400;tib2if(fem2if(hip3if(tib4>300)tib4=tib4-1;if(hip1>350)hip1=hip1-1;}pwm.setPWM(0,0,hip1);pwm.setPWM(5,0,fem2);pwm.setPWM(8,0,hip3);pwm.setPWM(14,0,tib4);pwm.setPWM(6,0,tib2);delay(delayTime);}解释这一行:变量tib2对应第二条腿上胫骨电机的位置,从400开始。这一行还规定只要tib2的值低于500,Nano就会循环遍历11个代码行一遍又一遍,但每次都会将tib2值增加+1。接下来的几行代码是几个“if”语句,其中随着tib2的增加,fem1和hip3也会在每次循环中将位置值增加1,而tib4和hip1每次都会减少1。带有“pwm.setPWM”的行是指示PWM伺服驱动器将电机推进到由“for”和“if”语句指示的新位置的函数。因为每个电机位置只变化1,所以运动只是很小的运动。通过一次增加这些变量一个值,腿将缓慢而平稳地移动。此外,由于tib2、fem1、hip3、tib4和hip1都受到影响,这五个电机将同时运动,就像机器人同时协调多个关节一样。delay(delayTime)行导致Nano在此代码的每个循环之前暂停。变量“delayTime”是在整个代码的最开始定义的,就像togglePosture变量一样。但是,此变量以毫秒为单位表示暂停的持续时间。因此,它控制Nano一遍又一遍地执行这部分代码的速度。暂停时间必须足够短,以免电机在每次增量运动之间停止,否则它会像模拟手表上的秒针一样移动。通过在代码段的每个循环之间使用这个暂停,行走会故意变慢和平滑。当tib2达到500时,“for”循环将结束,Nano将转到下一段代码(此处未显示),这将使用不同的电机协调一组不同的运动。与步行相比,撇去和抓握动作的代码要快得多,因此动作不会像步行那样在“for”循环中增加。例如,在“skimForward”函数的开头附近是这段代码的摘录:fem2=330,fem3=390;//股骨向上pwm.setPWM(5,0,fem2);pwm.setPWM(9,0,fem3);if(togglePosture==0){fem1=375;pwm.setPWM(1,0,fem1);fem4=300;pwm.setPWM(13,0,fem4);}延迟(10);在这段代码中,fem2和fem3的值都改变了,这样两条腿就会抬起。两条pwm.setPWM线对电机执行这两个运动,没有增加运动,只有一个命令,所以它会突然而快速。这段代码中的“if”语句是为了检查机器人是否处于“skim”模式,在这种情况下,接下来的两行(大括号{}之间)将被执行,这也会带来前腿,腿1和4,也起来。如果togglePosture变量不为零,则机器人将处于抓手模式,因此两条前腿不用于移动,因此此处不会移动腿1和4。delay(10)函数将机器人延迟10毫秒,让电机有足够的时间到达新位置。voidloop(){if(irrecv.decode(&results)){if(results.value!=0xFFFFFF){//0xFFFFFFisthe"repeat"commandfromtheremote,sotherobotwillignoreitdigitalWrite(LED_PIN,LOW);//turnoffstandbyLEDval=results.value;irrecv.resume();switch(val){//Whichfunctionstocallwhenbuttonispressed,buttonsweredefinedbeforethesetupcaseP:Pause();break;caseFr:forward();break;caseB:back();break;caseL:left();break;caseR:right();break;caseSt:stand();break;caseLu:legsUp();break;caseLd:legsDown();break;caselt:legsTogether();break;caseEq:gripPosture();break;caseLa:legsApart();break;caseSf:skimForward();break;caseSb:skimBack();break;caseSr:skimRight();break;caseSl:skimLeft();break;caseS:skimPosture();break;default:break;}}}digitalWrite(LED_PIN,HIGH);//turnonthestandbyLEDjustincase}如果红外传感器接收到来自遥控器的红外信号,这条线路将调用Nano解码来自遥控器的红外信号。在“val=results.value”行中,IR信号的值记录在名为“val”的变量中。然后在switch函数中使用这个变量,该函数将“val”与不同的情况进行比较,每个情况都对应于一个移动函数。Nano将运行该移动函数,然后在代码中返回到循环部分的开头以解码下一个IR信号。您可以在此处下载当前版本的代码:Robot_WalkSkimGrip_July2021.ino第12步:使用红外遥控器控制机器人实际遥控器可以在这个教学的第一张图片中看到。遥控器的按钮将使Nano分别运行代码中的单个功能(请参阅遥控器和功能图)。按钮和函数名称(带引号)如下:ON/Off=“Pause”这会导致机器人下降到脚轮并收回所有4条腿。用于卸载电机,从而卸载电池Vol+=“forward”如果还没有这样做,机器人将站立并向前走。这是腿部的一系列平滑运动。RevPlay=“stand”如果还没有这样做,机器人将站立FastForward>>=“right”如果机器人还没有站立,则机器人将站立并向右转。这是腿的快速洗牌Vol-=“back”如果机器人不这样做,机器人会站起来,然后向后走。这是腿部的一系列平滑运动。Arrowup=“GripUp”当机器人处于抓手模式时,机器人会抬高前腿的水平Arrowdown=“GripDown”当机器人处于抓手模式时,机器人会降低前腿的水平0=“gripTogether”当机器人处于抓手模式时,机器人会将前腿拉近EQ=“GripPosture”机器人将采取抓手模式的姿势。前腿收起,后腿向两侧伸出ST/REPT=“GripTogether”因为当机器人处于抓手模式时,机器人会将腿拉得更远2=“skimForward”机器人将向前撇去,用腿向外推。这是一个快速推动,可以在略读模式或抓手模式下完成4=“skimLeft”机器人将向左撇去,双腿向外。这是一个快速推动,可以在略读模式或抓手模式下完成5=“skim”机器人将采取撇渣器模式姿势(如果尚未这样做)。所有四条腿都将伸向两侧6=“skimRight”机器人将向右撇去,双腿向外。这是一个快速推动,可以在略读模式或抓手模式下完成8=“skimBack”机器人将向后掠过,将自己的腿向外推。这是一个快速推动,可以在略读模式或抓手模式下完成以上就是项目的全部内容了,希望您能够喜欢!