Masaüstü Test Programınızı Oluşturma (C ++ / Java)

Her şey kurulduktan sonra bir robot programı oluşturmaya hazırız. WPILib, robot programları için çeşitli şablonlarla birlikte gelir. Bu şablonların kullanımı yeni kullanıcılar için şiddetle tavsiye edilir; ancak, ileri düzey kullanıcılar kendi robot kodlarını sıfırdan yazmakta özgürdür. Bu makale, temel bir robotu sürmek için önceden yazılmış bazı kodlara sahip olan örneklerden birinden bir proje oluşturmayı açıklamaktadır.

Yeni bir WPILib Projesi Oluşturma

Visual Studio Code komut paletini şu şekilde getirin Ctrl+Shift+P:

Opening the Command Palette.

Ardından, bilgi istemine “WPILib” yazın. Tüm WPILib komutları “WPILib” ile başladığından, bu, WPILib’e özgü VS Kodu komutlarının listesini getirecektir:

Typing WPILib to filter for just the WPILib commands.

Şimdi, “Create a new project-Yeni proje oluştur” komutunu seçin:

Choose "WPILib: Create a new project".

Bu, “Yeni Proje Oluşturucu Penceresini” getirecektir:

The different parts of the new project creation window.

Yeni Proje Oluşturucu Penceresinin öğeleri aşağıda açıklanmıştır:

  1. **Project Type-Proje Türü **: Oluşturmak istediğimiz proje türü. Bu örnek için **Example-Örnek ** seçin

  2. ** Language-Dil **: Bu proje için kullanılacak dildir (C ++ veya Java).

  3. Project Base- Proje Tabanı: Bu kutu, projenin oluşturulacağı temel sınıfı veya örneği seçmek için kullanılır. Bu örnek için, ** Getting Started-Başlarken** ‘yi seçin.

  4. Base Folder-Temel Klasör: Bu, robot projesinin konumlandırılacağı klasörü belirler.

  5. Project Name-Proje Adı: Robot projesinin adı. Bu aynı zamanda,

  6. Create a New Folder-Yeni Klasör Oluştur: Bu işaretlenirse, projeyi önceden belirtilen klasör içinde tutmak için yeni bir klasör oluşturulur. not-işaretli değilse, proje doğrudan önceden belirtilen klasörde yer alacaktır. Klasör boş değilse ve bu kontrol edilmezse bir hata atılacaktır. Yeni Klasör Oluştur kutusu işaretlenmiş ise proje klasörü verilecektir.

  7. Team Number-Takım Numarası: Proje içindeki paket isimleri için ve kodu dağıtırken robotu bulmak için kullanılacak proje takım numarası.

  8. Enable Desktop Support-Masaüstü Desteğini Etkinleştir: Birim testi ve simülasyonu etkinleştirir. WPILib bunu desteklerken, üçüncü taraf yazılım kitaplıkları desteklemeyebilir. Kitaplıklar masaüstünü desteklemiyorsa, kodunuz derlenmeyebilir veya çökebilir. Birim testi veya simülasyon gerekmedikçe ve tüm kitaplıklar bunu desteklemedikçe, işaretlenmeden bırakılmalıdır. Bu örnek için bu kutuyu işaretlemeyin.

Yukarıdakilerin tümü yapılandırıldıktan sonra, “Generate Project-Proje Oluştur” u tıklayın ve robot projesi oluşturulacaktır.

Not

Proje oluşturmadaki herhangi bir hata, ekranın sağ alt köşesinde görünecektir.

Yeni Projeyi Açmak

Projenizi başarıyla oluşturduktan sonra VS Code, aşağıda gösterildiği gibi projeyi açma seçeneği verecektir. Bunu şimdi veya daha sonra şunu yazarak yapmayı seçebiliriz Ctrl+K sonra Ctrl+O (veya macOS’ta sadece: kbd: Command + O) ve kaydettiğimiz klasörü seçebiliriz. proje.

Açıldıktan sonra solda proje hiyerarşisini göreceğiz. Dosyaya çift tıklamak o dosyayı düzenleyicide açacaktır.

The robo.java code shown after opening a new project.

C ++ Yapılandırmaları (Yalnızca C ++)

C ++ projeleri için IntelliSense’i kurmak için bir adım daha vardır. Ne zaman bir proje açsak, sağ alt köşede C ++ yapılandırmalarını yenilememizi isteyen bir pencere açmalıyız. IntelliSense’i kurmak için “Yes-Evet” i tıklayın.

You must choose "Yes" to refrest the C++ configurations.

Imports/Includes-İthalat / İçerir

 7
 8
 9
10
11
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.PWMVictorSPX;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.drive.DifferentialDrive;

Kodumuzun kullanılan WPILib bileşenlerine başvurması gerekir. C ++ ‘da bu, #include ifadeleri kullanılarak gerçekleştirilir; Java’da bu, import ifadeleriyle yapılır. Program, `` Joystick ‘’ (sürüş için), PWMVictorSPX (motorları kontrol etmek için), TimedRobot (örnek için kullanılan temel sınıf), Timer (otonom için kullanılır. ), DifferentialDrive (joystick kontrolünü motorlara bağlamak için) ve LiveWindow (yalnızca C ++).

Örnek robotumuz için değişkenleri tanımlama

19
20
21
22
23
public class Robot extends TimedRobot {
  private final DifferentialDrive m_robotDrive =
      new DifferentialDrive(new PWMVictorSPX(0), new PWMVictorSPX(1));
  private final Joystick m_stick = new Joystick(0);
  private final Timer m_timer = new Timer();

Örneklerimizdeki örnek robot, arcade sürücüsü için USB port 0’da bir joystick’e ve PWM portu 0 ve 1’de iki motora sahip olacaktır. Burada, DifferentialDrive (m_robotDrive), Joystick (m_stick) ve zaman (m_timer) tipi nesneler oluşturuyoruz. Kodun bu bölümü üç şey yapar:

  1. Değişkenleri Robot sınıfımızın üyeleri olarak tanımlar.

  2. Değişkenleri başlatır.

Not

C ++ için değişken başlatmalar, programın altındaki private- özel bölümdedir. Bu, sınıfa özel oldukları anlamına gelir (Robot). C ++ kodu ayrıca Motor Güvenliği sona erme süresini 0,1 saniyeye ayarlar (her .1 saniyede bir komut vermezsek sürücü kapanır) ve otonom için kullanılan Timer-Zamanlayıcıyı başlatır.

Robot Başlatma

@Override
public void robotInit() {}

RobotInit yöntemi, robot programı başlatıldığında, ancak kurucudan sonra çalıştırılır. Örnek programımız için RobotInit hiçbir şey yapmaz. Burada bir şey çalıştırmak istersek, varsayılanı geçersiz kılmak için yukarıdaki kodu sağlayabiliriz).

Basit Otonom Örnek

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  /** This function is run once each time the robot enters autonomous mode. */
  @Override
  public void autonomousInit() {
    m_timer.reset();
    m_timer.start();
  }

  /** This function is called periodically during autonomous. */
  @Override
  public void autonomousPeriodic() {
    // Drive for 2 seconds
    if (m_timer.get() < 2.0) {
      m_robotDrive.arcadeDrive(0.5, 0.0); // drive forwards half speed
    } else {
      m_robotDrive.stopMotor(); // stop robot
    }
  }

AutonomousInit yöntemi, robot başka bir moddan otonom moda her geçişinde bir kez çalıştırılır. Bu programda Zamanlayıcı yı sıfırlıyoruz ve ardından bu yöntemde başlatıyoruz.

Robot otonom moddayken AutonomousPeriodic her periyotta bir kez çalıştırılır. TimedRobot sınıfında periyot, varsayılan olarak 20 ms olan sabit bir zamandır. Bu örnekte, periyodik kod, zamanlayıcının 2 saniyeden az olup olmadığını kontrol eder ve öyleyse, DifferentialDrive sınıfının `` ArcadeDrive`` yöntemini kullanarak yarı hızda ilerler. 2 saniyeden fazla bir süre geçtiyse, kod robot sürücüsünü durdurur.

Teleoperasyon için Joystick Kontrolü

50
51
52
53
54
55
56
57
58
  /** This function is called once each time the robot enters teleoperated mode. */
  @Override
  public void teleopInit() {}

  /** This function is called periodically during teleoperated mode. */
  @Override
  public void teleopPeriodic() {
    m_robotDrive.arcadeDrive(m_stick.getY(), m_stick.getX());
  }

Otonom modda olduğu gibi, Teleop modunda da bir TeleopInit ve TeleopPeriodic işlevi vardır. Bu örnekte, TeleopInit ile yapabileceğimiz bir şey yok, sadece örnekleme amacıyla sağlanmıştır. TeleopPeriodic de kod, Joystick in Y eksenini sürücü motorlarının ileri/geri hareketine ve X eksenini dönüş hareketine eşlemek için ArcadeDrive yöntemini kullanır.

Test modu

60
61
62
63
64
65
66
67
  /** This function is called once each time the robot enters test mode. */
  @Override
  public void testInit() {}

  /** This function is called periodically during test mode. */
  @Override
  public void testPeriodic() {}
}

Test Modu, robot işlevselliğini test etmek için kullanılır. TeleopInit e benzer şekilde, TestInit ve TestPeriodic yöntemleri burada yalnızca açıklama amacıyla verilmiştir.

Projeyi Robota Deploy etmek

Programı bir robota dağıtmak için lütfen talimatlara bakın here .