跳轉到內容

機器人/設計基礎/基礎程式設計

來自Wikibooks,開放世界中的開放書籍

可程式設計裝置

[編輯 | 編輯原始碼]

微控制器

[編輯 | 編輯原始碼]

如今使用可程式設計元件變得很容易。在早期,你必須用匯編語言編寫程式碼,將其燒錄到EPROM中,將EPROM插入其插座,並希望你沒有犯任何錯誤。因為如果你犯了錯誤,你必須在數百行神秘的彙編程式碼中查詢錯誤,並且必須使用一個新的EPROM。如今你有了可以在電路中重新程式設計的快閃記憶體。你有了C和Basic編譯器來編寫你的程式碼。大多數微控制器在晶片上集成了大量硬體(UART、看門狗、即時時鐘、RAM、ROM、EEPROM等),並且有針對不同程式語言的庫可用,這使得編碼LC顯示屏或伺服電機變得非常容易。更不用說你還有模擬器(一種插入微控制器插座的特殊聯結器,允許PC模擬微控制器)和模擬器(在PC上模擬微控制器並允許執行其程式碼)來查詢錯誤。

一個很好的入門微控制器是Atmel AVR ATtiny2313(以前:AT90S2313)或ATMEGA8535(以前:AT90S8535)(Atmel)。它便宜,在晶片上擁有所有基本功能,並且有大量專門的網站。8535更貴,但記憶體更大,並且有一個片上ADC。AVR結合Bascom-AVR幾乎是開始使用微控制器的最簡單方法。

有關詳細資訊,請參閱嵌入式系統/Atmel AVR

有關其他流行的微控制器,請參閱機器人/計算機控制/介面/微控制器

有關一種AVR開發方法,請參閱通用工程介紹/Arduino和電機/Arduino介紹

在控制機器人方面,PC比微控制器具有許多優勢。但是它有兩個缺點,使它幾乎不可能用於小型機器人專案

  • 首先:它又大又重。
  • 其次:現代PC消耗大量電力。

這意味著PC僅限於繫留或大型機器人。如果電力不是問題,PC提供了大量的RAM和硬碟空間以及充足的CPU效能。加上一個非常方便的使用者介面。此外,網路功能對於某些應用也可能非常有用。為你的機器人提供無線連線(紅外、無線電、WiFi、藍牙等)以及PC上的類似介面,可以將線纜問題減少到有限距離(或在紅外的情況下為視線)問題。

如果你打算在你的專案中使用PC,你可能希望使用Linux發行版作為作業系統,因為它允許輕鬆訪問計算機的任何部分。另一個作業系統選擇是較舊的MS-DOS,儘管MS-DOS缺乏多執行緒(但這些可以在你的軟體中新增)並且具有糟糕的記憶體管理(還記得640Kb限制嗎?)。

筆記型電腦

[編輯 | 編輯原始碼]

筆記型電腦只有尺寸不利。筆記型電腦提供了PC的優勢,而沒有巨大的功耗。筆記型電腦的缺點是電池續航時間有限。電池續航時間有限。html

PDAPersonal Digital Assistant)只不過是手持式PCPersonal Computer)。大多數情況下,這些裝置使用縮小的RISCReduced Instruction Set Chip)處理器,以實現快速的執行時間,並且還使裝置保持比普通筆記型電腦更小巧輕便。一些PDA甚至內建GPS,這使得它對於戶外機器人應用非常有趣。缺點是價格。PDA可用於娛樂,但也可以作為出色的商業工具,尤其是在配備手寫筆的情況下。

Gameboy(經典、高階、彩色和DS)可以成為非常強大的裝置。這些已被用於許多專案(請參閱Google)。唯一的缺點是構建充當聯結器的特殊PCB。

Gameboy Advance (GBA)

[編輯 | 編輯原始碼]

Gameboy Advance也是一個出色的機器人平臺。有一些完整的開源開發套件可用(基於GCC的C/C++加上ARM彙編)。還有一個不錯的套件(Charmed Labs)可用於連線樂高機器人電機/感測器,並提供比樂高RCX更多的控制。該套件擁有4MB快閃記憶體和幾百KB RAM,潛力巨大。但是,該套件並不真正適合完全初學者,因為設定GNU工具可能非常複雜,儘管開發環境因此非常豐富。

有關編寫Game Boy Advance軟體的技巧,請參閱GBA開發

可程式設計邏輯控制器

[編輯 | 編輯原始碼]

可程式設計邏輯控制器(PLC)是專用的工業計算機,旨在易於與電路介面。大多數PLC是可擴充套件的,但也有一些緊湊的“一體化”解決方案。它們具有出色的位操作功能,以及用於多種特殊訊號的附加卡,如高速計數器、模擬I/O、網路和現場匯流排(RS-232、RS422、RS-485、乙太網、DeviceNet、Profibus等)、脈衝輸出、伺服控制等。越來越多的特殊輸入包含在PLC CPU單元中。PLC傳統上用於控制自動化工廠,每個PLC可能控制多臺機器。它們通常使用專用程式語言,最常見的是梯形圖或SFC。

PLC的大小從大約5x5x5釐米不等(也有一種PLC IC可用,但出於本書的目的,我們選擇忽略這一事實)。最小的PLC功能非常有限,只有幾個I/O和非常有限的記憶體,以及在資料處理和計算方面非常有限的指令集。如果你有豐富的電氣系統經驗,但對設計和焊接PCB以及程式設計計算機感到畏懼(即,你是電工),那麼PLC尤其適合你。它們在具有許多專用感測器和輸出的非常大型系統中也表現出色,因為通常會有製造商提供的標準解決方案可用。

PLC的缺點是價格——它們可能相當昂貴,通常至少比微控制器高一個數量級。它們也比微控制器消耗更多電流,但比計算機少。另一方面,與計算機相比,它們的計算能力較弱。它們不適合進行繁重的訊號處理工作。

PLC最適合大型機器人,但也適用於中型專案。

通常會同時使用電腦/筆記型電腦/PDA和(一個或多個)微控制器,因為這兩種裝置可以互補各自的侷限性。例如,電腦/筆記型電腦/PDA具有大容量記憶體和強大的處理能力的優勢,但缺乏在機器人領域非常實用的特定輸出,比如PWM。微控制器通常具有獨立於微控制器其餘部分執行的PWM通道,但其處理速度和記憶體有限。
將這兩種裝置連線起來可以獲得兩全其美的好處。

程式語言

[編輯 | 編輯原始碼]

頁面討論了一些可用的程式語言,並提供了下載這些語言編譯器的連結。

選擇哪種語言?

[編輯 | 編輯原始碼]

語言的選擇取決於以下幾點

  • 之前的經驗。如果您已經熟悉某種特定的程式語言,您可能希望使用該語言來程式設計您的機器人。
  • 您打算投入多少時間和精力。並非每種語言都同樣易於使用。語言的大部分複雜性來自於允許更多底層訪問。基本上,語言賦予使用者越多的控制權,使用起來就越困難,但也越強大。理論上,組合語言允許程式設計師編寫速度最快、程式碼最小的程式。然而,這僅適用於經驗豐富的程式設計師。現代編譯器可以生成接近手工編寫的彙編程式碼的程式碼。在大多數情況下,使用匯編語言會不必要地使程式複雜化,除非在C或Basic程式中使用內聯彙編。通常,這些程式碼只有幾行,直接與記憶體互動,或者必須在已知的時間內執行。對於大多數(如果不是全部)專案,Basic或C等語言就足夠了。只有當您打算將微控制器或PC推至其效能極限時,才值得花費精力編寫彙編程式碼。
  • 您的目標。如果您想要一個簡單的機器人,根本不需要彙編程式碼。使用現代微控制器,您可以輕鬆編寫粗略的Basic程式碼,並仍然擁有足夠的速度和記憶體。如果您打算構建一個具有幾十個感測器、影像識別和語音識別功能的尖端機器人,您將需要編寫完美的程式碼,並且需要為某些元件使用匯編語言才能獲得足夠的速度,並能夠將程式碼放入微控制器有限的記憶體中。大多數專案都介於這兩個極端之間,編寫良好的Basic或C程式碼綽綽有餘。瞭解(一些)組合語言非常有用,因為它可以幫助您瞭解處理器的運作方式。這些見解使您成為一名更好的程式設計師。
  • 可用性。並非所有語言都適用於所有微控制器。Urbi是開源的,C和Basic以及Forth很常見,通常作為免費軟體提供,其他語言可能以商業方式提供,或者根本不可用。

編寫您的軟體

[編輯 | 編輯原始碼]

本節並非旨在教授程式設計基礎知識,而僅涉及大多數程式設計教程和初學者書籍中未涉及的要點。

  • 風格。“風格”是指您如何縮排程式碼行,以及如何選擇變數和函式名稱。選擇一種風格並在整個程式中堅持使用它。特別是對於函式和變數,您應該確定何時使用大寫字母、下劃線以及何時將單詞連線在一起。在所有地方都這樣做可以更容易地避免拼寫錯誤。
  • 使用有意義的名稱。函式、過程和變數應該具有有意義的名稱。它們的用途應該很清楚。
  • 編碼前進行計劃。在軟體開發中,在編碼之前有兩個重要的步驟:需求分析和軟體架構。第一步是確定程式預期執行的操作、預期輸入、應生成的輸出以及其環境的限制是什麼。後者涉及確定程式的結構方式、使用哪些資料型別、使用哪些演算法、輸入如何進入程式以及如何確保其有效性以及如何格式化輸出。使用這些步驟的簡化版本將使編寫體面的程式變得容易得多。如果您打算構建一個更復雜的機器人,您將需要投入更多時間來規劃您的軟體。首先寫下所有軟體需求。然後選擇一些最關鍵的需求並對其進行細化。首先實現這些需求。在完成這些需求後(包括對其進行徹底測試),選擇一組新的需求並對其進行細化和實現。透過分步進行,您可以避免一開始就必須寫下所有內容(並做出許多假設),並能夠利用透過編碼部分內容獲得的見解。
  • 使用PDL(程式開發語言)PDL是一種編寫函式的方法。它涉及用簡單的英語寫下函式的各個步驟,而不涉及特定於語言的內容,然後將這些步驟細化為更小的步驟,直到編寫程式碼比進一步拆分步驟更容易。之後將PDL行保留為註釋。
  • 模擬和除錯學習使用模擬器。在模擬器中查詢錯誤比在硬體中更容易。還要學習使用偵錯程式。它是您查詢錯誤的最佳幫手。
  • 如果您的軟體在PC上執行,日誌檔案可能很有用。但是要謹慎選擇軟體記錄的內容。如果您打算長時間執行軟體,這些日誌檔案可能會變得非常龐大。如果您想記錄一段時間內的感測器資料,請注意,可以透過在資料之間新增空格以分隔列,並在換行符之間新增換行符以分隔行,將這些資料匯入Excel。參見 w:逗號分隔值

進一步閱讀

[編輯 | 編輯原始碼]
  • Khepera III 工具箱:一本華夏公益教科書,其中包含有關如何程式設計特定機器人的詳細資訊
  • Urbiforge:一個提供Urbiscript程式設計教程的網站
華夏公益教科書