六轴机械臂DIY(三)开源项目介绍
就這樣一年半了,項(xiàng)目斷斷續(xù)續(xù)仍在進(jìn)行,期間我混了個(gè)畢業(yè),相信大家也經(jīng)歷了很多吧。最近上海疫情,畢業(yè)后的我哪里也去不了,只能在寢室等學(xué)校的投喂,那么正好,讓我們項(xiàng)目繼續(xù)。
本節(jié)主要完整介紹這個(gè)機(jī)械臂的開(kāi)源項(xiàng)目,首先介紹該項(xiàng)目的整體概述,之后介紹機(jī)械臂的硬件連接,最后帶大家初步過(guò)一遍項(xiàng)目下位機(jī)的代碼,并能夠?qū)?xiàng)目如何部署有一個(gè)大致的印象。
一. 項(xiàng)目概述
1.1 背景介紹
本項(xiàng)目是一個(gè)開(kāi)源的六軸機(jī)械臂項(xiàng)目,項(xiàng)目名稱為 arduino-sainsmart。sainsmart是一個(gè)美國(guó)創(chuàng)客品牌,公司的官網(wǎng)地址為
https://www.sainsmart.com/
他們公司主要業(yè)務(wù)為開(kāi)源硬件設(shè)計(jì)和創(chuàng)客社群運(yùn)營(yíng),所以本項(xiàng)目是他們研發(fā)的產(chǎn)品,但是從公司的產(chǎn)品頁(yè)面可以看到本項(xiàng)目已經(jīng)不在繼續(xù),產(chǎn)品頁(yè)面地址為
https://www.sainsmart.com/products/6-axis-desktop-robotic-arm-assembled
不過(guò)這并不阻礙我們自己動(dòng)手搭建一個(gè)性價(jià)比極高的機(jī)械臂。
1.2 項(xiàng)目獲取
感謝sainsmart公司將該款機(jī)械臂的控制系統(tǒng)的下位機(jī)代碼開(kāi)源到了github,讓我們能夠獲取。github項(xiàng)目地址為
https://github.com/wedesoft/arduino-sainsmart
由于國(guó)內(nèi)訪問(wèn)的不穩(wěn)定性,我們也可以從國(guó)內(nèi)鏡像網(wǎng)站gitcode上獲得,網(wǎng)站為
https://gitcode.net/mirrors/wedesoft/arduino-sainsmart
熟悉git操作的可以直接使用git clone ,不熟悉git的朋友可以直接在克隆按鈕的下來(lái)框中選擇zip下載。項(xiàng)目介紹都是英文,有點(diǎn)頭疼。不要怕,接下來(lái)我們一起過(guò)一下。
總之完成下載并解壓后你會(huì)得到一個(gè)叫arduino-sainsmart項(xiàng)目文件夾,文件夾中結(jié)構(gòu)為
arduino-sainsmart ├── arduino │ ├── Makefile │ └── sainsmart.ino ├── etc │ └── dem ├── spec │ └── .rb ├── controllerbase.hh ├── path.hh ├── profile.hh ├── calibration.hh.default ├── README.md ├── TODO.md ├── 一些介紹圖片 └── 5個(gè).rb文件,可以不管項(xiàng)目文件中包含了5個(gè)C++文件(.hh),5個(gè)ruby文件(.rb),1個(gè)arduino文件(.ino)和許多介紹圖片(.jpg),通過(guò)圖片我們可以對(duì)項(xiàng)目有一個(gè)大致的了解,README.md文件中包含了項(xiàng)目的描述以及后續(xù)需要發(fā)送的串口指令。
項(xiàng)目整體使用arduino調(diào)用C++文件的形式,所有的ruby文件都用于使用xbox控制機(jī)械臂,但我沒(méi)有xbox,所以并不打算使用這一功能,因此暫時(shí)可以不看ruby文件。
二. 硬件連接
2.1 硬件元件介紹
打開(kāi)項(xiàng)目文件夾掃一遍圖片就可以看到本項(xiàng)目的機(jī)械外觀和硬件元件,這些也可以參考本系列的前兩篇文章,這里默認(rèn)大家1.已經(jīng)在心中有了機(jī)械臂的模型,2.已經(jīng)購(gòu)買了所需要的電氣元件。
項(xiàng)目使用的控制板為arduino UNO,這是一款熱門的diy板子,推薦購(gòu)買DFROBOT的板子,外加拓展板,共140元。拓展板插到UNO上后使用外接5V電源對(duì)拓展板進(jìn)行供電。使用串口線連接UNO和電腦進(jìn)行燒錄調(diào)試。
六軸機(jī)械臂共有六個(gè)關(guān)節(jié),加上頭部外加夾爪總共需要7個(gè)舵機(jī),也可不用夾爪總共六個(gè)舵機(jī)。1234軸使用MG995舵機(jī),56軸及外加軸使用9g舵機(jī)。舵機(jī)總共有三根導(dǎo)線,分別為橙黃線、紅線、棕線,其中棕色為接地線(重要),紅色為+5v,橙黃色為信號(hào)。
我們簡(jiǎn)單對(duì)舵機(jī)轉(zhuǎn)動(dòng)的原理進(jìn)行介紹,舵機(jī)使用PWM波控制角度,PWM波是指周期脈沖方波,其中1表示接通,0表示斷開(kāi),波形如下圖所示。PWM波由無(wú)數(shù)個(gè)周期波形組成,每個(gè)周期中包含一段高電位和一段低電位。舵機(jī)的脈沖周期為20ms,其中每一周期中的高電位時(shí)間可在0.5ms與2.5ms之間調(diào)節(jié)。如果以垂直舵機(jī)方向?yàn)?度,那么脈沖高電位時(shí)間與舵機(jī)角度的關(guān)系如下圖所示。我們控制舵機(jī)的角度其實(shí)是在控制輸入舵機(jī)PWM波脈沖中高電位所占的時(shí)間。這一部分可以參考孫老師的視頻 https://www.bilibili.com/video/BV15X4y157ay
2.2 連接示意圖
好,了解完各個(gè)元件后我們將他們連在一起,依次將舵機(jī)接在拓展板的接口上,如圖為示意圖,請(qǐng)保證棕線接在GND上,默認(rèn)
關(guān)節(jié)1(BASE)接11引腳
關(guān)節(jié)2(SHOULDER)接10引腳
關(guān)節(jié)3(ELBOW)接9引腳
關(guān)節(jié)4(ROLL)接8引腳
關(guān)節(jié)5(PITCH)接7引腳
關(guān)節(jié)6(WRIST)接6引腳
外加關(guān)節(jié)(GRIPPER)接5引腳
如果你已經(jīng)搭建好了機(jī)械結(jié)構(gòu),并連接好了所有的舵機(jī),將拓展板進(jìn)行了外接5v電源,那么恭喜你,你已經(jīng)有了一臺(tái)六軸機(jī)械臂的本體。關(guān)于系列(二)中的建模其實(shí)存在很多問(wèn)題,我決定對(duì)機(jī)械臂重新建模,重新建模后的機(jī)械臂采用3d打印件作為所有桿件,方便淘寶訂購(gòu),同時(shí)大大減少了零件的數(shù)量,機(jī)械臂的末端三軸位于同一點(diǎn),滿足機(jī)器人逆解要求。
三. 軟件燒錄及使用說(shuō)明
3.1 控制器及控制軟件
本項(xiàng)目使用的控制器為arduino UNO,相信喜歡DIY的朋友都對(duì)他十分熟悉,通過(guò)上傳固件即可實(shí)現(xiàn)對(duì)輸出IO口的控制。arduino的控制程序編寫和上傳可以使用arduino IDE,下載地址為
https://www.arduino.cc/en/software
根據(jù)上文介紹的舵機(jī)PWM波控制原理,可以知道整個(gè)控制系統(tǒng)即為將我們想要的機(jī)器人位姿轉(zhuǎn)換為6個(gè)多級(jí)對(duì)應(yīng)的PWM脈沖寬度。讓我們?cè)龠^(guò)一下項(xiàng)目文件夾中的文件
arduino-sainsmart ├── arduino │ ├── Makefile │ └── sainsmart.ino ├── etc │ └── dem ├── spec │ └── .rb ├── controllerbase.hh ├── path.hh ├── profile.hh ├── calibration.hh.default ├── README.md ├── TODO.md ├── 一些介紹圖片 └── 5個(gè).rb文件,可以不管請(qǐng)重點(diǎn)關(guān)注我們需要的文件
arduino-sainsmart ├── arduino │ └── sainsmart.ino ├── controllerbase.hh ├── path.hh ├── profile.hh ├── calibration.hh.default └── README.md簡(jiǎn)單介紹一些各個(gè)文件的功能
sainsmart.ino:arduino控制固件軟件,是一個(gè)arduino系統(tǒng)的入口
profile.hh:每個(gè)關(guān)節(jié)舵機(jī)的 速度控制類,使用S加減速曲線
path.hh:每個(gè)關(guān)節(jié)舵機(jī)的 運(yùn)動(dòng)控制類,控制舵機(jī)的轉(zhuǎn)動(dòng)
controllerbase.hh:項(xiàng)目運(yùn)動(dòng)控制基類,會(huì)在sainsmart.ino中繼承,是本項(xiàng)目的主要控制類
calibration.hh.default:項(xiàng)目設(shè)置類,包括設(shè)置各個(gè)關(guān)節(jié)多級(jí)連接控制器的端口、哥哥關(guān)節(jié)的最大最小角度、關(guān)節(jié)初始角度、關(guān)節(jié)運(yùn)動(dòng)速度等參數(shù),需要在使用前更改名字,刪去default
3.2 固件部署步驟
將calibration.hh.default更改名稱為calibration.hh
新建一個(gè)文件夾,將sainsmart.ino、calibration.hh、profile.hh、controllerbase.hh、path.hh復(fù)制到該文件夾中
由于arduino IDE串口調(diào)試最后一定會(huì)包括\n這個(gè)字符,我們需要在controllerbase.hh的輸入函數(shù)parseChar(char c)中加入一個(gè)case,10是’\n’的字符編碼,即跳過(guò)IDE默認(rèn)的尾部字符。如果你使用的串口發(fā)送器指令最后不會(huì)自動(dòng)加字符就可以不管這一條。
case 10:break;使用IDE打開(kāi)sainsmart.ino,可以看到項(xiàng)目使用的串口波特率為115200,連接控制板,編譯上傳固件
保證控制板與PC連接狀態(tài),打開(kāi)IDE 工具—串口監(jiān)視器,將右下波特率調(diào)為115200
在輸入處輸入字母o,顯示1即實(shí)現(xiàn)了部署
3.3 手動(dòng)運(yùn)動(dòng)控制
機(jī)械臂的串口控制代碼位于項(xiàng)目的README.md文件中,在開(kāi)源分享網(wǎng)站中也可以看到,這里截取部分控制指令,具體的會(huì)在本系列的第四篇文章中對(duì)項(xiàng)目軟件進(jìn)行詳細(xì)解讀
o:檢查是否準(zhǔn)備好程序
t:獲取當(dāng)前時(shí)間戳
b:獲取基軸base的舵機(jī)角度
打開(kāi)IDE的串口監(jiān)視器,發(fā)送o,返回‘1’表示軟件已準(zhǔn)備,發(fā)送其他指令可以獲得不同的效果。通過(guò)指令可以設(shè)定各個(gè)舵機(jī)的角度,可以保存設(shè)定示教點(diǎn)的位置,可以實(shí)現(xiàn)對(duì)機(jī)械臂的控制。
本文介紹了該開(kāi)源項(xiàng)目的技術(shù)細(xì)節(jié),通過(guò)背景介紹,硬件連接,軟件介紹對(duì)項(xiàng)目進(jìn)行分析,最后實(shí)現(xiàn)了串口對(duì)機(jī)器人的指令控制。到此我們就擁有了一個(gè)六軸機(jī)器人的控制器,后續(xù)只要通過(guò)上位機(jī)軟件解析機(jī)器人位姿并通過(guò)串口發(fā)送到下位機(jī)就可以讓機(jī)器人按照我們的想法運(yùn)動(dòng)。
總結(jié)
以上是生活随笔為你收集整理的六轴机械臂DIY(三)开源项目介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 单边带(SSB)调制技术
- 下一篇: 【无标题】数仓实战之亚马逊全球跨境电商分