彙整

Posts Tagged ‘Robot TK01’

The interview from Feed your Brain

16 八月, 2015 發表留言

如果 TK01 是巨型機械人

23 十二月, 2007 4 留言

塑膠成形

18 十二月, 2007 2 留言
 

在進行了單腳站立的特訓之後,發覺 TK01
在身體的平衡上出現了一個行嚴重的錯誤,就是左右不平衡了。相信原因有多個,第一當然是身體的重量了,因為之前 TK01
並未完成減磅,全身都依然很重,另外相比頭部及身體,頭部重量已差不多是一半重量,故此會捨棄這個好不容易做出來的頭部,第日有時間再諗過個頭,


另外一個導致不平衡的原因,應該是做腳部鋁件的過程中有偏差,雖然睇落好似平衡,但實制上唔係,所以已將所有腳部鋁件析散,由頭開始左右 check 多一次,

而最後就係插線的地方大多在身體左邊,另身體重量大多歸向左邊了。

   
   


見到膠面嗎?
 

而今晚見有時間,用左來試塑膠成形,做出來的
件雖然軟,但勝在輕,可以用在不受力的位置。

TK01 單腳站立

14 十二月, 2007 5 留言

動作修正

30 十一月, 2007 2 留言
經過左昨天換 Servo 及重新修正動作後 Shift Function 已經比之前更完美,
點解呢,因為修正之後無之前踎得咁低,同在 Shift 左右的時候加入扭腰動作,
令重心偏移無咁失重,同動作睇出來垂直好多,無之前好似肚痛咁,及最主要
已經換左有問題的 Servo,令反應好左好多,要塭日析開晒 D Servo 加油了。
睇唔清楚? 唔緊要,今次特別用 Video Editor 做左分割畫面,以下片段左面是新動作,
右面是做了慢鏡的舊動作,可以清楚見到右腳膝頭對上隻 Servo 特別反應慢,因為之
前比 D 乾油啜住左,

 ( 影片高解像儲存 )

下次 Program 單腳站立先。

 

Servo MG995 維修報告

29 十一月, 2007 發表留言

 
Photo1  Photo 2

 


Photo3  Photo 4

正當為 TK01 進行更完美的左右 Shift 及單腳站立 Program 時,發覺機體其中有三隻 Servo 反應特別遲,檢查過 Program 及主板一定無出錯,於是決定再換 Servo,好彩仲有上次在大陸買的後備 MG995,先將其中兩隻及新的做比較 ( Photo 1 – 4 ),發覺齒輪組亁晒油,相信原因係無油另到 Servo 啜啜地了,而且其中一隻 ( Photo 3 ) 更加有膠件爆烈情況出現,下次出去要買番 D 雪油了。


 


Photo 5 
Photo 6

而乾了的油摸落手的感覺好似泥一樣,就好似 Photo 6 右手邊上面的油咁,而好彩上次有三隻燒了 Driver 的 Servo,於是將乾了油的 Driver 換到之前燒了的 Servo 上,點知換好着機之後 Servo 即燒,由此可以更確定 Servo 燒的原因是在於 Motor 或 VR,其中一件零件有問題,另 Servo Driver 燒毁。所以另外隻 Servo 立即換齒輪組,好彩有上次燒了的 Servo 齒輪組無乾油。


 
Photo7 
 
 
Photo8  Photo 9

而第三隻 Servo ( Photo 8 ) 出現的問題更嚴重,除左亁油外,膠面蓋的軸心孔更加出現變形現像,所以第三隻 Servo 除了換齒輪組外,更加要換膠面蓋,好彩有上次燒了的 Servo 齒輪組無乾油及膠面蓋。

 

所以 Servo 懷左唔好掉呀。

 

最後 Photo 9 皇派死 Servo 軍團登場。

 

另外左面的是 Hitachi 新研制的 EMIEW 2 二輪變型二足機械人,詳細資料

 

動作串連

23 十一月, 2007 2 留言
TK01 上次做好左一個動作 , 當然亦會繼續做更多動作啦 ,
今次是踎低左之後加入 Shift Right 及 Shift Left 最後企番起身 ,
今次唔講咁多啦 , 自己睇片啦 ( 影片一儲存 ) ( 影片二儲存 )

時間 , 速度 及 角度

20 十一月, 2007 4 留言
今天晚上回家忙完手上的工作後 , 再繼續着手 TK01的速度、角度及角度變化的關連問題 , 得出來的結果令我滿意 , 以下是結果 : 
以踎低起身正在用的角度及速度為例子  以 Timer 量度的時間數據 
Servo  Servo  Location  rotate  Location 
Status  Number  Store  degree  Store 
    站立    踎低 
no change  0  95    95 
decrease  1  89  22  67 
no change  2  97    97 
increase  3  90  16  106 
decrease  4  90  56  34 
decrease  5  136  72  64 
no change  6  80    80 
no change  7  93    92 
no change  14  96    96 
no change  15  98    98 
increase  16  43  72  115 
increase  17  89  56  145 
decrease  18  90  16  74 
no change  19  90    90 
increase  20  91  22  113
TowerPro 
speed 0 用 0.39 秒 行 154度 , 
speed 5 用 1.40 秒 行 154度 , 
speed 4 用 1.76 秒 行 154度 , 
speed 3 用 2.35 秒 行 154度 , 
speed 2 用 3.54 秒 行 154度 , 
speed 1 用 7.10 秒 行 154度 ,

對比以上資料 , 將用 Timer 的資料 ( 角度除時間 ) 或 ( 時間除角度 ), 得出以下結果 :

TowerPro     
speed 0 用 0.39 秒 行 154度 ,  394d/s  0.0025s/d 
speed 5 用 1.40 秒 行 154度 ,  110d/s  0.0090s/d 
speed 4 用 1.76 秒 行 154度 ,  88d/s  0.0114s/d 
speed 3 用 2.35 秒 行 154度 ,  66d/s  0.0152s/d 
speed 2 用 3.54 秒 行 154度 ,  44d/s  0.0229s/d 
speed 1 用 7.10 秒 行 154度 ,  22d/s  0.0461s/d
例如 :  

如果用 speed 1 計算 ,

TowerPro 每秒可前進 21.69…….. 度 ( 角度除時間 ) D/S , 即大概為 22度 ,

而 speed 1 每 0.0461…… 度需要 0.1秒 ( 時間除角度 ) ,

假設現在只知道現在 speed 1 每 0.0461度需要 0.1秒 , 現在要前進 22 度 , 求 22 度總共需要時間 , 算式為 ( 0.0461 x 22 = 1.0142 ) 即大概為 1 秒 , 跟上表計出來結果相若 。

 

但如何知道用在機體需要用什麽速度呢 ?

只要知道每個 Servo 轉動了多小角度便可以了 , 例如 16 , 17 , 18 及 20 號 Servo , 首先 18 號 servo 轉動角度是最小的只有 16 度 , 故此要用最慢的速度 speed 1 , 而 18 號 servo 若轉動完 16 度所需要時間為 0.0461 x 16 = 0.7376 秒 , 所以其他 3 隻 servo 要遷就返 servo 18 的時間 ,

 

例如 servo 20 所轉動角度,

如果用 speed 1 ,

0.0461 x 22 = 1.0142 , 跟 servo 16 時間相差 1.0142 – 0.7376 = 0.2766

如果用 speed 2,

0.0229 x 22 = 0.5038 , 跟 servo 16 時間相差 0.7376 – 0.5038 = 0.2338

所以 servo 20 應以 speed 2 為準 ,

 

如此再計出其餘 servo 的轉動時間 , 就正正跟我現在程式內的速度一樣 , 當然以上只是很間單的加減乘除數 , 並非精密數學 , 但如果都係用同一個 servo controller 的可作參考用途 , 因為不同的 servo controller 或 servo 應會產生不同的速度的。

 

另一方面 , 在 Program 時 , 找了很久也找不到 Loop 以下如何 reset servo 的速度 ,

P.S. Dr. Victor 請看看有沒有錯的地方 , Thanks again . 你幾時得閑幫我補習 Program 呢 ?

 

#define Head 0

main()
{
int i;

sys(0, 1); // select COM port 1
setcomm(9600);
delay(2000);

for(i=0; i<=0; i++) set_servo_speed(i, 0);
for(i=1; i<=1; i++) set_servo_speed(i, 2);
for(i=2; i<=2; i++) set_servo_speed(i, 0);
for(i=3; i<=3; i++) set_servo_speed(i, 1);
for(i=4; i<=4; i++) set_servo_speed(i, 4);
for(i=5; i<=5; i++) set_servo_speed(i, 5);
for(i=6; i<=6; i++) set_servo_speed(i, 0);
for(i=7; i<=7; i++) set_servo_speed(i, 0);
for(i=14; i<=14; i++) set_servo_speed(i, 0);
for(i=15; i<=15; i++) set_servo_speed(i, 0);
for(i=16; i<=16; i++) set_servo_speed(i, 5);
for(i=17; i<=17; i++) set_servo_speed(i, 4);
for(i=18; i<=18; i++) set_servo_speed(i, 1);
for(i=19; i<=19; i++) set_servo_speed(i, 0);
for(i=20; i<=20; i++) set_servo_speed(i, 2);

// Store data to mem locs
stand_still(); writec(232, 252, 0); writec(232, 0, 0); delay(1000); // Loc 0
sit_full(); writec(232, 252, 0); writec(232, 10, 0); delay(1000); // Loc 10

// retrieve data from mem locs
loop {
writec(232, 250, 0); set_servo_speed(0, 1); delay(2000);         <——– 這一句有沒有錯
writec(232, 253, 0); writec(232, 0, 0); delay(1000); toggle(5); // Loc 0
writec(232, 253, 0); writec(232, 10, 0); delay(1000); toggle(5);toggle(3); // Loc 10
writec(232, Head, 50); writec(232, 39, 50); delay(1000); // Servo 0
writec(232, Head, 50); writec(232, 151, 50); delay(1000); // Servo 0
writec(232, 250, 0); set_servo_speed(0, 5);                            <——– 這一句有沒有錯
writec(232, 14, 50); writec(232, 73, 50); delay(1000); // Servo 14
writec(232, 14, 50); writec(232, 111, 50); delay(1000); // Servo 14
writec(232, Head, 50); writec(232, 39, 50); delay(1000); // Servo 0
writec(232, Head, 50); writec(232, 151, 50); delay(1000); // Servo 0
writec(232, 253, 0); writec(232, 0, 0); delay(3000); toggle(5); // Loc 0
writec(232, 7, 50); writec(232, 135, 50); delay(1000); // Servo 7
writec(232, 7, 50); writec(232, 92, 50); delay(1000); // Servo 7
writec(232, 7, 50); writec(232, 48, 50); delay(1000); // Servo 7
writec(232, 7, 50); writec(232, 92, 50); delay(3000); // Servo 7
toggle(3);
}
}

set_servo_speed(svr, spd)
{
writec(232, 250, 0);
writec(232, svr, 0);
writec(232, spd, 0);
}
stand_still()
{

writec(232, Head, 50); writec(232, 95, 50); // Servo 0
writec(232, 1, 50); writec(232, 89, 50); // Servo 1
writec(232, 2, 50); writec(232, 97, 50); // Servo 2
writec(232, 3, 25); writec(232, 90, 50); // Servo 3
writec(232, 4, 50); writec(232, 90, 50); // Servo 4
writec(232, 5, 50); writec(232, 136, 50); // Servo 5
writec(232, 6, 50); writec(232, 80, 50); // Servo 6
writec(232, 7, 50); writec(232, 92, 50); // Servo 7
writec(232, 14, 50); writec(232, 96, 50); // Servo 14
writec(232, 15, 50); writec(232, 98, 50); // Servo 15
writec(232, 16, 50); writec(232, 43, 50); // Servo 16
writec(232, 17, 50); writec(232, 89, 50); // Servo 17
writec(232, 18, 50); writec(232, 90, 50); // Servo 18
writec(232, 19, 50); writec(232, 90, 50); // Servo 19
writec(232, 20, 50); writec(232, 91, 50); // Servo 20
}
sit_full()
{

writec(232, Head, 50); writec(232, 95, 50); // Servo 0
writec(232, 1, 50); writec(232, 67, 50); // Servo 1
writec(232, 2, 50); writec(232, 97, 50); // Servo 2
writec(232, 3, 50); writec(232, 106, 50); // Servo 3
writec(232, 4, 50); writec(232, 34, 50); // Servo 4
writec(232, 5, 50); writec(232, 64, 50); // Servo 5
writec(232, 6, 50); writec(232, 80, 50); // Servo 6
writec(232, 7, 50); writec(232, 92, 50); // Servo 7
writec(232, 14, 50); writec(232, 96, 50); // Servo 14
writec(232, 15, 50); writec(232, 98, 50); // Servo 15
writec(232, 16, 50); writec(232, 115, 50); // Servo 16
writec(232, 17, 50); writec(232, 145, 50); // Servo 17
writec(232, 18, 50); writec(232, 74, 50); // Servo 18
writec(232, 19, 50); writec(232, 90, 50); // Servo 19
writec(232, 20, 50); writec(232, 113, 50); // Servo 20
}

速度的影響,重量

18 十一月, 2007 發表留言
前雨次講到量度了 TK01 Servo 的速度 , 現在就用回踎底的動作証明量度了度速後 , 是否可以剩係比兩個角度加速度完成動作 ,
答案係得的 , 以下是片段 ,
雖然動作跟之前的是一樣 , 但現在所用的 program 比之前細 , 因為在站立及踎底之間己經冇任何間隔 ,
亦即是用起點到終點都沒有其他角度插入中間位置 , 但係要留意一點 , 就是 loading 的問題 , 量度 servo 的時侯 ,
是因為沒有 loading ( 重量 ) 的 , 但在加入機體之後 loading ( 重量 ) 會改變速度 , 例如由站立到踎底的時候 ,
大腿位置的 servo 會加快 , 但由踎底到站立的時候 , 大腿位置的 servo 會減慢 , 因為有地心吸力啊 ,
所以唔好以為量好速度後就咁 set 左速度一定得 , 仲要留意實際有 loading ( 重量 ) 時的速度 ,
最後以下片段是黑夜版踎底及起身的動作 ,

片段2 高解像儲存

Servo Speed Test

31 十月, 2007 2 留言

上次講到現在正進行 Servo 速度的量度 , 得出以下結果 ,以 23度至 177度計算 , 共行 154度 ,

speed 0 用 0.7 秒 行 154度 ,

speed 5 用 1.6 秒 行 154度 ,

speed 4 用 2.2 秒 行 154度 ,

speed 3 用 3.0 秒 行 154度 ,

speed 2 用 4.0 秒 行 154度 ,

speed 1 用 7.4 秒 行 154度 ,

但係因為上次是用手提電話內的計時器進行量度 ( 影片一 ) ,

所以應該是唔準的 ,而今次買了一個時間制回來進行測試 ( 影片二 )  , 得出以下結果 :

 

TowerPro MG995 , 由 23度至 177度 , 共 154度

speed 0 用 0.39 秒 行 154度 ,

speed 5 用 1.40 秒 行 154度 ,

speed 4 用 1.76 秒 行 154度 ,

speed 3 用 2.35 秒 行 154度 ,

speed 2 用 3.54 秒 行 154度 ,

speed 1 用 7.10 秒 行 154度 ,

 

Futaba S3003 , 由 6度至 158度 , 共 152度

speed 0 用 0.38 秒 行 152度 ,

speed 5 用 1.39 秒 行 152度 ,

speed 4 用 1.74 秒 行 152度 ,

speed 3 用 2.30 秒 行 152度 ,

speed 2 用 3.47 秒 行 152度 ,

speed 1 用 6.95 秒 行 152度 ,

 

BlueBird BMS-630MG , 由 14度至 144度 , 共 130度

speed 0 用 0.50 秒 行 130度 ,

speed 5 用 1.31 秒 行 130度 ,

speed 4 用 1.60 秒 行 130度 ,

speed 3 用 2.07 秒 行 130度 ,

speed 2 用 3.07 秒 行 130度 ,

speed 1 用 6.01 秒 行 130度 ,

 

SANY0007
影片一  影片二