Skip to content

EncoderWalker

KennHuang edited this page Feb 7, 2020 · 8 revisions

這個類別使用Encoder控制機器人走特定長度的路徑

Package org.team6083.lib.auto

建立EncoderWalker物件

EncoderWalker 需要左、右側的Encoder計算機器人行走距離。

建構式 EncoderWalker(Encoder left, Encoder right, EncoderWalker.Mode mode)

控制模式

EncoderWalker 有以下幾種控制模式

  • LeftOnly 只使用左側Encoder
  • RightOnly 只使用右側Encoder
  • Average 使用兩側Encoder,並且將讀數平均
  • Both 使用兩側Encoder,兩側都要達到目標值
Encoder leftEnc = new Encoder(0,1);
Encoder rightEnc = new Encoder(2,3);
// define two encoder

EncoderWalker encWalker = new EncoderWalker(leftEnc, rightEnc, EncoderWalker.Mode.Average);

Note: EncoderWalker是使用 Encoder.getDistance() 取得目前距離,所以需要先設定好Encoder的 distance per pulse EncoderWalker才會正確判斷距離。

distance per pulse 說明請參考 Setting Encoder Parameters 段落: https://docs.wpilib.org/en/latest/docs/software/sensors/encoders-software.html#configuring-encoder-parameters

使用Encoder走指定距離

使用 walk​(double targetDistance) 計算要輸出的速度(必須不斷的call這個method才能持續更新速度)

encWalker.walk(10);
// this have to be called periodically 

計算完後,用 getLeftSpeed()getRightSpeed() 取得左、右的輸出值。

double leftSpeed = encWalker.getLeftSpeed();
double rightSpeed = encWalker.getRightSpeed();

// set the output speed to the drive system
m_left.set(leftSpeed);
m_right.set(rightSpeed);

在走完之後,Encoder會輸出0,此時需要手動重設Encoder以及EncoderWalker,才可以繼續使用。

重設EncoderWalker

Note: EncoderWalker不會自動重設Encoder,所以在重設EncoderWalker前需要先重設Encoder。

leftEnc.reset();
rightEnc.reset();
encWalker.reset();

設定行走速度

EncoderWalker會以一個固定的速度輸出,可以透過 setWalkSpeed​(double walkSpeed) 設定行走速度。 (預設的行走速度是0.4)

encWalker.setWalkSpeed(0.7);
Clone this wiki locally