步骤1:组件
这是单条蛇的零件清单,如果你想制作两条蛇,则需要将组件的体积加倍。
10 MG996R伺服系统*
1.75mm 3D打印灯丝
10个滚珠轴承,零件编号608
20个小滚珠轴承,零件号r188,用于车轮**
40个飞利浦头螺钉6-32 x 1/2“
8个更长的螺丝
至少20件4英寸拉链
每根5米红色和黑色20号线或更厚的***
标准22号线
30个公头管针(分成10个批次) 3)
Arduino Nano
3D打印部件
某种形式的动力,我个人使用改进的ATX电源
1000uF 25V电解电容器
各种尺寸的热缩管,焊锡,胶水等杂项工具
*您可以使用其他类型,但您需要重新设计3D文件以适应您的伺服系统。此外,如果你尝试使用像sg90这样的较小的伺服器,你可能会发现它们不够强壮(我没有测试过这个,你可以自己试验)。
**你不需要为车轮使用小型滚珠轴承,我只是躺了很多。或者,你可以使用乐高轮或其他玩具轮。
***这根导线最多可以通过10安培,太薄,电流会熔化它。
步骤2:3D打印组件
如果您正在制作1D蛇打印这些碎片。
如果你正在制作这些碎片的2D蛇纹。
重要说明:刻度可能是错误的!我在Fusion 360中设计我的组件(以mm为单位),将设计作为.stl文件导出到MakerBot软件中,然后将其打印在Qidi Tech打印机(MakerBot Replicator 2X的克隆版本)上。在这个工作流程的某个地方有一个错误,我的所有打印出来都太小了。我一直无法识别错误的位置,但暂时修复了MakerBot软件中每个打印尺寸缩放到106%的问题,这解决了这个问题。
鉴于此,请注意,如果您打印上面的文件,它们可能会被错误地缩放。我建议在打印之前打印一件并检查它是否适合您的MG996R伺服。
如果你打印任何文件,请让我知道结果是什么:如果打印太小,恰到好处,太大,百分之几。通过作为社区一起工作,我们可以使用不同的3D打印机和.stl切片器来解决错误的位置。
步骤3:装配蛇
两个版本的蛇的装配过程大致相同。唯一的区别是在2D蛇形中,每个电机相对于前一个旋转90度,而在1D蛇中,所有电机都在一个轴上对齐。
首先拧下伺服,保存拧紧并取下黑色塑料框架的顶部和底部部件,小心不要丢失任何齿轮!将伺服滑动到3D打印的框架中,如上图所示。更换伺服外壳的顶部,并用四个6-32 1/2“螺钉将其拧紧到位。保存伺服框架的底部(如果您想在以后的项目中再次使用它)并将其更换为3D印刷外壳,唯一的区别是滚珠轴承滑动的附加旋钮。将伺服器拧回到一起,重复10次。
重要提示:在继续之前,您必须将代码上传到Arduino并将每个伺服器移动到90度。如果不这样做,可能会导致您断开一个或多个伺服和/或3D打印的帧。如果您不确定如何将伺服器移动到90度,请参阅此页面。基本上将伺服的红线连接到Arduino上的5V,棕色线连接到GND,黄色线连接到数字引脚9,然后上传链接中的代码。
现在每个伺服都在90度,继续:
通过将3D打印的旋钮从一个伺服盒插入第二段片的孔中来连接10个片段,然后用一点力将伺服器的轴推入其孔中(为清晰起见,请参见上面的图片和视频)。如果您正在制作1D蛇,则所有线段都应对齐,如果您正在制作2D蛇,则每个线段应旋转90度到前一个线段。请注意,尾部和头部框架只是其他部分长度的一半,连接它们但在完成布线之前不要对金字塔形状的部件进行注释。
安装x形伺服臂并将其拧紧到位。将滚珠轴承滑过3D打印旋钮,这需要将两个半圆柱轻轻挤压在一起。根据您使用的灯丝品牌和填充密度,柱子可能太脆而且会卡住,我不认为会出现这种情况,但是不要过度用力。我个人使用10%填充的PLA长丝。一旦滚珠轴承打开,它应该被旋钮上的悬伸锁定。
步骤4:电路
两条机器人蛇的电路相同。在布线过程中,确保每个段都有足够的布线空间完全旋转,特别是在2D蛇形中。
以上是仅有2个伺服的布线电路图。我试着用10个舵机做一个电路图,但它太过拥挤了。这张照片与现实生活中唯一的区别在于,您需要并联8个伺服电机,并将PWM信号线连接到Arduino Nano上的引脚。
当连接电源线时,我使用了单件18号线(厚度足以承受10安培)作为主要的5V线沿着蛇的长度延伸。使用剥线钳,我以10个规则的间隔移除了一小部分绝缘体,并从这些间隔中的每一个焊接了一小段电线,一组3个插头。对于黑色18规格GND线和第二个插头引脚,再次重复此操作。最后将较长的导线焊接到第3个插头引脚,该引脚将PWM信号从蛇形头部的Arduino Nano传送到伺服系统(导线必须足够长才能到达,即使分段弯曲)。根据需要安装热缩管。将3个插头引脚连接到伺服电线的3个母插头引脚。对10个伺服系统中的每个伺服系统重复10次。最终实现的是并行连接伺服系统并将PWM信号线连接到Nano。公/母插针的原因是你可以很容易地将线段拆开并更换伺服电机,如果它们在没有拆焊的情况下断开。
将GND和5V电线焊接到尾部的3x7孔穿孔板上电容器和螺丝端子。电容器的目的是消除启动伺服系统时引起的任何电流消耗尖峰,可以重置Arduino Nano(如果你没有电容器,你可以在没有它的情况下离开,但最好是安全的) 。请记住,电解电容器的长插脚需要连接到5V线路,而较短的插脚连接到GND线路。将GND线焊接到Nano的GND引脚,将5V线焊接到5V引脚。请注意,如果您使用不同的电压(参见下一节),请说一个7.4V的Lipo电池,然后将红线连接到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之间单独移动每个伺服,然后通过直线放置完成。如果没有,则出现问题,很可能是接线不正确或者伺服系统最初没有居中,如“蛇的装配”部分所述。
步骤7 :代码
目前没有蛇的遥控器,所有的动作都是预先编程的,你可以选择你想要的。我将在第2版中开发一个遥控器,但是如果你想远程控制它我会建议在Instructables上查看其他教程并调整蛇与蓝牙兼容。
如果你正在制作1D蛇上传此代码。
如果您要让2D蛇上传此代码。
我鼓励您使用代码,进行自己的更改并创建新算法。阅读接下来的几个部分,了解每种类型的运动的详细解释以及它的代码如何工作。
步骤8:称重Vs轮
蛇的主要方式之一能够向前移动是通过他们的鳞片的形状。秤可以更容易向前运动。有关进一步说明,请观看3:04以后的视频,了解鳞片如何帮助蛇向前移动。在同一视频中观看3:14显示了当蛇在袖子中时的效果,消除了鳞片的摩擦。正如我的YouTube视频中所示,当机器人1D蛇试图在没有鳞片的草地上滑行时,它既没有向前或向后移动,因为力量总和为零。因此,我们需要在机器人的下腹部添加一些人工尺度。
通过尺度重建运动的研究在哈佛大学完成,并在此视频中进行了演示。我无法设计一种类似的方法来在我的机器人上上下移动音阶,而是安排将被动的3D打印音阶附加到下腹部。
不幸的是,这被证明是无效的,因为鳞片仍然在地毯表面上掠过,而不是抓住纤维并增加摩擦力。
如果您想尝试我制作的音阶,您可以从我的GitHub 3D打印文件。如果你自己成功,请在下面的评论中告诉我!
我尝试使用r188滚珠轴承制成的轮子,外面有热缩管作为“轮胎”。您可以从我的GitHub上的.stl文件中3D打印塑料轮轴。虽然车轮在生物学上不准确,但它们类似于秤,因为正向旋转很容易,但是侧向运动要困难得多。你可以在我的YouTube视频中看到轮子的成功结果。
第9步:滑动动作(单轴蛇)
我们已经讨论了鳞片如何帮助蛇前进,但我们如何编程蛇?简短的回答是我们通过伺服链泵送正弦波。但是有关详细信息的更详细分析,请查看代码。请注意,在下面的代码块中,我省略了大部分细节,只关注数学方面。不要将此代码放入Arduino中,它不起作用,仅用于解释目的。而是使用这个完整的代码。
该行向10个伺服器中的每个伺服器写入一个正弦波。基线角度为90度,偏移量变量将控制蛇是向前(偏移= 0)还是向左或向右(偏移= 10或-10),参见上面的GIF。正弦波输出一个介于[-1,1]之间的值,该值可以通过乘以幅度来放大。
for(int j=0; j《10; j++){
myServos[j].write(90+offset+Amplitude*sin(Speed*rads+j*Wavelengths*Shift));
}
由于伺服的范围为[0,180]度,我们必须确保上述值不会使输出低于0或高于180.以下while循环用于将幅度限制在这些边界内。在数学上我们必须满足这个条件:| offset | + | amplitude | 《= 90
while(MaxAngleDisplacement》90){
Amplitude=abs(Amplitude)-1;
MaxAngleDisplacement=abs(offset)+Amplitude;
}
要从正弦波获得所需的输出,我们必须使用弧度而不是度数。如果您不确定这里的弧度是一个简短的介绍。基本上2 * pi弧度= 360度。以下行进行了这种转换。
for(int i=0; i《360; i++){
rads=i*pi/180.0;
}
因为每个伺服沿着正弦波比前一个伺服更远,我们必须在正弦波代码中移动每个连续的电机。这是使用以下行完成的。然后可以在上面的for循环中看到移位变量。
float pi=3.14159;
int TotalNumberofServos=10; //change as required
float Shift = 2*pi/TotalNumberofServos;
我们现在已经设置了基础工作。我鼓励您改变以下变量的值:振幅,速度和波长,以查看它们对正弦波输出的影响。
步骤10:英寸蠕虫(单个) Axis Snake)
通过观看英寸蠕虫的移动,可以直观地理解这种动作。代码在蛇体上传播一个简单的撞击,每次都向前移动一点。我不想在这里插入另一个代码块,所以我将引导你到我的GitHub来查看名为‘InchWorm()’的函数中的代码。
需要注意的一点是通过增加比例可以提高效率。如果您在7:24观看我的YouTube视频,特别关注尾段,您会发现它会前后抖动。这表明蛇不只是向前移动,每次移动也会略微滑回,降低效率。
步骤11:其他几何形状(单轴蛇)
直线(),Cshape(),ubend()和ring()函数都是相当自我解释的,因为它们创建了C形弯曲,U形弯曲等,尽管如果你想要我会说为了携带蛇,我发现ubend()是最好的形状,否则蛇就会在任何地方翻转,因为即使没有动力,舵机也会在自身重量下移动。
第12步:Sidewinding Motion(双轴Snake)
在查看代码之前,请看一下真正的绕行蛇。在前面的链接中,通过周期性地抬起部分蛇体并将其自身推向侧面的过程来描述响尾蛇的运动。为此,我们将在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)* pi/4和+(乘数+ 1)* pi/4,将为0或+ pi/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)); //moves servos in vertical plane
myServos[2*j+1].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift+(Multiplier+1)*pi/4)); //moves servos in horizontal plane
}
为了实现转弯运动,我只是稍微修改了上面的代码,以便蛇的前半部分(引脚A5,4,3,8,7上的电机)向右侧和后侧侧向旋转蛇的一半(A0,A1,A2,A3,A4上的电机向左侧)向左侧转动,导致向右转动(类似的方法可能导致左转)。
for(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+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift-(Multiplier-1)*pi/4));
}
for(int j=3; 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+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift+(Multiplier+1)*pi/4));
}
步骤13:敲击(双轴蛇)
受到眼镜蛇的启发,使用此代码,蛇坐等待罢工。代码是相当直接的,因为蛇保持静止,直到它有时间击打,此时它将针脚3和7上的伺服器向前推进以攻击,然后返回其静止位置。未来的改进将包括接近传感器。
步骤14:评论树和管道攀爬(双轴蛇)
《我想要研究的其中一个动作是爬树算法,它包括一个像烟圈一样的螺旋状螺旋滚动。不幸的是,我的2D蛇不够长,不能缠绕在树上。现在,我将为您带来卡内基梅隆大学的视频,以获得灵感。如果您想尝试自己动手,我会指导您阅读参考部分中的一些链接,以了解数学。
第15步:未来发展
以下是我想要做的改进列表,但是阅读这篇Instructable可能会鼓励你自己动手去打败我!如果您使用这些功能构建自己的蛇我很想知道!
车载电池,摆脱系绳!
更多伺服系统,更长的蛇形长度,但更紧凑的设计
移除松散的电线,而在段之间有针脚接触
接近传感器/和/或相机
嘴巴/舌头/尖牙/眼睛/嘶嘶声
自主运动
爬树能力
隧道穿越能力
遥控操作
将威廉希尔官方网站 应用到机器人水下鳗鱼
也许最重要的是:重新设计3D打印片段,使片段可以轻松旋转90度让你在1D蛇和2D蛇之间快速切换而不需要打印全新的蛇
-
机器人
+关注
关注
211文章
28418浏览量
207100
发布评论请先 登录
相关推荐
评论