時間 , 速度 及 角度

今天晚上回家忙完手上的工作後 , 再繼續着手 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
}

廣告
  1. iRobot
    十一月 21, 2007 at 2:55 下午

    你做得好仔細啊!! 這真是一件艱鉅的工作。因為若以後機械人的負重增加,這些數據可能又要重做一次的。如果能夠實時監察伺服機真正轉動了的角度便好了。要加油啊!!

  2. BloodKeith
    十一月 21, 2007 at 3:20 下午

    其實現在的主板是可以 support 到實時監察的 , 但要再加上其他措施會另程式及機件負荷增加 , 未來可能會做 , 但不會在 TK01 身上出現 , 現在首先是要另 TK01 可以行得 , 再做其他野先至係上策 。

  3. iRobot
    十一月 22, 2007 at 2:22 上午

    對! 要做實時監察要加入很多接線,想著便頭痛了。

  4. BloodKeith
    十一月 22, 2007 at 11:19 上午

    接線頭痛係一件事 , 但如果會帶來反郊果 , 倒不如唔做好過。

  1. No trackbacks yet.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: