步驟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文章
28632瀏覽量
208121
發布評論請先 登錄
相關推薦
評論