置頂文字

歡迎來訪 !! 如有任何問題歡迎一起討論或是 eMail 給我 legorunmail@Gmail.com

2015年3月22日 星期日

Lejos 重要的馬達兩輪類別 lejos.robotics.DifferentialPilot

Lejos 重要的馬達兩輪類別 lejos.robotics.DifferentialPilot;


原先是lejos.robotics.navigation.TachoPilot  但已經找不到該類別。
lejos.robotics.navigation. LegacyPilot ;  //有一段說明
The LegacyPilot class is a renamed version the TachoPilot class in the 0.85 release
目前仍可使用但不建議,因為已經快停用了(如下圖提示deprecated)。







當NXT設定左右雙輪行走模式總會發現NXT走一直線時總是會越走越偏(不是偏左就是偏右),因為我們在下達指令時都只針對單一馬達,因此就算馬達電力、角度指令完全相同也會發現NXT越走越偏。

這是因為我們沒有隨時隨地收集2顆馬達供電或是轉速資料並分析後讓NXT做出供電或是轉速修正,實際上這是個大工程但也是必要的資訊分析。

Lejos 或是  NXC 都有這類已經開發好的模組類別讓我們使用,這次就是要紀錄lejos裡面的 robotics類別。

import lejos.robotics.navigation.DifferentialPilot;

1.TachoPilot(float 輪子直徑,float 兩輪距離,Motor.A 左馬達,Motor.B 右馬達);

2.TachoPilot(float , float , Motoor.A , Motor.B ,  true/false 是否反向);

3.TachoPilot(float 左輪直徑 , float 右輪直徑 , float 兩輪距離 , Motoor.A , Motor.B ,  true/false 是否反向);


Example
TachoPilot pilot=new TachoPilot(60f , 140f , Motor.A , Motor.B);

TachoPilot常用方法

forward()
backward()
stop()
setSpeed();            //同時設定移動速度與轉彎速度
setMoveSpeed();   //只設定移動時的速度
setTurnSpeend();   //只設定轉彎時的速度

以上速度單位都是(度/秒)

//------------------------


getSpeed();
getMoveSpeed();
getTurnSpeed()


//--------------------------


travel();   //直線行走到特定距離
travel(100f) ;    //前進
travel(-100f);   //後退


rotate();   //原地迴轉某一角度


//----------------------------------------

轉彎率:
steer(float 轉彎率);    //參數: -200 ~  200

streer(200f);   //原地逆時針選轉
streer(-200f);   //原地順時針選轉

streer(100f);   //左輪停止,右輪前進
streer(-100f);   //右輪停止,左輪前進


//----------------------------

轉彎率+角度
streer(float 轉彎率,float 角度);    //轉彎到設定角度時停止

streer(0,90f);     //左右兩輪等速馬達轉到特定角度,所以直線前進

streer(25f,90f);   //左輪速度為外(右)輪的75%,左轉前進

streer(25f,-90f);   //左輪速度為外(右)輪的75%,左轉後退

streer(100f,90f);   //左輪停止,外(右)輪轉動,左轉前進

streer(-100f,90f);   //左輪停止,外(右)輪轉動,右轉前進

streer(200f,90f);   //車子原地逆時針旋轉
streer(-200f,90f);   //車子原地順時針旋轉

//--------------------------------

streer(float 轉彎率,float 度,boolean 是否立即回傳);


//-----------------------------

isMoving();   //檢查是否正在移動

reset();   /重設左右馬達角度為 0

//---------------------------------------
forward()
backward()
stop()
isMoving(); //true/false是否在運轉
setSpeed();        //同時設定移動速度與轉彎速度
setMoveSpeed();    //只設定移動時的速度
setTurnSpeend();   //只設定轉彎時的速度
reset(); //將兩輪角度值重設為0

getSpeed()
getMoveSpeed()
getTurnSpeed()

robot.travel(100f); //直線前進或後退指定距離
robot.rotate(90f);  //原地旋轉角度
robot.steer(); //轉彎率

robot.steer(0); //直線前進
robot.steer(25f); //左輪出力25%轉動、右輪出力75%轉動=向左轉
robot.steer(-25f); //右輪輪出力25%轉動、左輪出力75%轉動=向右轉

robot.steer(200f); //原地逆時針旋轉
robot.steer(-200f); //原地順時針旋轉
robot.steer(100f); //左輪停止右輪轉動=向左轉
robot.steer(-100f); //右輪停止左輪轉動=向右轉

robot.steer(25f,90f); //左輪出力25%轉動、右輪出力75%轉動=向左轉90度
robot.steer(25f,-90f); //左輪出力25%轉動、右輪出力75%轉動=向左(後)轉90度
robot.steer(100f,90f); //左輪停止轉動、右輪出力100%轉動=向左轉90度
robot.steer(-100f,90f); //右輪停止轉動、左輪出力100%轉動=向右轉90度
robot.steer(200f,90f); //原地逆時針旋轉90度
robot.steer(-200f,90f); //原地順時針旋轉90度

robot.steer(200f,90f,true); //原地逆時針旋轉90度並即刻回傳資料,如果false就是等轉完才回傳資料

沒有留言:

張貼留言