Hedef Mesafeye Hareket Etmek
Artık hareket edilen her milimetre başına kaç tik gerektiğini hesaplamak için gerekli olan sabit değişkenleri oluşturduğumuza göre, bunları hedef mesafeyi ayarlamak için kullanabiliriz. Örneğin, robotun iki ayak ileri gitmesini istiyorsanız, bu mesafeyi feet (ayak) cinsinden milimetreye çevirip, COUNTS_PER_MM ile çarptığınızda, bu mesafeyi katetmek için gereken tik (veya sayım) miktarını bulabilirsiniz!
Hedef Mesafeyi Ayarlamak İçin leftTarget ve rightTarget Değişkenlerini Oluşturma
İlk olarak, iki yeni değişken olan leftTarget ve rightTarget oluşturmanız gerekecek. Bu değişkenler, sabit değişkenler yerine motorların gitmesi gereken pozisyonları belirtmek için kullanılacak. Bu değişkenleri, OpMode içinde, waitForStart(); komutundan önce oluşturun.
public void runOpMode() {
leftmotor = hardwareMap.get(DcMotor.class, "leftmotor");
rightmotor = hardwareMap.get(DcMotor.class, "rightmotor");
rightmotor.setDirection(DcMotor.Direction.REVERSE);
leftmotor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
rightmotor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
int leftTarget;
int rightTarget;
waitForStart();
}Feet'den Millimetreye Dönüşüm
Şu anda mesafe faktörümüz COUNTS_PER_MM ancak, mesafeyi imperial sistemde (örneğin 2 feet veya 24 inç) almak isteyebilirsiniz. Bu durumda hedef mesafe milimetreye dönüştürülmelidir.
Feet'den milimetreye dönüşüm için aşağıdaki formülü kullanabilirsiniz:
d(mm)=d(ft)×304.8d (mm) = d (ft) \times 304.8
Örneğin, 2 feet'i milimetreye çevirdiğimizde, 609.6 milimetre elde ederiz. Ancak bu rehberin amacı için, bunu 610 milimetre olarak yuvarlayacağız.
Feet'den Tike Dönüşüm
Sonraki adımda, 610 milimetreyi COUNTS_PER_MM değişkeniyle çarparak robotun 2 feet gitmesi için gereken tik miktarını hesaplayacağız. Robotun düz bir çizgide hareket etmesini istediğimiz için, hem leftTarget hem de rightTarget değişkenlerini 610 * COUNTS_PER_MM olarak ayarlayacağız.
Daha önce bahsedildiği gibi, setTargetPosition(); fonksiyonu, parametresinin tam sayı (integer) veri tipi olmasını gerektiriyor. leftTarget ve rightTarget değişkenleri tam sayı (integer) olarak ayarlanmış olsa da, COUNTS_PER_MM bir ondalıklı sayı (double) olduğundan, veri tiplerinin uyumsuzluğunu gidermek için dönüştürme yapmamız gerekiyor. Bu dönüşüm oldukça basittir; sadece hesaplama sonucunun önüne (int) eklememiz gerekiyor. Ancak, potansiyel yuvarlama hatalarına dikkat etmeliyiz. COUNTS_PER_MM bir denklem parçası olduğundan, dönüşümü denklemin sonucunu bulduktan sonra yapmak daha doğru olur.
int leftTarget = (int)(610 * COUNTS_PER_MM);
int rightTarget = (int)(610 * COUNTS_PER_MM);Hedef Pozisyonunu Ayarlama
Son olarak, motorları doğru hedef pozisyonuna ayarlamak için, setTargetPosition(); komutlarını, leftTarget ve rightTarget değişkenlerini motorlara ekleyerek güncelleyin:
leftmotor.setTargetPosition(leftTarget);
rightmotor.setTargetPosition(rightTarget);Özet Kod
İşte tüm adımları birleştirerek oluşturduğumuz kod:
public void runOpMode() {
leftmotor = hardwareMap.get(DcMotor.class, "leftmotor");
rightmotor = hardwareMap.get(DcMotor.class, "rightmotor");
rightmotor.setDirection(DcMotor.Direction.REVERSE);
leftmotor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
rightmotor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
// Hedef pozisyonları için değişkenler
int leftTarget;
int rightTarget;
// Hedef mesafe 610mm olarak hesaplandı
leftTarget = (int)(610 * COUNTS_PER_MM);
rightTarget = (int)(610 * COUNTS_PER_MM);
// Hedef pozisyonları ayarla
leftmotor.setTargetPosition(leftTarget);
rightmotor.setTargetPosition(rightTarget);
// Başlatma
waitForStart();
// Motorları hedefe hareket ettir
leftmotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
rightmotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
// Motorlara güç ver
leftmotor.setPower(0.8);
rightmotor.setPower(0.8);
while (opModeIsActive() && (leftmotor.isBusy() && rightmotor.isBusy())) {
// Motorlar hedefe ulaşana kadar bekle
}
}Bu kod, robotun 2 feet (610 mm) ilerlemesi için gereken tik miktarını hesaplar ve motorları bu hedefe ulaşacak şekilde ayarlayarak hareket ettirir.
Last updated