為了要測試NumericPad 的功能,因此使用了Mindsensors 的NXTServo 伺服機控制器以及5個RC Servo製作一個具四個自由度的機械手臂,再利用 NumericPad的12個按鍵設計成操控機械手臂動作的使用者控制面板。
使用NumericPad控制面板操控機械手臂之影片:
<Video>
機械手臂機構與功能
· 前面影片中的機械手臂共包含了以下四個自由度的控制:
1. 臂部 – 使用1顆RC Servo + Turntable控制180度的左右水平旋轉
2. 肩部 – 使用2顆RC Servo控制180度的前後垂直擺動
3. 肘部 – 使用1顆RC Servo + 連桿 控制手部上下約100度的垂直擺動
4. 手部 – 使用1顆RC Servo + 連桿 控制手部的張合動作
· 以上各部共5個RC Servos使用Mindsensors NXTServo進行控制,並以L8878 PF電池作為外部電源。
另外以L8870 PF燈組透過轉接線連接NXT Output Port,作為可控制開關的探照燈。
詳如以下圖解說明:
NXTServo功能特性
如果以NXT motor來建構超過3個自由度的機構,除非使用Mindsensors的NXTMMX,會受NXT僅有3個Output port的限制,同時NXT motor實在有點大又重難免會影響機構的靈活性。
過去曾經以Mindsensors NRLink控制3個PF Motor製作3自由度的機械手臂,不過每兩個馬達就必須搭配1個IR接收器,而最大的問題在於無法掌控PF Motor的轉動位置以精確完成所需要的動作, 更談不上多自由度間運動的協調控制。
而NXTServo可操控8個RC Servo,雖然不能像NXT可讀取馬達的回饋位置,不過可以透過對RC Servo送出不同的脈衝寬度來控制它的角度位置,如:1.5 ms時為居中之0度位置,2.5 ms時往右90度,0.5 ms時往左90度等,而最大的優點在於NXTServo可同時設定不同channel 之RC Servo的角度位置與轉動速度,這提供了程式對機構的控制彈性,同時各部間的相依性協調運動也很容易透過程式來完成。
而NXTServo為NXT數位裝置的一種,因此以I2C操作方式對Input port傳送位置與速度設定值至對應channel的暫存器位址來操控RC Servo,由於每個channel都有獨立的位置與速度設定位址且位址連續,所以在符合NXT之I2C buffer長度16 Bytes的條件限制之內,可以對8個channel進行group control,這是相當有用且必備的功能。
關於NXTServo的詳細資料,可以參考其User’s Guide.
機械手臂之協調控制
臂部 – 將肩部以上機構建構在Turntable上,並以一顆RC Servo來驅動,由於是水平運動,重心的變化不大,因此動力足夠,只需考慮結構的強固。
肩部 – 因為需肩負肘部與手部的前後垂直擺動,考量承載負荷需求,因此以兩部RC Servo來驅動,由於在機構上彼此驅動方向剛好相反,所以需要維持兩部RC Servo位置設定值的和為 3 ms且速度一致才能保持同步運動。
肘部 - 為了要控制手部於工作時能夠保持所需要的姿勢,如垂直或水平,就必須同時協調肩部與肘部共同達成,如下圖,當肩部為向後45度時,則肘部之RC Servo即需驅動連桿向下45度以維持手部能夠與地面平行的姿勢。
以下則是兩者間的RC Servo位置值的相依關係圖:
手部 –抓取機構的張合動作也是使用 RC Servo驅動連桿來達成,可參考下圖:
使用者控制界面
要控制四個自由度的機械手臂再加上探照燈開關,需要一個功能完整且便利的使用端操作界面,NXT有很多輸入裝置可以用來作人機溝通,不過對於複雜的操控以目前已有的裝置而言,並不容易整合成簡潔的操作界面,因此,Mindsensors的NumericPad應該就是因應這個需求而發展出來,下圖就是應用它12個按鍵所規劃的操作面板,目的是提供使用端便利且直覺的操作體驗。
下圖即是使用Mindsensors所提供之Overlay template自行以Windows小畫家所製作之面板。
NumericPad面板規劃
依據使用者操控需求的角度,將NumericPad的12個按鍵區分成5種類型控制群組:
1. Home – 機械手臂回歸初始姿勢與狀態。
2. 方位 – 臂部三個方位的移動控制。
3. 姿勢 – 5種預設肩部與肘部組合姿勢切換。
4. 張合 – 手部的張/合控制。
5. 探照燈 – 開關切換。
操作時點按控制鍵,機械手臂即會依據按鍵所設定的對應動作運作,不過因為NumericPad可以偵測及回應多點觸控,所以在程式中也加入了這個功能,控制邏輯為:
1. Home鍵具最高執行優先順序。
2. 群組內若有多個鍵被按下,會依據設定之優先順序擇一來執行,如:方位鍵’ 姿勢鍵’ 手部張合鍵等群組。
3. 除了以上兩種條件外,即會將所有偵測到的按鍵所對應之動作同時執行。
例如:同時按住方位鍵’ 姿勢鍵’ 手部收合鍵,機械手臂就會同時完成所有的動作。
** NXC範例程式:點選此連結。
NumericPad用途與特性
NumericPad的12個按鍵雖然預先刷好話機的 Layout,但它的功能其實純粹就是回應其12個鍵的點按狀態, 事實上回應值為儲存於2個Bytes暫存器中12個bits的狀態值而不是電話按鍵值,所以完全需要依照程式的需求自行定義,也應此Mindsensors才會提供其Overlay template供使用者可以修改成符合其程式的控制功能。
基於這個特性,個人推薦NumericPad是值得擁有的NXT週邊裝置之一。
關於NumericPad的詳細資料,可參考其”User’s Guide”。
接下來期待的是在Coming Soon已經放了好幾個月的”Touch Screen Overlay For NXT”,雖然Mindsensors對它的用途說明為作為NXT Screen的觸控螢幕,同時具備相同的畫素解析度(100*64),因此,若拿來作為類似NumericPad的輸入裝置,使用彈性就更大,唯一的缺點就是稍小了點,也許需要靠觸控筆才能使用,不然的話多買一組合著一起用也是可以。
- 留言者: Yo
- Email: boxing52007@gmail.com
- 網址:
- 日期: 2013-01-27 15:09:16
您好:
去年十月來這邊請教過NXT Servo的一些問題,
我是台科機械所的志豪,
擔任系上一門課「電腦輔助機電系統設計與實習」的助教。
這們課主要使用的平台就是NXT,
在您這邊得到很多幫助,這裡是我很重要的參考來源之一,
這們課結束了,我們請了實驗室一位夥伴做成了影片,
與您分享,謝謝你的幫忙。:D
影片網址如下「 http://youtu.be/DP63KhaQD1k 」
[版主回覆01/27/2013 22:45:32]
我看過影片了, 確實是很不錯的成果.
機器人運作得很穩定, 控制的精確度也不錯,
另外, 機器人運用了許多非NXT的電子元件, 是否為Arduino family?
再加上這些元件雖然增加了硬體與軟體的複雜度,
如果能夠妥善組合, 也擴大與延伸了NXT平台的功能,
台科大同學的素質確實如外界的口碑, 很優秀
也謝謝您的分享
PS. 我也認識幾位台科大的老師, 不過比較偏向土木 :-)
- 留言者: Yo
- Email: boxing52007@gmail.com
- 網址:
- 日期: 2012-10-24 09:52:39
謝謝~ 下次po成品與你分享:D
[版主回覆10/24/2012 21:51:42]不客氣, 祝您測試成功
- 留言者: 豪哥..
- Email: boxing52007@gmail.com
- 網址:
- 日期: 2012-10-23 21:02:10
您好:
想請問使用關於NXT Servo V2的問題
因為NXT只有三個輸出想將輸出多一些,並且能空多顆RC伺服機(組機器手臂)
但是NXTServo的程式指令有些不懂
像是將"NXTServo-lib.nxc"include 後
讓伺服馬達動的指令如下
NXTServo_Quick_Servo_Setup(SensorPort, ServoAddr, i, posA);
其中不太懂脈衝寬度
要如何正確地轉伺服機到想要角度,如10度轉到150度
感謝你~
[版主回覆10/23/2012 23:00:58]
NXTServo_Quick_Servo_Setup(SensorPort, ServoAddr, i, posA);
這個函數, SensorPort - NXTServo所接的sensor port no.(S1~S4)
ServoAddr - NXTservo的I2C位址, 為 0xb0
i - 要控制哪一個 Servo port (1 ~ 8)
posA - 要讓Servo轉到的位置(值由 50 ~ 250, 50在最右邊(180度), 150在垂直位置(90度)
250在最左邊(0度), 可以依據比例計算出所要的角度
- 留言者: WW
- Email: wangamgc32@yahoo.com.tw
- 網址:
- 日期: 2011-04-06 09:38:46
您好:
超厲害,但我想問您的軟排線是自己做的還是買的,可一告訴我嗎
[版主回覆04/06/2011 22:25:58]
線材與RJ12水晶頭我是分開買, 然後再依據自己需要的長度壓線.
線材應該很容易找得到, 而NXT的RJ12接頭現在可以到台南創意林老師的露天賣場購買