完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在看到爬树机器人蛇和机器人鳗鱼的研究视频后,我受到启发,开始了这个项目。这是我第一次尝试使用蛇形运动来构建机器人,但这不会是我的最后一次!如果您希望看到未来的发展,请在YouTube上订阅。下面我概述了2种不同的蛇以及3D打印文件的构造以及关于实现蛇状运动的代码和算法的讨论。如果你想继续学习更多,阅读完这篇指导后,我会建议阅读页面底部参考部分的链接。这个指令在技术上是一个2合1,因为我解释了如何制作2个不同版本的机器人蛇。如果你只是建立一个蛇的兴趣而忽略其他蛇的指示。这两个不同的蛇将从这里引用,可互换使用以下短语:
步骤1:组件这是一个蛇的零件清单,如果你想制作两个蛇,你需要将组件的数量增加一倍。
***这根导线可以有10安培的电流穿过,太细,电流会融化。 第2步:3D打印组件 如果你正在让一维蛇打印这些碎片。如果你正在用2D蛇打印这些碎片。重要提示:规模可能是错误的!我在Fusion 360中设计我的组件(单位为mm),将设计作为.stl文件导出到MakerBot软件中,然后打印到Qidi Tech打印机(MakerBot Replicator 2X的克隆版本)上。在这个工作流程的某个地方有一个错误,我的所有照片都显得太小了。我一直无法确定错误的位置,但是暂时修复了MakerBot软件中每个打印尺寸达到106%的问题,这解决了问题。鉴于此,请注意,如果您打印上面的文件,它们可能会错误地缩放。我建议只打印一张,然后在打印完所有内容之前检查它是否适合MG996R伺服。如果您打印任何文件,请让我知道结果如何:如果打印太小,太大,太多,多少百分比。通过作为一个社区共同工作,我们可以使用不同的3D打印机和.stl切片机来排查错误的位置。一旦问题解决,我会更新本节和上面的链接。 步骤3:蛇的组装 6更多图片 蛇的两个版本的装配过程基本相同。唯一的区别是在2D蛇中,每个电机相对于前一个旋转90度,而在一维蛇中,所有电机都在一个轴上对齐。首先拧松伺服器,保存螺丝并取下黑色塑料框架的顶部和底部部件,并注意不要丢失任何齿轮!将伺服滑入3D打印框架,如上图所示。更换伺服机箱的顶部,并用四个6-32 1/2“螺钉将其固定到位。保存伺服机架的底部(以防在以后的项目中再次使用),并将其更换为3D打印的情况下,唯一的区别是滚珠轴承滑动的额外旋钮。将伺服器重新拧回,重复10次。重要提示:在继续之前,您必须将代码上传到Arduino,并将每个伺服器移动到90度。不这样做可能会导致您打破一个或多个伺服和/或3D打印框架。如果您不确定如何将舵机移动到90度,请参阅此页面。基本上将伺服器的红线连接到Arduino上的5V,棕线连接到GND,黄线连接到数字引脚9,然后在链接上上传代码。现在每个伺服器都处于90度,继续:将一个伺服盒的3D打印旋钮插入第二个扇形片的孔中,然后稍微用力将伺服器的轴推入其孔中(请参阅上面的图片和视频以获得更清晰的内容),从而连接10段。如果你正在制作一维蛇,所有的分段应该对齐,如果你正在制作二维蛇,每个分段应该旋转90度到前一个分段。请注意,尾部和头部框架只有其他部分长度的一半,连接它们,但不要评论金字塔形状的部分,直到完成布线。安装X形伺服臂并将其拧入到位。将滚珠轴承滑过3D打印的旋钮,这需要将两个半圆柱轻轻地挤压在一起。根据你使用什么品牌的灯丝和填充密度,帖子可能太脆弱并且很快,我不认为这会是这种情况,但是不要用过度的力量。我个人使用了含10%填充物的PLA长丝。滚珠轴承一旦打开,它应该保持由旋钮上的突出部分锁定。 第4步:电路 2更多图片 这两条机器人蛇的电路是相同的。在布线过程中,确保每个段都有足够的接线空间来完全旋转,特别是在2D蛇中。以上是仅有2个伺服电路的电路图。我试着用10个舵机做一个电路图,但它太拥挤了。这张照片和现实生活之间的唯一区别是,您需要并行连接8个伺服器,并将PWM信号线连接到Arduino Nano上的引脚。在连接电源线时,我使用一根18号线(厚度足以承受10amps)作为沿着蛇长度的主5V线。使用剥线钳,我以10个规则的间隔取下一小段绝缘子,并从这些间隔的每一个焊接一小段电线,一组3个公头插脚。重复第二次使用黑色18号规GND地线和第二个阳头插针。最后再将一根较长的导线焊接到第三个插头引脚上,这个引脚会将脉冲宽度调制信号从蛇头上的Arduino Nano传送到伺服器(导线必须足够长才能到达,即使这些段弯曲)。根据需要安装热缩管。将3个公头插头连接到伺服电线的3个母头插头。每10个伺服重复10次。最终达到的目标是将舵机并联并将PWM信号线连接到Nano。男性/女性标头插针的原因是,您可以轻松拆开各个部分,并在未拆封所有部件的情况下更换舵机。使用电容器和螺丝端子将GND和5V导线焊接到尾部的3x7孔板上。电容器的目的是消除启动舵机时产生的任何电流消耗尖峰,这可能会重置Arduino Nano(如果没有电容器,您可能在没有电容器的情况下离开,但最好安全) 。请记住,电解电容器的长串需要连接到5V线路,短路线连接到GND线路。将GND导线焊接到Nano的GND引脚,将5V导线焊接到5V引脚。请注意,如果您使用不同的电压(请参阅下一节),请使用7.4V的锂电池,然后将红线连接到Vin引脚而不是5V引脚,否则会损坏引脚。将10个PWM信号线焊接到Arduino Nano上的引脚。我按照以下顺序连接矿井,可以选择以不同方式连接您的设备,但请记住,您需要更改代码中的servo.attach()行。如果你不确定我在说什么,就像我一样进行连接,你不会有问题。从蛇的尾部到蛇头的伺服顺序,我按以下顺序连接了两条蛇。将信号引脚连接到:A0,A1,A2,A3,A4,A5,D4,D3,D8,D7。使用拉链清理布线。在继续检查之前,检查所有段可以移动,并有足够的空间让电线移动而不会被拉开。现在接线完成后,我们可以拧上头部和尾部的金字塔形帽。请注意,尾部有一个用于系绳脱出的孔,并且头部有一个用于Arduino编程电缆的孔。 第5步:为Snake供电 由于舵机并联,他们都获得相同的电压,但电流必须加起来。查看MG996r舵机的数据表,他们可以在运行时画出高达900mA的电流(假设没有拖延)。因此,如果所有10个舵机同时移动,总电流消耗为0.9A * 10 = 9A。由于这种普通的5v,2A墙上插座适配器不起作用。我决定修改一个ATX电源,能够在20A时保持5v。我不打算解释如何做到这一点,因为已经在Instructables和YouTube上讨论过很多。在线快速搜索将向您展示如何修改其中一个电源。假设你已经修改了电源,只是在电源和蛇的螺丝端子之间连接了一个较长的绳索。另一种选择是使用板载锂电池组。我没有试过这个,所以它会由你来设计一个电池安装架并将它们接入。请记住工作电压,伺服电流和Arduino的电流消耗(不要焊接除5V以外的其他任何东西Arduino上的5v引脚,如果电压更高,则转到Vin引脚)。 第6步:测试一切正在工作在继续之前,让我们测试一切正在工作。上传此代码。你的蛇应该在0-180之间单独移动每个伺服器,然后直线放置完成。如果没有错误,则很可能导线不正确,或者舵机最初不是以“蛇的装配”一节中提到的90度为中心。 第7步:代码目前没有蛇的遥控器,所有的动作都是预编程的,你可以选择你想要的。我将在第2版中开发一个遥控器,但如果您想远程控制它,我会建议查看Instructables上的其他教程,并使蛇适应蓝牙兼容。如果你让一维蛇上传这段代码。如果你正在使2D蛇上传这段代码。我鼓励你玩弄代码,进行自己的修改,并创建新的算法。阅读下面几节,了解每种运动类型的详细解释以及它的代码是如何工作的。 步骤8:秤与Vs轮 3更多图片 蛇能够向前移动的主要方式之一就是通过它们的鳞片形状。体重计可以更轻松地向前移动。有关进一步的解释,请从3:04起观看此视频,以了解尺度如何帮助蛇向前移动。纵观3:14在同一个视频显示,当蛇是在一个套管,去除鳞的摩擦效果。如我的YouTube视频所示,当机器人一维蛇尝试在没有鳞片的草地上滑行时,它不会向前或向后移动,因为力量总和为净零。因此,我们需要在机器人的下腹部添加一些人造比例尺。在哈佛大学完成了通过尺度重建运动的研究,并在本视频中进行了演示。我无法设计出类似的方法来在我的机器人上上下移动比例尺,而是决定将被动3D打印的比例尺连接到下腹部。不幸的是,这种效果证明是无效的(见我的YouTube视频3:38),因为鳞片仍然在地毯表面上掠过,而不是捕捉光纤并增加摩擦。如果你想试试我制作的音阶,你可以从我的GitHub上打印3D文件。如果你让自己成功让我知道在下面的评论!使用不同的方法,我尝试使用由r188滚珠轴承制成的轮圈,并在外部使用热缩管作为“轮胎”。您可以从我的GitHub上的.stl文件中3D打印塑料轮轴。尽管车轮在生物学上并不准确,但它们与缩放比例类似,正向旋转很容易,但左右运动明显更困难。您可以在我的YouTube视频中看到轮子的成功结果。 第9步:滑动运动(单轴蛇) 3更多图片 我们已经讨论了鳞片如何帮助蛇向前移动,但我们如何编程蛇呢?简单的答案是我们通过伺服链抽出一个正弦波。但是,更详细地分析这些工作究竟如何让我们看看代码。请注意,在下面的代码块中,我省略了大部分次要细节,并仅着重于数学方面。不要把这段代码放到你的Arduino中,它不会工作,它仅仅是为了解释的目的。而是使用这个完整的代码。这条线向10个舵机的每一个写入一个正弦波。基线角度为90度,如果蛇向前(偏移= 0)或向左或向右(偏移= 10或-10),偏移变量将控制,参见上面的GIF。正弦波输出[-1,1]之间的值,该值可以通过乘以幅度来放大。for(int j = 0; j <10; j ++){ myServos [j]的.WRITE(90 +偏移+振幅* SIN(速度*拉德+ J * *波长偏移));}由于伺服的范围为[0,180]度,因此我们必须确保上述值不会给出低于0或高于180的输出。以下while循环用于限制幅度在这些范围内。在数学上我们必须满足这个条件:| offset | + |幅度| <= 90而(MaxAngleDisplacement> 90){ 振幅= ABS(振幅)-1; MaxAngleDisplacement = ABS(偏移)+振幅;}为了从正弦波中获得所需的输出,我们必须使用弧度而不是度数。如果您不确定这里的弧度是什么,这是一个简短的介绍。基本上2 * pi弧度= 360度。以下行进行此转换。for(int i = 0; i <360; i ++){ 拉德= I * PI / 180.0;}由于每个伺服比前一个伺服稍微靠前一个正弦波,我们必须将正弦波代码中的每个连续电机移位。这是使用以下行完成的。然后可以在上面for循环中看到移位变量的作用。float pi = 3.14159;int TotalNumberofServos = 10; //根据需要更改float Shift = 2 * pi / TotalNumberofServos; 我们现在已经确定了基础工作。我鼓励你改变以下变量的值:振幅,速度和波长,以查看它们对正弦波输出的影响。 步骤10:英寸蠕虫(单轴蛇) 通过观看英寸蠕虫移动,可以直观地了解此动作。该代码在蛇体中传播一个简单的碰撞,每次都稍微向前移动。我不想在这里插入另一个代码块,所以我会直接引导你到我的GitHub去查看名为'InchWorm()'的函数中的代码。需要注意的一点是,通过增加比例可以提高效率。如果您在7:24观看我的YouTube视频,只能看到尾部细节,那么您会发现它会前后晃动。这表明蛇不仅向前移动,而且每次移动都会稍微滑倒,从而降低效率。 第11步:其他几何(单轴蛇)直线(),Cshape(),ubend()和ring()函数都是相当自我解释性的,因为它们会创建c形弯曲,u形弯曲等等,尽管我会说如果你想要将蛇绕过我发现ubend()是最好的形状,否则当舵机在自己的重量下移动时,即使在没有动力的情况下,蛇也会到处翻转。 第12步:侧绕运动(双轴蛇) 在查看代码之前,让我们看看真正的响尾蛇。在前面的链接中,通过周期性地抬起蛇体的一部分并将其自身推向一侧的过程来描述响尾蛇的运动。为了达到这个目的,我们将在2D蛇的水平和垂直平面上发送一个正弦波。在代码中, 这个动作写在函数'sidewind()'中。您可能会注意到,上面的GIF(实时运行,未加速)中的侧绕运动比我的YouTube视频(以2倍速运行)中的侧绕片段质量更好。这表明了实验的重要性,并找到了变量的正确值.GIF中使用的变量导致了比我的YouTube视频更成功的旁边绕圈。在GIF中,变量是:速度= 2波长= 1.5而在YouTube视频中,这些变量是:速度= 1波长= 1.0为了实现侧绕运动,必须通过一个平面和一个余弦通过另一个平面发送正弦波。为此,我通过分别使用偶数(2 * j)和奇数(2 * j + 1)编号系统分离垂直平面中的5个电机和水平方向上的5个电机,修改了1D情况下的代码。我们希望这些线路之一作为正弦波移动,另一条线路作为余弦波。为了控制运动方向,我添加了一个乘数变量(等于1或-1)的表达式。根据乘数变量的值,代数表达式: - (乘数-1)*π/ 4和+(乘数+1)*π/ 4将为0或+π/ 2。注意sin(x + pi / 2)= cos(x)。因此,我们已经实现了我们的目标:一个平面的正弦波和另一个的余弦波,颠倒波浪的顺序将改变运动方向。for(int j = 0; j <5; j ++){ myServos [2 * j] .write(90 + offset + amplitude * sin(Speed * rads + j * Wavelengths * shift-(Multiplier-1)* pi / 4 )); //在垂直平面中移动舵机 myServos [2 * J + 1] .WRITE(90 +偏移+振幅* SIN(速度*拉德+ J * *波长移+(乘数+ 1)* PI / 4)); //在水平面上移动舵机 }为了实现转动,我只是略微修改了上面的代码,以使蛇的前半部分(引脚A5,4,3,8,7上的电机)侧向右侧,蛇的后半部分(引脚上的电机A0,A1,A2,A3,A4)向左侧风侧,导致向右转动(类似的方法可导致向左转弯)。(int j = 0; j <3; j ++){ myServos [2 * j] .write(90 + offset + amplitude * sin(Speed * rads + j * Wavelengths * shift +(Multiplier + 1)* pi / 4) ); myServos [2 * J + 1] .WRITE(90 +偏移+振幅* SIN(速度*拉德+ J * *波长倒班(乘数-1)* PI / 4)); }for(int j = 3; j <5; j ++){ myServos [2 * j]的.WRITE(90 +偏移+振幅* SIN(速度*拉德+ J * *波长倒班(乘数-1)* PI / 4)); myServos [2 * J + 1] .WRITE(90 +偏移+振幅* SIN(速度*拉德+ J * *波长移+(乘数+ 1)* PI / 4)); 第13步:打击(双轴蛇) 受到眼镜蛇的启发,用这段代码,蛇坐在等待击中。代码非常直接,因为蛇一直保持静止,直到需要打击,此时它会将引脚3和7上的舵机向前发送攻击,然后返回其静止位置。未来的改进将包括接近传感器。 步骤14:评论树木和爬管(双轴蛇) 我本来想要做的一个动作就是爬树算法,它包含一个像烟圈一样在自身上滚动的螺旋螺旋线。不幸的是,我的2D蛇不够长,无法缠绕树。现在我将给你留下来自卡内基梅隆大学的视频,以获取灵感。如果你想尝试自己的工作,我会指导你阅读参考资料部分的一些链接,以便理解数学。步骤15:未来发展 以下是我想要改进的一个列表,但阅读这个Instructable可能会鼓励你自己去一趟,并且揍我一顿!如果你确实用自己喜欢的任何一种功能来制作你自己的蛇!
|
|
相关推荐
3 个讨论
|
|
谢谢楼主的分享。。。。
|
|
|
|
|
|
1128 浏览 0 评论
359 浏览 0 评论
679 浏览 0 评论
开源项目!打造一款FPV头部追踪相机,让你仿佛置身遥控车之中!
1089 浏览 0 评论
1066 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 01:00 , Processed in 0.613124 second(s), Total 45, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号