步驟1:組件
這是單條蛇的零件清單,如果你想制作兩條蛇,則需要將組件的體積加倍。
10MG996R伺服系統(tǒng)*
1.75mm3D打印燈絲
10個滾珠軸承,零件編號608
20個小滾珠軸承,零件號r188,用于車輪**
40個飛利浦頭螺釘6-32x1/2“
8個更長的螺絲
至少20件4英寸拉鏈
每根5米紅色和黑色20號線或更厚的***
標(biāo)準(zhǔn)22號線
30個公頭管針
ArduinoNano
3D打印部件
某種形式的動力,我個人使用改進(jìn)的ATX電源
1000uF25V電解電容器
各種尺寸的熱縮管,焊錫,膠水等雜項(xiàng)工具
*您可以使用其他類型,但您需要重新設(shè)計(jì)3D文件以適應(yīng)您的伺服系統(tǒng)。此外,如果你嘗試使用像sg90這樣的較小的伺服器,你可能會發(fā)現(xiàn)它們不夠強(qiáng)壯(我沒有測試過這個,你可以自己試驗(yàn))。
**你不需要為車輪使用小型滾珠軸承,我只是躺了很多。或者,你可以使用樂高輪或其他玩具輪。
***這根導(dǎo)線最多可以通過10安培,太薄,電流會熔化它。
步驟2:3D打印組件
如果您正在制作1D蛇打印這些碎片。
如果你正在制作這些碎片的2D蛇紋。
重要說明:刻度可能是錯誤的!我在Fusion360中設(shè)計(jì)我的組件,將設(shè)計(jì)作為.stl文件導(dǎo)出到MakerBot軟件中,然后將其打印在QidiTech打印機(jī)(MakerBotReplicator2X的克隆版本)上。在這個工作流程的某個地方有一個錯誤,我的所有打印出來都太小了。我一直無法識別錯誤的位置,但暫時修復(fù)了MakerBot軟件中每個打印尺寸縮放到106%的問題,這解決了這個問題。
鑒于此,請注意,如果您打印上面的文件,它們可能會被錯誤地縮放。我建議在打印之前打印一件并檢查它是否適合您的MG996R伺服。
如果你打印任何文件,請讓我知道結(jié)果是什么:如果打印太小,恰到好處,太大,百分之幾。通過作為社區(qū)一起工作,我們可以使用不同的3D打印機(jī)和.stl切片器來解決錯誤的位置。
步驟3:裝配蛇
兩個版本的蛇的裝配過程大致相同。唯一的區(qū)別是在2D蛇形中,每個電機(jī)相對于前一個旋轉(zhuǎn)90度,而在1D蛇中,所有電機(jī)都在一個軸上對齊。
首先擰下伺服,保存擰緊并取下黑色塑料框架的頂部和底部部件,小心不要丟失任何齒輪!將伺服滑動到3D打印的框架中,如上圖所示。更換伺服外殼的頂部,并用四個6-321/2“螺釘將其擰緊到位。保存伺服框架的底部(如果您想在以后的項(xiàng)目中再次使用它)并將其更換為3D印刷外殼,唯一的區(qū)別是滾珠軸承滑動的附加旋鈕。將伺服器擰回到一起,重復(fù)10次。
重要提示:在繼續(xù)之前,您必須將代碼上傳到Arduino并將每個伺服器移動到90度。如果不這樣做,可能會導(dǎo)致您斷開一個或多個伺服和/或3D打印的幀。如果您不確定如何將伺服器移動到90度,請參閱此頁面?;旧蠈⑺欧募t線連接到Arduino上的5V,棕色線連接到GND,黃色線連接到數(shù)字引腳9,然后上傳鏈接中的代碼。
現(xiàn)在每個伺服都在90度,繼續(xù):
通過將3D打印的旋鈕從一個伺服盒插入第二段片的孔中來連接10個片段,然后用一點(diǎn)力將伺服器的軸推入其孔中(為清晰起見,請參見上面的圖片和視頻)。如果您正在制作1D蛇,則所有線段都應(yīng)對齊,如果您正在制作2D蛇,則每個線段應(yīng)旋轉(zhuǎn)90度到前一個線段。請注意,尾部和頭部框架只是其他部分長度的一半,連接它們但在完成布線之前不要對金字塔形狀的部件進(jìn)行注釋。
安裝x形伺服臂并將其擰緊到位。將滾珠軸承滑過3D打印旋鈕,這需要將兩個半圓柱輕輕擠壓在一起。根據(jù)您使用的燈絲品牌和填充密度,柱子可能太脆而且會卡住,我不認(rèn)為會出現(xiàn)這種情況,但是不要過度用力。我個人使用10%填充的PLA長絲。一旦滾珠軸承打開,它應(yīng)該被旋鈕上的懸伸鎖定。
步驟4:電路
兩條機(jī)器人蛇的電路相同。在布線過程中,確保每個段都有足夠的布線空間完全旋轉(zhuǎn),特別是在2D蛇形中。
以上是僅有2個伺服的布線電路圖。我試著用10個舵機(jī)做一個電路圖,但它太過擁擠了。這張照片與現(xiàn)實(shí)生活中唯一的區(qū)別在于,您需要并聯(lián)8個伺服電機(jī),并將PWM信號線連接到ArduinoNano上的引腳。
當(dāng)連接電源線時,我使用了單件18號線作為主要的5V線沿著蛇的長度延伸。使用剝線鉗,我以10個規(guī)則的間隔移除了一小部分絕緣體,并從這些間隔中的每一個焊接了一小段電線,一組3個插頭。對于黑色18規(guī)格GND線和第二個插頭引腳,再次重復(fù)此操作。最后將較長的導(dǎo)線焊接到第3個插頭引腳,該引腳將PWM信號從蛇形頭部的ArduinoNano傳送到伺服系統(tǒng)(導(dǎo)線必須足夠長才能到達(dá),即使分段彎曲)。根據(jù)需要安裝熱縮管。將3個插頭引腳連接到伺服電線的3個母插頭引腳。對10個伺服系統(tǒng)中的每個伺服系統(tǒng)重復(fù)10次。最終實(shí)現(xiàn)的是并行連接伺服系統(tǒng)并將PWM信號線連接到Nano。公/母插針的原因是你可以很容易地將線段拆開并更換伺服電機(jī),如果它們在沒有拆焊的情況下斷開。
將GND和5V電線焊接到尾部的3x7孔穿孔板上電容器和螺絲端子。電容器的目的是消除啟動伺服系統(tǒng)時引起的任何電流消耗尖峰,可以重置ArduinoNano(如果你沒有電容器,你可以在沒有它的情況下離開,但最好是安全的)。請記住,電解電容器的長插腳需要連接到5V線路,而較短的插腳連接到GND線路。將GND線焊接到Nano的GND引腳,將5V線焊接到5V引腳。請注意,如果您使用不同的電壓,請說一個7.4V的Lipo電池,然后將紅線連接到Vin引腳,而不是5V引腳,這樣做會破壞引腳。
將10根PWM信號線焊接到ArduinoNano上的引腳。我按以下順序連接了我,你可以選擇以不同方式連接你的,但只記得你需要更改代碼中的行。如果你不確定我在說什么,只需按照我的方式連線,你就不會有問題。從蛇的尾部伺服到蛇的頭部,我按照以下順序連接了我的蛇。將信號引腳連接到:A0,A1,A2,A3,A4,A5,D4,D3,D8,D7。
使用拉鏈來清理接線。在繼續(xù)檢查之前,所有部分都可以移動,并且有足夠的空間讓電線移動而不會被拉開。現(xiàn)在接線已完成,我們可以擰上頭部和尾部金字塔形的帽子。請注意,尾部有一個用于系繩出來的孔,頭部有一個用于Arduino編程電纜的孔。
步驟5:為Snake供電
由于伺服系統(tǒng)并聯(lián)連接,它們都獲得相同的電壓,但必須加上電流。查看MG996r伺服系統(tǒng)的數(shù)據(jù)表,他們可以在運(yùn)行時繪制高達(dá)900mA的電流。因此,如果所有10個伺服系統(tǒng)同時移動,則總電流消耗為0.9A*10=9A。因此,正常的5v,2A墻壁插座適配器將無法正常工作。我決定修改ATX電源,能夠在20A時達(dá)到5v。我不打算解釋如何做到這一點(diǎn),因?yàn)橐呀?jīng)在Instructables和YouTube上進(jìn)行了很多討論。在線快速搜索將向您展示如何修改其中一個電源。
假設(shè)您已經(jīng)修改了電源,只需在電源和螺釘端子之間連接一根長繩即可。蛇。
中國分揀機(jī)器人制造商另一種選擇是使用板載鋰電池組。我沒有試過這個,所以你需要為電池設(shè)計(jì)一個安裝座并將它們接入。請記住伺服電機(jī)和Arduino的工作電壓,電流消耗Arduino上的5v引腳,如果有更高的電壓,請轉(zhuǎn)到Vin引腳。)
步驟6:測試一切正常
繼續(xù)讓我們測試一切正常。上傳此代碼。你的蛇應(yīng)該在0-180之間單獨(dú)移動每個伺服,然后通過直線放置完成。如果沒有,則出現(xiàn)問題,很可能是接線不正確或者伺服系統(tǒng)最初沒有居中,如“蛇的裝配”部分所述。
步驟7:代碼
目前沒有蛇的遙控器,所有的動作都是預(yù)先編程的,你可以選擇你想要的。我將在第2版中開發(fā)一個遙控器,但是如果你想遠(yuǎn)程控制它我會建議在Instructables上查看其他教程并調(diào)整蛇與藍(lán)牙兼容。
如果你正在制作1D蛇上傳此代碼。
如果您要讓2D蛇上傳此代碼。
我鼓勵您使用代碼,進(jìn)行自己的更改并創(chuàng)建新算法。閱讀接下來的幾個部分,了解每種類型的運(yùn)動的詳細(xì)解釋以及它的代碼如何工作。
步驟8:稱重Vs輪
蛇的主要方式之一能夠向前移動是通過他們的鱗片的形狀。秤可以更容易向前運(yùn)動。有關(guān)進(jìn)一步說明,請觀看3:04以后的視頻,了解鱗片如何幫助蛇向前移動。在同一視頻中觀看3:14顯示了當(dāng)蛇在袖子中時的效果,消除了鱗片的摩擦。正如我的YouTube視頻中所示,當(dāng)機(jī)器人1D蛇試圖在沒有鱗片的草地上滑行時,它既沒有向前或向后移動,因?yàn)榱α靠偤蜑榱?。因此,我們需要在機(jī)器人的下腹部添加一些人工尺度。
通過尺度重建運(yùn)動的研究在哈佛大學(xué)完成,并在此視頻中進(jìn)行了演示。我無法設(shè)計(jì)一種類似的方法來在我的機(jī)器人上上下移動音階,而是安排將被動的3D打印音階附加到下腹部。
不幸的是,這被證明是無效的,因?yàn)轺[片仍然在地毯表面上掠過,而不是抓住纖維并增加摩擦力。
如果您想嘗試我制作的音階,您可以從我的GitHub3D打印文件。如果你自己成功,請?jiān)谙旅娴脑u論中告訴我!
我嘗試使用r188滾珠軸承制成的輪子,外面有熱縮管作為“輪胎”。您可以從我的GitHub上的.stl文件中3D打印塑料輪軸。雖然車輪在生物學(xué)上不準(zhǔn)確,但它們類似于秤,因?yàn)檎蛐D(zhuǎn)很容易,但是側(cè)向運(yùn)動要困難得多。你可以在我的YouTube視頻中看到輪子的成功結(jié)果。
第9步:滑動動作
我們已經(jīng)討論了鱗片如何幫助蛇前進(jìn),但我們?nèi)绾尉幊躺撸亢喍痰幕卮鹗俏覀兺ㄟ^伺服鏈泵送正弦波。但是有關(guān)詳細(xì)信息的更詳細(xì)分析,請查看代碼。請注意,在下面的代碼塊中,我省略了大部分細(xì)節(jié),只關(guān)注數(shù)學(xué)方面。不要將此代碼放入Arduino中,它不起作用,僅用于解釋目的。而是使用這個完整的代碼。
該行向10個伺服器中的每個伺服器寫入一個正弦波?;€角度為90度,偏移量變量將控制蛇是向前還是向左或向右,參見上面的GIF。正弦波輸出一個介于[-1,1]之間的值,該值可以通過乘以幅度來放大。
for(intj=0;j《10;j++){
myServos[j].write(90+offset+Amplitude*sin(Speed*rads+j*Wavelengths*Shift));
}
由于伺服的范圍為[0,180]度,我們必須確保上述值不會使輸出低于0或高于180.以下while循環(huán)用于將幅度限制在這些邊界內(nèi)。在數(shù)學(xué)上我們必須滿足這個條件:|offset|+|amplitude|《=90
while(MaxAngleDisplacement》90){
Amplitude=abs-1;
MaxAngleDisplacement=abs+Amplitude;
}
要從正弦波獲得所需的輸出,我們必須使用弧度而不是度數(shù)。如果您不確定這里的弧度是一個簡短的介紹?;旧?*pi弧度=360度。以下行進(jìn)行了這種轉(zhuǎn)換。
for(inti=0;i《360;i++){
rads=i*pi/180.0;
}
因?yàn)槊總€伺服沿著正弦波比前一個伺服更遠(yuǎn),我們必須在正弦波代碼中移動每個連續(xù)的電機(jī)。這是使用以下行完成的。然后可以在上面的for循環(huán)中看到移位變量。
floatpi=3.14159;
intTotalNumberofServos=10;//changeasrequired
floatShift=2*pi/TotalNumberofServos;
我們現(xiàn)在已經(jīng)設(shè)置了基礎(chǔ)工作。我鼓勵您改變以下變量的值:振幅,速度和波長,以查看它們對正弦波輸出的影響。
步驟10:英寸蠕蟲
通過觀看英寸蠕蟲的移動,可以直觀地理解這種動作。代碼在蛇體上傳播一個簡單的撞擊,每次都向前移動一點(diǎn)。我不想在這里插入另一個代碼塊,所以我將引導(dǎo)你到我的GitHub來查看名為‘InchWorm’的函數(shù)中的代碼。
需要注意的一點(diǎn)是通過增加比例可以提高效率。如果您在7:24觀看我的YouTube視頻,特別關(guān)注尾段,您會發(fā)現(xiàn)它會前后抖動。這表明蛇不只是向前移動,每次移動也會略微滑回,降低效率。
步驟11:其他幾何形狀,Cshape函數(shù)都是相當(dāng)自我解釋的,因?yàn)樗鼈儎?chuàng)建了C形彎曲,U形彎曲等,盡管如果你想要我會說為了攜帶蛇,我發(fā)現(xiàn)ubend是最好的形狀,否則蛇就會在任何地方翻轉(zhuǎn),因?yàn)榧词箾]有動力,舵機(jī)也會在自身重量下移動。
第12步:SidewindingMotion
在查看代碼之前,請看一下真正的繞行蛇。在前面的鏈接中,通過周期性地抬起部分蛇體并將其自身推向側(cè)面的過程來描述響尾蛇的運(yùn)動。為此,我們將在2D蛇的水平和垂直平面上發(fā)送正弦波。在代碼中,這個動作是在函數(shù)‘sidewind’中寫的。
你可能會注意到GIF中的側(cè)向運(yùn)動比質(zhì)量更好。我的YouTube視頻中的側(cè)卷剪輯。這證明了實(shí)驗(yàn)的重要性,并為變量找到正確的值.GIF中使用的變量導(dǎo)致比我的YouTube視頻更成功的側(cè)繞。在GIF中,變量是:
速度=2
波長=1.5
速度=1
波長=1.0
要實(shí)現(xiàn)側(cè)繞運(yùn)動,必須通過一個平面發(fā)送正弦波,通過另一個平面發(fā)送余弦。為此,我通過分別使用偶數(shù)和奇數(shù)編號系統(tǒng)分離垂直平面中的5個電機(jī)和水平中的5個來修改1D情況下的代碼。我們希望其中一條線作為正弦波移動而另一條線作為余弦波移動。為了控制移動方向,我添加了一個帶有乘數(shù)變量的表達(dá)式。根據(jù)乘數(shù)變量的值,代數(shù)表達(dá)式:-*pi/4和+*pi/4,將為0或+pi/2。請注意sin=cos。因此,我們已經(jīng)實(shí)現(xiàn)了我們的目標(biāo):一個平面中的正弦波和另一個平面中的余弦波,反轉(zhuǎn)波的順序?qū)⒏淖冞\(yùn)動方向。
for(intj=0;j《5;j++){
分揀機(jī)器人的分類和特點(diǎn)myServos[2*j].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift-*pi/4));//movesservosinverticalplane
分揀機(jī)器人企業(yè)排名myServos[2*j+1].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift+*pi/4));//movesservosinhorizontalplane
}
為了實(shí)現(xiàn)轉(zhuǎn)彎運(yùn)動,我只是稍微修改了上面的代碼,以便蛇的前半部分(引腳A5,4,3,8,7上的電機(jī))向右側(cè)和后側(cè)側(cè)向旋轉(zhuǎn)蛇的一半(A0,A1,A2,A3,A4上的電機(jī)向左側(cè))向左側(cè)轉(zhuǎn)動,導(dǎo)致向右轉(zhuǎn)動。
for(intj=0;j《3;j++){
myServos[2*j].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift+*pi/4));
myServos[2*j+1].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift-*pi/4));
}
for(intj=3;j《5;j++){
myServos[2*j].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift-*pi/4));
myServos[2*j+1].write(90+offset+amplitude*sin(Speed*rads+j*Wavelengths*shift+*pi/4));
}
步驟13:敲擊
受到眼鏡蛇的啟發(fā),使用此代碼,蛇坐等待罷工。代碼是相當(dāng)直接的,因?yàn)樯弑3朱o止,直到它有時間擊打,此時它將針腳3和7上的伺服器向前推進(jìn)以攻擊,然后返回其靜止位置。未來的改進(jìn)將包括接近傳感器。
步驟14:評論樹和管道攀爬
《我想要研究的其中一個動作是爬樹算法,它包括一個像煙圈一樣的螺旋狀螺旋滾動。不幸的是,我的2D蛇不夠長,不能纏繞在樹上?,F(xiàn)在,我將為您帶來卡內(nèi)基梅隆大學(xué)的視頻,以獲得靈感。如果您想嘗試自己動手,我會指導(dǎo)您閱讀參考部分中的一些鏈接,以了解數(shù)學(xué)。
第15步:未來發(fā)展
以下是我想要做的改進(jìn)列表,但是閱讀這篇Instructable可能會鼓勵你自己動手去打敗我!如果您使用這些功能構(gòu)建自己的蛇我很想知道!
車載電池,擺脫系繩!
更多伺服系統(tǒng),更長的蛇形長度,但更緊湊的設(shè)計(jì)
移除松散的電線,而在段之間有針腳接觸
接近傳感器/和/或相機(jī)
垃圾分揀機(jī)器人單機(jī)械臂嘴巴/舌頭/尖牙/眼睛/嘶嘶聲
自主運(yùn)動
爬樹能力
隧道穿越能力
遙控操作
將技術(shù)應(yīng)用到機(jī)器人水下鰻魚
也許最重要的是:重新設(shè)計(jì)3D打印片段,使片段可以輕松旋轉(zhuǎn)90度讓你在1D蛇和2D蛇之間快速切換而不需要打印全新的蛇
食品分揀機(jī)器人公司菜鳥agv分揀機(jī)器人智能分揀機(jī)器人缺點(diǎn)