打造自己的海龜繪圖機器人

pondahai
Aug 28, 2023

--

應用樹莓派pico製作程式繪圖機器人

海龜繪圖機器人是指以貼近地面的方式進行程式化移動的輪型機器人,因為它的移動緩慢形似海龜,因此被暱稱為海龜機器人。海龜機器人有時會被安裝持筆機構,使其可以在地面的大圖畫紙上繪圖,因此又被稱為海龜繪圖機器人。

早在1940年代,一位專長於神經生理學、控制論和以及機器人學的學者,威廉·格雷·華特(William Gray Walter,1910年2月19日-1977年5月6日)。他為了證明少量腦細胞的豐富連接可以產生複雜的行為,因此打造了一批三輪機器人。華特應用他的神經生理學知識,配合使用當時的電路與感測技術,讓這批海龜機器人可以趨光前進。

華特與他的海龜機器人 出處:Cambridge University Press

1967年,Logo程式語言的創作人Wallace Feurzeig等人在麻省理工學院成立Logo實驗室,目的是開發一款可以來教導孩子們的程式語言,Logo程式簡單易學還可以用來創建圖形。英國研究生Mike Paterson和工程師Paul Wexelblat設計建造了一款名為Irving的海龜機器人,以Logo程式操控機器人運動的方式在地上畫圖,這部分的靈感就是來自上述威廉華特的研究。

現代常用的程式語言python中也內建有turtle程式庫,他的精神就是延續前人的研究,將海龜繪圖在python環境中實現。python的turtle程式庫是預設安裝的程式庫,只要安裝好python環境,就可以用

import turtle

直接引入turtle程式庫。

以下是一個簡單的畫方塊範例

import turtle
t = turtle.Turtle()
t.pendown()
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)

程式的原理顯而易見,結果也是立即可見。

python turtle的執行結果

很快就有人想到,python turtle只是電腦上的模擬,如果想要打造自己的實體海龜機器人該如何做呢?於是我們發現到一款開源的海龜機器人:OSTR(https://www.instructables.com/OSTR/

Instrucatable.com上的開源海龜專案

這個專案是用arduino作為主控,雖然也是好用,但我們希望可以用python turtle的程式語法來運作,可以同時學到python。所幸有人為微控器開發了micro python,可以在某些arm的微控器上執行特定版本的python,這就讓人聯想到,如果把python turtle搬到微控器上呢?

於是我們又找到了有人用ESP32+MicroPython打造的繪圖海龜機器人:https://github.com/russhughes/TurtlePlotBot

用ESP32+MicroPython打造的繪圖海龜機器人

因為剛好手邊還有raspberry pi Pico,於是我想說用Pico來試試,因爲Pico是有micropython的。這一點可以從micropython的整合開發環境Thonny中得知。

從Thonny的設定畫面可以得知,micropython有支援Pico

經過觀察,我們找到的那個ESP32版本海龜機器人,它是透過micropython動態外掛程式庫的方式設計海龜程式。它是透過修改python原生的turtle程式碼,將底層原本在電腦上繪圖的程式,改寫成控制ESP32的IO輸出,讓移動動作轉變成左右步進馬達的轉動,畫筆的上下動作轉變成伺服馬達的轉動角度,於是就讓python turtle與實體世界串連起來啦。

因為python的直譯特性,我只是稍微修改源碼,讓它符合我pico的IO連接腳位,然後再上傳到Pico裏面去,這樣就完成了!

海龜繪圖機器人的硬體連接方式非常簡單,就是每個步進馬達需要四隻IO腳的信號控制,中間透過達靈頓IC放大電流,然後畫筆是利用伺服馬達轉動的角度透過連桿帶動,就可以實現提筆、下筆。

電源供應自四顆1.5V電池串連,但是1.5V四顆串聯會得到6V的電壓,超過Pico的額定5.5V,所以我們在這裡加了一顆二極體作為降壓大約1V的作用,同時也有作為保護電路的用途。

機器人採兩個動輪一個輔助輪的三輪結構。動輪部分由步進馬達直接帶動,但是Pico須經透過驅動電路才能驅動步進馬達,因此每個馬達會帶有一塊驅動電路。而負責下筆的任務就交給SG-90伺服馬達,我們構思了一個簡單的機構來抓筆,然後伺服馬達的搖臂負責提高或放下畫筆。

我們的海龜機器人最精簡的配線圖

我們海龜繪圖機器人取名OTTR,來自於因為是OpenlabTaipei的朋友共創,所以取名Openlab Taipei Turtle Robot,OTTR。

海龜機器人的外觀,我使用tinkercad進行設計,外觀採穹頂外殼取自烏龜的外形。將電池放置於底盤下方,作為重心以及提供下筆時的穩定性。兩顆動輪使用現成品,唯有輪軸與步進馬達軸心不適配,經實驗後,我們發現在馬達軸心上纏繞銅箔膠帶彌補輪軸與馬達軸心之間的差異,且可以提供足夠的連接剛性。事實上,我們的設計理念就是以現成品的組裝為主要考量,希望可以提供給小小玩家一個解題的思維訓練,就是如何在有限資源(現成品)下解決複雜的問題(組合成為一部海龜繪圖機器人)。

OTTR的立體圖

之後我們再詳聊軟體的部分。

--

--

pondahai

有容乃大 海納百川 我是彭大海 以前是工程師 現在不是工程師 贊助鏈結: https://www.paypal.me/pondahai