階段四:C# 程式
學習 C# 程式語言與 Visual Studio IDE 軟體。
硬體
準備以下硬體:
- 通訊轉換器
- 馬達
- 電源轉接板
- 12V 電源供應器
- 2 條 3Pin 線。
▲ 由左至右分別為:12V 電源供應器、AX-12(A) 馬達、通訊轉換器、電源轉接板及 2 條 3Pin 線
將它們如下圖連接。
▲ 連接方式
確認通訊轉換器的模式,「AX / MX」系列使用「TTL」模式;「DX / RX / EX / MX」系列使用「RS-485」模式。
本例使用「AX-12(A)」馬達,因此為「TTL」模式,如果選擇錯誤則會導致後續失敗。
確認連接正確,接上電腦並確認 COM Port 後,開啟「RoboPlus」並於上方選擇「Expert」模式並點選「Dynamixel Wizard」。
▲ Dynamixel Wizard 的介面
選擇 COM Port 並點選「Start searching」尋找馬達,若成功連接即可獲取其 ID 與鮑率。
▲ 馬達的 ID 與鮑率
軟體
使用 Visual Studio IDE 來編寫 C# 程式。
Visual Studio 安裝免費的 Community 版就好。
指令封包
透過 ROBOTIS Protocol 1 封包協定達成馬達控制。
此封包必須包含以下幾項(皆為 Byte
型態):
透過第5點指令位址來判斷指令有幾位元。Goal Position 與 Moving Speed 皆為 2 Byte。
C# 指令封包範例
開啟 Visual Stduio,新增「Windows Forms App (.NET Framework)」 C# 專案。在「Form1.cs [Design]」視窗中於側邊的「ToolBox」中將「Serial Port」拖拉到畫面中,並在「Peoperties」中修改「PortName」為正確的 COM Port。
▲ 新增 Serial Port
private void ControlAX12(int id, int position, int speed)
{
// 建立資料封包。
// 官方說明:https://emanual.robotis.com/docs/en/dxl/protocol1/#instruction-packet
byte[] dataPackage = new byte[11];
dataPackage[0] = 0xFF; // 標頭1 (Header1),固定為0xFF。
dataPackage[1] = 0xFF; // 標頭2 (Header2),固定為0xFF。
dataPackage[2] = (byte)id; // 封包傳送的ID (Packet ID)。
dataPackage[3] = (byte)7; // 長度 (Length),其數值為參數位元組數量+3。
dataPackage[4] = 0x03; // 指令 (Instruction),0x03為"Write"指令。
dataPackage[5] = (byte)30; // 起始地址 (Starting address)。地址"30"對應的是"Goal Position"。
dataPackage[6] = (byte)(position & 0xFF); // "Goal Position"參數位元組1 (低8位元)。
dataPackage[7] = (byte)(position >> 8); // "Goal Position"參數位元組2 (高8位元)。
dataPackage[8] = (byte)(speed & 0xFF); // "Moving Speed"參數位元組1 (低8位元)。
dataPackage[9] = (byte)(speed >> 8); // "Moving Speed"參數位元組2 (高8位元)。
// 計算校驗和 (Checksum)。
byte a = 0;
for (int i = 2; i < 10; i++)
{
a += dataPackage[i];
}
dataPackage[10] = (byte)(0xFF - a);
try
{
serialPort.Write(dataPackage, 0, dataPackage.Length); // 傳送。
Thread.Sleep(1); // Delay 1 ms.
}
catch (Exception ex)
{
MessageBox.Show($"傳送封包時出錯。\r\n{ex.Message}",
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
完成封包後,透過 Serial Port 做傳輸。
AX-12 馬達控制範例程式
到實驗室的 GitHub 下載 AX-12 馬達控制程式。連結:nfu-irs-lab/AX12_motor_controller
從 GitHub 上下載此程式碼專案,可以用以下任一種方式:
- 在「Releases」頁面,並在最新版本(Latest)的發佈文章下點擊「Source Code (zip)」,下載最新的發佈版本程式。(推薦)
- 在主頁面上點擊「Code」,再點擊「Download ZIP」下載程式碼。
- 使用 Git Clone。
▲ 在 GitHub 上下載 AX-12 控制程式
使用 Visual Studio 來開啟「AX12_motor_controller.sln」檔案,就可以開啟範例程式專案。
驗收-4:以 C# 控制機械手臂
使用 C# 撰寫一個視窗程式,自行設計其圖形介面,並可以用來控制「驗收-2」所設計的機械手臂。
要求動作為,以圖形介面操控機械手臂及其夾爪,從「位置-A」夾取目標物(如空寶特瓶),並將其放到「位置-B」。位置 A 與 B 視情況由學長指定。
整理與收拾
當所有驗收都完成後,請將組裝的機械手臂拆解,將螺絲、馬達、電線等零件和工具物歸原處,打掃工作環境並整理乾淨。
全部都完成後告知學長並確認後,才算是正式結束新進人員訓練。