สมาร์ทไดรฟ์#
การแนะนำ#
คลาส smartdrive ควบคุมวิธีการขับเคลื่อนและเลี้ยวของหุ่นยนต์โดยใช้มอเตอร์ ล้อ และเซ็นเซอร์ smartdrive สามารถใช้ เซ็นเซอร์ไจโร ที่เชื่อมต่อ หรือ เซ็นเซอร์เฉื่อย ในตัวของสมองได้
ระบบขับเคลื่อนอัจฉริยะ A smartdrive ใช้เซ็นเซอร์เพื่อช่วยให้หุ่นยนต์เคลื่อนที่และเลี้ยวได้อย่างแม่นยำ ในตอนเริ่มต้นของแต่ละโครงการ ระบบขับเคลื่อนจะปรับเทียบเซ็นเซอร์โดยอัตโนมัติ ให้หุ่นยนต์อยู่นิ่งประมาณ 2 วินาทีในระหว่างการปรับเทียบ เพื่อให้หุ่นยนต์สามารถเคลื่อนที่และเลี้ยวได้อย่างถูกต้อง
คลาส smartdrive นั้นมีพื้นฐานมาจากคลาส drivetrain โดยสามารถใช้ฟังก์ชันการขับเคลื่อนและการหมุนแบบเดียวกับ drivetrain และยังเพิ่มฟังก์ชันที่ใช้เซ็นเซอร์ เช่น turnToHeading และ turnToRotation อีกด้วย
หน้านี้ใช้ myDrivetrain เป็นตัวอย่างชื่อ smartdrive โปรดแทนที่ด้วยชื่อที่คุณกำหนดเองตามต้องการ
ตัวสร้างคลาส#
1 — สร้างสมาร์ทไดรฟ์โดยใช้วัตถุ motor_group
motor_groupมีอยู่แล้วสำหรับด้านซ้ายและด้านขวา พร้อมด้วยเซ็นเซอร์ไจโรหรือเซ็นเซอร์เฉื่อยsmartdrive( motor_group &l, motor_group &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — สร้างสมาร์ทไดรฟ์โดยใช้วัตถุมอเตอร์
motorที่มีอยู่สำหรับด้านซ้ายและด้านขวา พร้อมด้วยเซ็นเซอร์ไจโรหรือเซ็นเซอร์เฉื่อยsmartdrive( motor &l, motor &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
ตัวทำลายคลาส#
ทำลายอ็อบเจ็กต์ smartdrive หมายเลข และปล่อยทรัพยากรที่เกี่ยวข้อง
~smartdrive();
พารามิเตอร์#
The sensor parameter can be a gyro or inertial object.
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
มอเตอร์ซ้ายและขวา หรือกลุ่มมอเตอร์ พารามิเตอร์ทั้งสองต้องใช้ประเภทเดียวกัน: อย่างใดอย่างหนึ่งคือ วัตถุ |
|
|
เซ็นเซอร์ไจโร หรือ เซ็นเซอร์เฉื่อย ที่ใช้โดยสมาร์ทไดรฟ์ |
|
|
เส้นรอบวงของล้อระบบขับเคลื่อน ค่าเริ่มต้นคือ |
|
|
ระยะห่างระหว่างล้อซ้ายและล้อขวา ค่าเริ่มต้นคือ |
|
|
ระยะห่างระหว่างล้อหน้าและล้อหลัง ค่าเริ่มต้นคือ |
|
|
หน่วยสำหรับ |
|
|
อัตราทดเกียร์ที่ใช้ปรับระยะทางการขับเคลื่อนหากมีการใช้เกียร์ ค่าเริ่มต้นคือ |
ตัวอย่าง#
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
ฟังก์ชันสมาชิก#
คลาส smartdrive ประกอบด้วยฟังก์ชันสมาชิกต่อไปนี้:
การกระทำ — หมุนหุ่นยนต์โดยใช้ทิศทางหรือการหมุน
turnToHeading— หมุนหุ่นยนต์ให้หันหน้าไปยังทิศทางที่กำหนดตั้งแต่ -359 ถึง 359 องศา หุ่นยนต์จะหมุนไปในทิศทางที่สั้นที่สุดเพื่อไปยังทิศทางเป้าหมายturnToRotation— หมุนหุ่นยนต์ไปที่มุมการหมุนที่กำหนดcalibrateDrivetrain— ปรับเทียบเซ็นเซอร์ที่กำหนดค่าไว้กับสมาร์ทไดรฟ์
การตั้งค่า — ปรับค่าทิศทางและการหมุน
setHeading— เปลี่ยนทิศทางปัจจุบันของหุ่นยนต์เป็นทิศทางใหม่setRotation— เปลี่ยนการหมุนปัจจุบันของหุ่นยนต์เป็นการหมุนใหม่
ค่าต่างๆ — ตรวจสอบหัวเรื่องและการหมุน
heading— ส่งคืนทิศทางปัจจุบันของหุ่นยนต์จาก 0 ถึง 359 องศาrotation— ส่งคืนการหมุนปัจจุบันของหุ่นยนต์
สมาร์ทไดรฟ์ smartdrive ยังสามารถใช้ฟังก์ชันสมาชิกที่สืบทอดมาจาก drivetrain เช่น drive, driveFor, turn, turnFor, stop, isDoneและ isMoving
ก่อนเรียกใช้ฟังก์ชันสมาชิก smartdrive ใดๆ จะต้องสร้างอ็อบเจ็กต์ smartdrive ก่อน
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
turnToHeading#
ทิศทาง (Heading) คือทิศทางที่หุ่นยนต์หันหน้าไป โดยวัดเป็นองศา คำสั่ง turnToHeading จะหมุนหุ่นยนต์ให้หันหน้าไปในทิศทางที่กำหนด ตั้งแต่ -359 ถึง 359 องศา หุ่นยนต์จะหมุนไปในทิศทางที่สั้นที่สุดเพื่อไปยังทิศทางเป้าหมาย
ทิศทางเริ่มต้นของหุ่นยนต์คือ 0 องศา
โปรเจ็กต์จะรอจนกว่าหุ่นยนต์จะหมุนเสร็จก่อนที่จะรันโค้ดบรรทัดถัดไป
Available Functions1 — หมุนหุ่นยนต์ไปยังทิศทางที่กำหนดโดยใช้ความเร็วในการหมุนปัจจุบัน
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — หมุนหุ่นยนต์ไปยังทิศทางที่กำหนดด้วยความเร็วที่กำหนด
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ทิศทางที่หุ่นยนต์ควรหันหน้าไป (หน่วยเป็นองศา) ค่านี้สามารถอยู่ระหว่าง -359 ถึง 359 เมื่อใช้ |
|
|
หน่วยหัวเรื่อง: |
|
|
ความเร็วในการหมุนสามารถกำหนดได้ตั้งแต่ 0% ถึง 100% เมื่อใช้ |
|
|
หน่วยความเร็ว: |
|
|
|
ส่งคืนค่าบูลีนว่าหุ่นยนต์ไปถึงทิศทางเป้าหมายหรือไม่
true— หุ่นยนต์ไปถึงทิศทางเป้าหมายแล้วfalse— หุ่นยนต์ไม่ได้ทำการหมุนให้เสร็จสิ้น หรือฟังก์ชันส่งกลับก่อนที่การหมุนจะเสร็จสมบูรณ์เนื่องจากwaitForCompletionถูกตั้งค่าเป็นfalse
การเรียกใช้ฟังก์ชันการเคลื่อนที่ของระบบขับเคลื่อนอื่นในขณะที่ฟังก์ชัน
turnToHeadingกำลังทำงานอยู่ จะขัดจังหวะการเคลื่อนที่ปัจจุบันturnToHeadingใช้หัวเป้าหมาย ดังนั้นisDoneและisMovingจึงสามารถใช้ร่วมกับมันได้
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation หมุนหุ่นยนต์ไปยังทิศทางการหมุนที่กำหนด
การหมุนคือจำนวนรอบที่หุ่นยนต์หมุน โดยวัดเป็นองศาหรือรอบ ในตอนเริ่มต้นโครงการ ค่าการหมุนจะถูกตั้งไว้ที่ 0 องศา นอกจากนี้ยังสามารถตั้งค่าการหมุนได้โดยใช้ฟังก์ชัน setRotation
ค่าการหมุนเป็นค่าสัมบูรณ์ ซึ่งหมายความว่าทิศทางการเลี้ยวขึ้นอยู่กับการหมุนปัจจุบันของหุ่นยนต์ การเลี้ยวขวาจะเพิ่มการหมุน และการเลี้ยวซ้ายจะลดการหมุน
ตัวอย่างเช่น ถ้าหุ่นยนต์เริ่มต้นที่ 0 องศา และคุณหมุนเป็น 720 องศา มันจะเลี้ยวขวา 2 ครั้ง จากนั้นถ้าคุณหมุนเป็น 360 องศา มันจะเลี้ยวซ้าย 1 ครั้ง เพราะ 360 น้อยกว่า 720
โปรเจ็กต์จะรอจนกว่าหุ่นยนต์จะหมุนเสร็จก่อนที่จะรันโค้ดบรรทัดถัดไป
Available Functions1 — หมุนหุ่นยนต์ไปยังทิศทางการหมุนที่กำหนดโดยใช้ความเร็วในการหมุนปัจจุบัน
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — หมุนหุ่นยนต์ไปยังตำแหน่งการหมุนที่กำหนดด้วยความเร็วที่กำหนด
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ค่ามุมการหมุนที่หุ่นยนต์จะหมุนไป |
|
|
หน่วยการหมุน: |
|
|
ความเร็วในการหมุนสามารถกำหนดได้ตั้งแต่ 0% ถึง 100% เมื่อใช้ |
|
|
หน่วยความเร็ว: |
|
|
|
ส่งคืนค่าบูลีนว่าหุ่นยนต์หมุนถึงเป้าหมายหรือไม่
true— หุ่นยนต์หมุนได้ตามเป้าหมายแล้วfalse— หุ่นยนต์ไม่ได้ทำการหมุนให้เสร็จสิ้น หรือฟังก์ชันส่งกลับก่อนที่การหมุนจะเสร็จสมบูรณ์เนื่องจากwaitForCompletionถูกตั้งค่าเป็นfalse
การเรียกใช้ฟังก์ชันการเคลื่อนที่ของระบบขับเคลื่อนอื่นในขณะที่ฟังก์ชัน
turnToRotationกำลังทำงานอยู่ จะขัดจังหวะการเคลื่อนที่ปัจจุบันturnToRotationใช้การหมุนเป้าหมาย ดังนั้นisDoneและisMovingสามารถใช้ร่วมกับมันได้
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain ปรับเทียบเซ็นเซอร์ไจโรที่เชื่อมต่ออยู่ หรือเซ็นเซอร์เฉื่อยในตัวของสมองที่กำหนดค่าไว้กับสมาร์ทไดรฟ์
การปรับเทียบช่วยให้เซ็นเซอร์วัดการเคลื่อนไหวได้อย่างถูกต้อง ให้หุ่นยนต์อยู่นิ่งประมาณ 2 วินาทีในระหว่างการปรับเทียบ หากหุ่นยนต์เคลื่อนที่ในระหว่างการปรับเทียบ เซ็นเซอร์อาจวัดการเคลื่อนไหวไม่ถูกต้อง
โปรเจ็กต์จะรอจนกว่าการปรับเทียบจะเสร็จสิ้นก่อนจึงจะเริ่มรันโค้ดบรรทัดถัดไป
หมายเหตุ: calibrateDrivetrain ถูกสร้างขึ้นโดยอัตโนมัติโดย VEXcode เมื่อมีการกำหนดค่าระบบขับเคลื่อนด้วยเซ็นเซอร์ไจโรหรือเซ็นเซอร์เฉื่อย โค้ดนี้เป็นส่วนหนึ่งของซอร์สโค้ดของโปรเจ็กต์และไม่ได้เป็นส่วนหนึ่งของ VEX IQ C++ API
void calibrateDrivetrain();
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesฟังก์ชันนี้ไม่ส่งค่ากลับ
Notesหุ่นยนต์จะทำการปรับเทียบโดยอัตโนมัติเมื่อเริ่มต้นโครงการแต่ละครั้ง เมื่อมีการกำหนดค่าสมาร์ทไดรฟ์ใน VEXcode
ระหว่างการปรับเทียบ ให้คงหุ่นยนต์ไว้นิ่งประมาณ 2 วินาที
ต่อไปนี้เป็นตัวอย่างของการใช้งานฟังก์ชัน calibrateDrivetrain ที่สร้างขึ้นโดยอัตโนมัติโดย VEXcode:
bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
wait(200, msec);
Brain.Screen.print("Calibrating");
Brain.Screen.newLine();
Brain.Screen.print("Inertial");
DrivetrainInertial.calibrate();
while (DrivetrainInertial.isCalibrating()) {
wait(25, msec);
}
vexcode_initial_drivetrain_calibration_completed = true;
// Clears the screen and returns the cursor to row 1, column 1.
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
}
setHeading#
ทิศทางที่หุ่นยนต์หันหน้าไป (Heading) คือทิศทางที่หุ่นยนต์กำลังหันหน้าไป โดยวัดเป็นองศา คำสั่ง setHeading จะเปลี่ยนทิศทางปัจจุบันของหุ่นยนต์เป็นค่าทิศทางใหม่
ตัวอย่างเช่น หากหุ่นยนต์หันไปทางขวา การตั้งค่าทิศทางเป็น 0 องศา จะทำให้ตำแหน่งที่หันไปทางขวานั้นกลายเป็น 0 องศาใหม่ จากนั้นหุ่นยนต์สามารถหันไปตำแหน่งอื่น ๆ ได้โดยอิงจากทิศทางใหม่นั้น
Available Functionsvoid setHeading(
double value,
rotationUnits units);
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ค่าทิศทางที่จะตั้งให้กับหุ่นยนต์ สามารถมีค่าได้ตั้งแต่ -359 ถึง 359 เมื่อใช้ |
|
|
หน่วยหัวเรื่อง: |
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examples// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
การหมุน คือจำนวนรอบที่หุ่นยนต์หมุนไป โดยวัดเป็นองศาหรือรอบ ในตอนเริ่มต้นโครงการ ค่าการหมุนจะถูกตั้งไว้ที่ 0 องศา คำสั่ง setRotation จะเปลี่ยนค่าการหมุนปัจจุบันของหุ่นยนต์เป็นค่าใหม่
ตัวอย่างเช่น หากหุ่นยนต์หมุนไปทางขวาครบสองรอบ ค่าการหมุนของมันจะเป็น 720 องศา การตั้งค่าการหมุนเป็น 0 องศาจะรีเซ็ตค่าการหมุนจาก 720 เป็น 0 องศา จากนั้นหุ่นยนต์สามารถหมุนได้ตามค่าการหมุนใหม่นั้น
Available Functionsvoid setRotation(
double value,
rotationUnits units);
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ค่าการหมุนที่จะตั้งค่าสำหรับหุ่นยนต์ |
|
|
หน่วยการหมุน: |
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examples// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
ทิศทาง (Heading) คือทิศทางที่หุ่นยนต์หันหน้าไป โดยวัดเป็นองศา ค่า Heading heading จะเปลี่ยนทิศทางปัจจุบันของหุ่นยนต์จาก 0 เป็น 359 องศา
ทิศทางเริ่มต้นของหุ่นยนต์คือ 0 องศา
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ตัวเลือกเสริม หน่วยที่จะใช้ในการกำหนดทิศทางกลับ: |
ส่งคืนค่าทิศทางปัจจุบันของหุ่นยนต์เป็นค่า double ในหน่วยที่เลือก
// Show heading before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();
rotation#
การหมุน คือจำนวนรอบที่หุ่นยนต์หมุนไป โดยวัดเป็นองศาหรือรอบ ในตอนเริ่มต้นโครงการ ค่าการหมุนจะถูกตั้งไว้ที่ 0 องศา คำสั่ง rotation จะส่งคืนค่าการหมุนปัจจุบันของหุ่นยนต์
การเลี้ยวขวาจะเพิ่มมุมการหมุน และการเลี้ยวซ้ายจะลดมุมการหมุน ตัวอย่างเช่น การเลี้ยวขวาครบสองรอบจะทำให้ได้มุมการหมุน 720 องศา
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ตัวเลือกเสริม หน่วยที่จะใช้ในการวัดการหมุนคือ |
ส่งคืนค่าการหมุนปัจจุบันของหุ่นยนต์เป็นค่า double ในหน่วยที่เลือก
// Show rotation before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();