Kumanda kolları

Oyun konsolları Driver Station - Sürücü İstasyonu programları ile birlikte robotu kontrol etmek için kullanılabilmektedir. Windows tarafından ttanınan neredeyse tüm “kumandalar” kumanda kolu olarak kullanılabilmektedir. Kumanda kollarına GenericHID sınıfı kullanılarak erişilebilmektedir. Bu sınıf, önceden yapılandırılmış kumandalar ilgili üç alt sınıfa sahiptir. GenericHID’nin etki alanını genişleterek farklı kumandalar için kendi sınıflarınızı da ekleyebilirsiniz. İlk alt sınıf, standart uçuş kolları için kullanışlı Joystick sınıfıdır. İkincisi Xbox 360, Xbox One veya (XInput modundaki) Logitech F310 kumandaları için çalışan XboxController sınıfıdır. Sonuncusuysa DualShock4 kumandaları için ideal PS4Controller sınıfıdır. Kumandaların her ekseni -1 ile 1 değerleri arasındadır.

Bu sınıfları komut temelli kullanma şekli Komutları Trigger-Tetikleyicilere Bağlama bölümünde daha detaylı bir şekilde belirtilmektedir.

Driver Station Kumanda Kolları

Sol taraftaki 4. sekme USB cihazları sekmesidir.

Driver Station’un USB Cihazları Sekmesi kumanda kolunun robotta kullanımı için kurulumu ve yapılandırması için kullanılmaktadır. Kumandada bir tuşa basılması ekrandaki girişinin yeşil yanmasını sağlayacaktır. Kumandanın seçilmesi eksenlerin, tuşların ve fiziksel kumandanın özellikleri ile eksen veya tuş numaraları arasındaki eşleştirmeyi belirlemek için kullanılacak POV değerlerini gösterecektir.

USB sekmesinde, o anda neye basıldığını gösteren göstergeler yanıyor.

USB Cihazları Sekmesi ayrıca her kumandaya bir kumanda kolu indeksi atamaktadır. Kumandaları yeniden sıralamak için sadece kumandaya tıklayıp kaydırınız. Driver Station yazılımı, çalıştığı anlar dışında cihazların sırasını korumaya çalışacaktır. Cihazlarınızın ne sırada olması gerektiğini belirlemek ve Driver Station yazılımını her çalıştırdığınızda sıralamanın doğru olduğunu kontrol etmeniz iyi bir fikir olacaktır.

Driver Station kapalı konumdayken düzenli aralıklarla kumanda kolu cihazlarındaki durum değişikliklerini aramaktadır. Fişlerinden çıkarılmış cihazlar listeden kaldırılmakta ve yeni cihazlar onların yerine açılmakta ve eklenmektedir. FMS’e bağlı değilken bir kumanda kolunun fişinden çıkarılması Driver Station’ı kapalı konuma getirecektir. Kumandayı. tekrar kullanmak için, kumandanın fişini takınız, olması gerektiği yerde göründüğünü kontrol ediniz ve sonrasında robotu tekrardan etkinleştiriniz. Driver Station etkin konumdayken yeni bir cihaz aramayacaktır. Bu zaman alıcı bir süreçtir ve bağlı cihazlardan gelen sinyallerin zamanlı güncellemeleri önceliklidir.

Not

Bazı kumandalar için başlangıç rutini kumandanın o anki durumunu varsayılan orta konum şeklinde okuyacaktır, bu sebeple bilgisayar açıkken (veya kumandalar bilgisayara bağlanmışken) kumanda kolunun istediğiniz orta konumda olması gerekmektedir.

Robot, müsabaka sırasında Sha Yönetimi Sistemine bağlıyken Driver Station modu FMS tarafından yönetilmektedir. Diğer bir deyişle ne siz robotunuzu devre dışı bırakabilirsiniz ne de Driver Station kumandadaki değişiklikleri algılamak için kendisini devre dışı bırakabilir. Elle yapılacak tam bir kumanda yenilemesi, klavyedeki F1 tuşuna basarak gerçekleştirilebilmektedir. Bu işlemin tüm cihazları kapatıp yeniden açacağını, bu yüzden tüm cihazların yukarıda bahsi geçen orta konumda olması gerektiğiniz unutmayınız.

Joystick Sınıfı

Eksen değerleri ve tuşları açıklanan bir Logitech uçuş kolu.
Joystick exampleJoystick = new Joystick(0); // 0 is the USB Port to be used as indicated on the Driver Station
Joystick exampleJoystick{0}; // 0 is the USB Port to be used as indicated on the Driver Station
exampleJoystick = wpilib.Joystick(0) # 0 is the USB Port to be used as indicated on the Driver Station

Joystick sınıfı, uçuş kolunun kullanımını ve robotun yönetimini kayda değer bir şekilde kolaylaştırmak için tasarlanmıştır. Uçuş koluna göre kullanıcının uçuş kolunuzun kullandığı özel X, Y, Z ve Throttle - Gaz kanalları belirlemesi gerekebilmektedir. Bu sınıf uçuş kanalının açısı ve şiddetine erişimi sağlayan özel metodlar sunmaktadır

Önemli

Koordinat sistemindeki farklar sebebiyle takımlar kumanda kolu eksenlerini okurken genellikle değerlerin olumsuzlarını almaktadır. Daha fazla bilgi için bkz. Joystick and controller coordinate system.

XboxController Sınıfı

Orijinal Xbox Kumandası
XboxController exampleXbox = new XboxController(0); // 0 is the USB Port to be used as indicated on the Driver Station
XboxController exampleXbox{0}; // 0 is the USB Port to be used as indicated on the Driver Station
exampleXbox = wpilib.XboxController(0) # 0 is the USB Port to be used as indicated on the Driver Station

The XboxController class provides named methods (e.g. getXButton, getXButtonPressed, getXButtonReleased) for each of the buttons, and the indices can be accessed with XboxController.Button.kX.value. The rumble feature of the controller can be controlled by using XboxController.setRumble(GenericHID.RumbleType.kRightRumble, value). Many users do a split stick arcade drive that uses the left stick for just forwards / backwards and the right stick for left / right turning.

Önemli

Koordinat sistemindeki farklar sebebiyle takımlar kumanda kolu eksenlerini okurken genellikle değerlerin olumsuzlarını almaktadır. Daha fazla bilgi için bkz. Joystick and controller coordinate system.

PS4Controller Sınıfı

PlayStation 4, DualShock 4, kumandası.
PS4Controller examplePS4 = new PS4Controller(0); // 0 is the USB Port to be used as indicated on the Driver Station
PS4Controller examplePS4{0}; // 0 is the USB Port to be used as indicated on the Driver Station
examplePS4 = wpilib.PS4Controller(0) # 0 is the USB Port to be used as indicated on the Driver Station

The PS4Controller class provides named methods (e.g. getSquareButton, getSquareButtonPressed, getSquareButtonReleased) for each of the buttons, and the indices can be accessed with PS4Controller.Button.kSquare.value. The rumble feature of the controller can be controlled by using PS4Controller.setRumble(GenericHID.RumbleType.kRightRumble, value).

Önemli

Koordinat sistemindeki farklar sebebiyle takımlar kumanda kolu eksenlerini okurken genellikle değerlerin olumsuzlarını almaktadır. Daha fazla bilgi için bkz. Joystick and controller coordinate system.

POV

0 en yukarda ve diğer açıların saat yönünde devam ettiği, POV/D-pad'in kodu tarafından kullanılan açılar.

On joysticks, the POV is a directional hat that can select one of 8 different angles or read -1 for unpressed. The XboxController/PS4Controller D-pad works the same as a POV. Be careful when using a POV with exact angle requirements as it is hard for the user to ensure they select exactly the angle desired.

GenericHID Kullanımı

Bir eksen (yukardaki sınıflardan herhangi biri kullanılmıyorsa) anlık değeri tekrarlayan .getRawAxis(int index) ile kullanılabilmektedir. Bu örnekte sıfır ve bir yukarıda bahsi geçen Driver Station’da bulunan eksenlerden her birinin bir indeksidir.

private final PWMSparkMax m_leftMotor = new PWMSparkMax(Constants.kLeftMotorPort);
private final PWMSparkMax m_rightMotor = new PWMSparkMax(Constants.kRightMotorPort);
private final DifferentialDrive m_robotDrive = new DifferentialDrive(m_leftMotor::set, m_rightMotor::set);
private final GenericHID m_stick = new GenericHID(Constants.kJoystickPort);
m_robotDrive.arcadeDrive(-m_stick.getRawAxis(0), m_stick.getRawAxis(1));
frc::PWMVictorSPX m_leftMotor{Constants::kLeftMotorPort};
frc::PWMVictorSPX m_rightMotor{Constants::kRightMotorPort};
frc::DifferentialDrive m_robotDrive{[&](double output) { m_leftMotor.Set(output); },
                                    [&](double output) { m_rightMotor.Set(output); }};
frc::GenericHID m_stick{Constants::kJoystickPort};
m_robotDrive.ArcadeDrive(-m_stick.GetRawAxis(0), m_stick.GetRawAxis(1));
leftMotor = wpilib.PWMVictorSPX(LEFT_MOTOR_PORT)
rightMotor = wpilib.PWMVictorSPX(RIGHT_MOTOR_PORT)
self.robotDrive = wpilib.drive.DifferentialDrive(leftMotor, rightMotor)
self.stick = wpilib.GenericHID(JOYSTICK_PORT)
self.robotDrive.arcadeDrive(-self.stick.getRawAxis(0), self.stick.getRawAxis(1))

Tuş Kullanımı

Not

Aşağıdaki gibi bir kullanım komut temelli bir çerçeve kullanmayan kodlar içindir. Komut temelli çerçeve içerisinde tuş kullanımı için bkz. Komutları Trigger-Tetikleyicilere Bağlama.

Unlike an axis, you will usually want to use the pressed and released methods to respond to button input. These will return true if the button has been activated since the last check. This is helpful for taking an action once when the event occurs but not having to continuously do it while the button is held down.

if (joystick.getRawButtonPressed(0)) {
   turnIntakeOn(); // When pressed the intake turns on
}
if (joystick.getRawButtonReleased(0)) {
   turnIntakeOff(); // When released the intake turns off
}
// OR
if (joystick.getRawButton(0)) {
   turnIntakeOn();
} else {
   turnIntakeOff();
}
if (joystick.GetRawButtonPressed(0)) {
   turnIntakeOn(); // When pressed the intake turns on
}
if (joystick.GetRawButtonReleased(0)) {
   turnIntakeOff(); // When released the intake turns off
}
// OR
if (joystick.GetRawButton(0)) {
   turnIntakeOn();
} else {
   turnIntakeOff();
}
if joystick.getRawButtonPressed(0):
   turnIntakeOn() # When pressed the intake turns on
if joystick.getRawButtonReleased(0):
   turnIntakeOff() # When released the intake turns off
# OR
if joystick.getRawButton(0):
   turnIntakeOn()
else:
   turnIntakeOff()

Yaygın bir iste bir tuşa basıldığında bir şeyin açılması veya kapatılmasıdır. Açma/kapamalar, kullanıcının robotun durumunu takip etmesini gerektirdiği için, dikkatli bir şekilde kullanılmalıdır.

boolean toggle = false;
if (joystick.getRawButtonPressed(0)) {
   if (toggle) {
      // Current state is true so turn off
      retractIntake();
      toggle = false;
   } else {
      // Current state is false so turn on
      deployIntake();
      toggle = true;
   }
}
bool toggle{false};
if (joystick.GetRawButtonPressed(0)) {
   if (toggle) {
      // Current state is true so turn off
      retractIntake();
      toggle = false;
   } else {
      // Current state is false so turn on
      deployIntake();
      toggle = true;
   }
}
toggle = False
if joystick.getRawButtonPressed(0):
   if toggle:
      # current state is True so turn off
      retractIntake()
      toggle = False
   else:
      # Current state is False so turn on
      deployIntake()
      toggle = True