每日最新頭條.有趣資訊

用Python做一隻真·多足機器人,鋼鐵蜈蚣能彎曲還能蠕動

大數據文摘出品

來源:declanoller

編譯:徐玲、李世林、陳若朦

足式機器人是如今機器人設計的熱點,相較於輪式和履帶式機器人,足式設計的優勢在於其極強的地形通過能力。

你一定見過模仿人類的兩足機器人、犬型和馬型的四足機器人、近來爆紅的蜘蛛型六足機器人,那你有想過再多來幾條腿嗎?

控制行走一直是足式機器人的一大設計難點,腿越多則移動越困難。然而,一位名叫Adimin的外國小哥用python做了一只可爬行可彎曲的蜈蚣型機器人。

問:為什麽要做設計成蜈蚣型呢?

小哥答:蜈蚣在體型上具有相當的長度,而通過向上彎曲身體還可以具有一定的高度。但是重點是——從來沒人做過!蜈蚣機器人夠酷、夠怪、夠有趣!

讓“蜈蚣”蠕動起來:雙伺服旋轉的腿

為實現“蜈蚣”的移動,同時考慮到電力需求,Adimin設計了腿在水準和垂直方向上的旋轉功能,分別命名為hip servo 和ankle servo。

於是,腿就能在兩個方向上蠕動起來!

此處的所有伺服均由PCA9685 PWM分支板控制——這是一個I2C器件,允許同時控制多達16個伺服器,既便宜又實用。

考慮腿的數量和“蜈蚣”身體的連接方式,Adimin小哥將主體平台部分設計得較大,給腿的添加留出更多空間;同時在前後兩端采取鉸鏈設計(採用金屬齒輪MG 996R),不僅能實現身體長度的延伸,還能完成向上彎曲的動作。

“蜈蚣”彎曲起來!

用Python製作多足機器人

“蜈蚣”運動的控制代碼是一個分層的類結構。

最基本的單元是Servo部分,使用這部分功能可以直接控制伺服器。

代碼中更高級的部分是Leg,其中包含了兩個Servo對象,分別用來控制之前提到的 “hip” 和 “ankle” 伺服系統,根據其自身leg_index(2*leg_index和2*leg_index + 1)為它們分配正確的板索引值。

LegPair部分與之Leg類似,其中創建了兩個Leg對象分別控制左右。

1. b = DriverBoard(args.addr, 16)

2.

3. if args.N_pairs > 4:

4. b_front = DriverBoard(40, 8)

5.

6. pairs = []

7. for i in range(args.N_pairs):

8. if i

9. lp = LegPair(b, i)

10. else:

11. lp = LegPair(b_front, i-4)

12.

13. pairs.append(lp)

14.

15. start = time()

16. while True:

17. for p in pairs:

18. p.increment_ankles()

讓我們來看看這段代碼的功能——“蜈蚣”彈跳起來了!

其實,讓“蜈蚣”實現行走的部分是increment _ankles()函數。為了解釋這一點,讓我們回到Servo class。

伺服系統的主要工作是循環移動。為了控制伺服裝置的位置,需要向它發送一個特定佔空比的脈寬調製(PWM)信號。接下來,我們要找到對應於該點的脈寬調製,即中點脈寬調製(mid_pwm),使它圍繞一個點振蕩。然後,定義一個脈寬調製幅度(pwm_amplitude),該幅度會決定它在這個循環中相對於中點上下移動的距離。於是,讓“蜈蚣”循環移動起來只需通過以下代碼:

pwm = int(self.pwm_mid + pwm_amplitude*sin(self.phase + self.phase_offset))

如果要讓一條腿以我們預期的“行走”方式運動,hip和ankle伺服系統不可能做完全相同的運動。讓我們將運動參數化成x和y,加上時間變量t,構成一個正弦函數,令x(t)=y(t)=sin(ωt),便可以得到下面這個運動曲線:

為了實現行走,則還需要您給其中一個變量提供相位偏移(如上面的代碼所示),最終得到一個圓。

在伺服系統的相位偏移變量設計中,Adimin表示分層設置實在是太炫酷了——它能使多條腿連貫運動!

每個腿的伺服對象之間需要一定的相位偏移,而每條腿相對於其他腿也存在相位偏移。因此,我們需要給每個LegPair對象一個高級的相位偏移量,然後每個部分將相應的偏移量分配給它的低級對象。

除了上下跳動以外,Python還能實現“蜈蚣”的其他運動方式:

1. b = DriverBoard(args.addr, 16)

2.

3. if args.N_pairs > 4:

4. b_front = DriverBoard(40, 8)

5.

6. sleep(0.5)

7. pairs = []

8. for i in range(args.N_pairs):

9. if i

10. lp = LegPair(b, i)

11. else:

12. lp = LegPair(b_front, i-4)

13.

14. if i%2 == 1:

15. lp.set_phase_offset(pi)

16. pairs.append(lp)

17.

18. start = time()

19. time_limit = args.runtime

20.

21. while True:

22. for p in pairs:

23. p.increment()

自然生物學為機器人設計提供了黃金標準,我們需仍要很長時間才能製造出完成一切動物行為動作的多足機器人。而另一方面,機器人不受生物學的限制,這意味著它們總有可能學習動物天生就不會的新行為。

相關報導:

https://www.declanoller.com/2019/05/16/in-case-hexapods-werent-creepy-enough-the-centipede-robot/?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more

實習/全職編輯記者招聘ing

加入我們,親身體驗一家專業科技媒體采寫的每個細節,在最有前景的行業,和一群遍布全球最優秀的人一起成長。坐標北京·清華東門,在大數據文摘主頁對話頁回復“招聘”了解詳情。簡歷請直接發送至[email protected]

志願者介紹

後台回復“志願者”加入我們

點「在看」的人都變好看了哦!

獲得更多的PTT最新消息
按讚加入粉絲團