การเคลื่อนไหว#

การแนะนำ#

มอเตอร์ควบคุมการเคลื่อนที่ของชิ้นส่วนต่างๆ ของหุ่นยนต์ มอเตอร์สามารถใช้ยกแขน หมุนกรงเล็บ หมุนล้อ หรือเคลื่อนย้ายส่วนอื่นๆ ของโครงสร้างได้ มอเตอร์สองตัวสามารถทำงานร่วมกันเป็น ระบบขับเคลื่อน เพื่อเคลื่อนย้ายและหมุนหุ่นยนต์ทั้งตัว

มอเตอร์แต่ละตัวจะถูกกำหนดค่าในหน้าต่างอุปกรณ์ ชื่อมอเตอร์อาจเปลี่ยนแปลงได้ขึ้นอยู่กับเวอร์ชันของหุ่นยนต์ ตัวอย่างเช่น เวอร์ชัน Competition Advanced 2.0 จะมีมอเตอร์ชื่อ arm_motorหุ่นยนต์ที่ออกแบบเองอาจใช้ชื่อมอเตอร์ที่แตกต่างออกไป

โดยค่าเริ่มต้น FORWARD จะหมุนมอเตอร์ทวนเข็มนาฬิกา และ REVERSE จะหมุนมอเตอร์ตามเข็มนาฬิกา หากตั้งค่ามอเตอร์ให้หมุนกลับทิศทางในหน้าต่างอุปกรณ์ ทิศทางการหมุนเหล่านั้นจะสลับกัน

ภาพมอเตอร์ VEX GO แสดงทิศทางการหมุนไปข้างหน้าด้วยเครื่องหมายบวก และลูกศรแสดงว่ากำลังหมุนไปทางซ้าย หรือทวนเข็มนาฬิกา ภาพมอเตอร์ VEX GO แสดงทิศทางการหมุนย้อนกลับ โดยมีเครื่องหมายลบและลูกศรชี้ทิศทางการหมุนไปทางขวา หรือตามเข็มนาฬิกา

มีวิธีการเขียนโค้ดสำหรับมอเตอร์อยู่หลายวิธี ด้านล่างนี้คือรายการวิธีการเคลื่อนที่ทั้งหมด:

การดำเนินการ — หยุดและหมุนมอเตอร์

  • spin — หมุนมอเตอร์ไปข้างหน้าหรือถอยหลังตลอดไป

  • spin_for — หมุนมอเตอร์เป็นระยะทางที่กำหนด

  • spin_to_position — หมุนมอเตอร์ไปยังตำแหน่งที่กำหนด

  • stop — หยุดมอเตอร์ไม่ให้หมุน

ตัวปรับค่า — ปรับการตั้งค่ามอเตอร์

  • set_velocity — บอกมอเตอร์ให้หมุนเร็วแค่ไหน

  • set_max_torque — กำหนดว่ามอเตอร์สามารถผลักได้แรงแค่ไหนในขณะที่หมุน

  • set_position — เปลี่ยนตำแหน่งปัจจุบันของมอเตอร์เป็นค่าใหม่

  • set_stopping — กำหนดวิธีการหยุดการเคลื่อนที่ของมอเตอร์: โดยการเบรก การปล่อยให้ไหลไปเอง หรือการหยุดนิ่ง

  • set_timeout — ตั้งค่าระยะเวลาที่มอเตอร์จะพยายามทำการเคลื่อนไหวให้เสร็จสิ้น

ตัวตรวจสอบสถานะมอเตอร์ — ตรวจสอบสถานะมอเตอร์

  • get_position — ส่งคืนตำแหน่งปัจจุบันของมอเตอร์

  • get_velocity — ส่งคืนความเร็วในการหมุนของมอเตอร์เป็นเปอร์เซ็นต์ตั้งแต่ -100% ถึง 100%

  • get_current — ส่งคืนพลังงานที่มอเตอร์ใช้จากแบตเตอรี่เป็นเปอร์เซ็นต์ตั้งแต่ 0% ถึง 100%

  • is_stopped — ส่งคืนค่าบูลีนว่ามอเตอร์หยุดเคลื่อนที่แล้วหรือไม่

  • is_moving — ส่งคืนว่ามอเตอร์กำลังหมุนอยู่หรือไม่ ในรูปแบบค่าบูลีน

การกระทำ#

spin#

คำสั่ง spin จะหมุนมอเตอร์ไปข้างหน้าหรือถอยหลังอย่างไม่มีที่สิ้นสุด มอเตอร์จะหมุนต่อไปจนกว่าจะได้รับคำสั่งอื่น เช่น หมุนไปในทิศทางอื่นหรือหยุด

Usage:
arm_motor.spin(direction)

พารามิเตอร์

คำอธิบาย

direction

ทิศทางการหมุนของมอเตอร์: FORWARD หรือ REVERSE

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor, then stop
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

spin_for#

คำสั่ง spin_for จะหมุนมอเตอร์เป็นระยะทางที่กำหนด การหมุนนั้นสัมพันธ์กับตำแหน่งปัจจุบันของมอเตอร์ โปรเจ็กต์จะรอจนกว่ามอเตอร์จะหยุดหมุนก่อนที่โค้ดบรรทัดถัดไปจะทำงาน

Usage:
arm_motor.spin_for(direction, angle, units, wait)

พารามิเตอร์

คำอธิบาย

direction

ทิศทางการหมุนของมอเตอร์: FORWARD หรือ REVERSE

angle

ระยะทางที่มอเตอร์หมุน DEGREES ใช้จำนวนเต็ม TURNS สามารถใช้จำนวนเต็มหรือทศนิยมก็ได้

units

เลือกได้ หน่วยระยะทาง: DEGREES (ค่าเริ่มต้น) หรือ TURNS

wait

ตัวเลือกเสริม wait=True (ค่าเริ่มต้น) จะทำให้โปรเจ็กต์รอจนกว่ามอเตอร์จะหยุดหมุนก่อนที่โค้ดบรรทัดถัดไปจะทำงาน wait=False จะทำให้โค้ดบรรทัดถัดไปทำงานทันที

# Build Used: Competition Advanced 2.0
def main():
    # Raise and lower the ArmMotor
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_for(FORWARD, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

spin_to_position#

spin_to_position หมุนมอเตอร์ไปยังตำแหน่งที่กำหนด

ตำแหน่งของมอเตอร์คือระยะที่มอเตอร์หมุน โดยวัดเป็น DEGREES หรือ TURNSหนึ่งรอบเท่ากับ 360 องศา ในตอนเริ่มต้นโครงการ ตำแหน่งของมอเตอร์จะถูกตั้งค่าเป็น 0 องศา นอกจากนี้ยังสามารถตั้งค่าตำแหน่งของมอเตอร์ได้โดยใช้เมธอด set_position

ค่าตำแหน่งเป็นค่าสัมบูรณ์ ซึ่งหมายความว่าทิศทางการหมุนขึ้นอยู่กับตำแหน่งปัจจุบันของมอเตอร์

ตัวอย่างเช่น หากมอเตอร์เริ่มหมุนที่ 0 องศาและหมุนไปที่ตำแหน่ง 720 องศา มันจะหมุนไปข้างหน้าสองรอบ หากจากนั้นมันหมุนไปที่ตำแหน่ง 360 องศา มันจะหมุนถอยหลังหนึ่งรอบ เพราะ 360 น้อยกว่า 720

Usage:
arm_motor.spin_to_position(angle, units, wait)

พารามิเตอร์

คำอธิบาย

angle

ค่าตำแหน่งที่มอเตอร์จะหมุนไป DEGREES ใช้จำนวนเต็ม TURNS สามารถใช้จำนวนเต็มหรือทศนิยมได้

units

เลือกได้ตามต้องการ หน่วยตำแหน่ง: DEGREES (ค่าเริ่มต้น) หรือ TURNS

wait

ตัวเลือกเสริม wait=True (ค่าเริ่มต้น) จะทำให้โปรเจ็กต์รอจนกว่ามอเตอร์จะหยุดหมุนก่อนที่โค้ดบรรทัดถัดไปจะทำงาน wait=False จะทำให้โค้ดบรรทัดถัดไปทำงานทันที

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

stop#

stop หยุดมอเตอร์ไม่ให้หมุน

Usage:
arm_motor.stop()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

ตัวกลายพันธุ์#

set_velocity#

คำสั่ง set_velocity จะบอกมอเตอร์ว่าควรหมุนเร็วแค่ไหน ค่าเปอร์เซ็นต์ที่สูงขึ้นจะทำให้มอเตอร์หมุนเร็วขึ้น และค่าเปอร์เซ็นต์ที่ต่ำลงจะทำให้มอเตอร์หมุนช้าลง

ทุกโปรเจกต์เริ่มต้นด้วยมอเตอร์แต่ละตัวหมุนด้วยความเร็ว 50% เป็นค่าเริ่มต้น

หมายเหตุ: ความเร็วที่สูงขึ้นจะทำให้มอเตอร์หมุนเร็วขึ้น แต่ความแม่นยำอาจลดลง ความเร็วที่ต่ำลงจะทำให้มอเตอร์หมุนช้าลง แต่ความแม่นยำอาจเพิ่มขึ้น

Usage:
arm_motor.set_velocity(velocity)

พารามิเตอร์

คำอธิบาย

velocity

ความเร็วในการหมุนสามารถกำหนดได้ตั้งแต่ 0% ถึง 100% โดยสามารถเป็นจำนวนเต็ม integer หรือทศนิยม (float)

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different velocities
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move slow
    arm_motor.set_velocity(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move fast
    arm_motor.set_velocity(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_max_torque#

แรงบิดคือแรงหมุน มันแสดงให้เห็นว่ามอเตอร์สามารถผลักหรือดึงได้แรงแค่ไหนเมื่อมันหมุน

set_max_torque กำหนดแรงบิดสูงสุดที่มอเตอร์สามารถใช้ได้

ค่าเปอร์เซ็นต์ที่สูงขึ้นจะทำให้มอเตอร์ออกแรงมากขึ้น เช่น เมื่อยกของหนัก ค่าเปอร์เซ็นต์ที่ต่ำลงจะจำกัดแรงที่มอเตอร์สามารถออกได้ ซึ่งจะช่วยป้องกันหุ่นยนต์ได้หากมอเตอร์ติดขัดหรือเคลื่อนที่ไปจนถึงขีดจำกัดสูงสุด

ทุกโปรเจกต์เริ่มต้นด้วยแรงบิดของมอเตอร์แต่ละตัวที่ 50% เป็นค่าเริ่มต้น

Usage:
arm_motor.set_max_torque(value)

พารามิเตอร์

คำอธิบาย

value

แรงบิดสูงสุดที่มอเตอร์สามารถใช้ได้ตั้งแต่ 0% ถึง 100% ค่านี้สามารถเป็นจำนวนเต็ม integer หรือทศนิยม (float ) ได้

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different torques
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move with less torque
    arm_motor.set_max_torque(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move with maximum torque
    arm_motor.set_max_torque(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_position#

ตำแหน่งของมอเตอร์คือระยะที่มอเตอร์หมุนไป โดยวัดเป็น DEGREES หรือ TURNSหนึ่งรอบเท่ากับ 360 องศา set_position เปลี่ยนตำแหน่งปัจจุบันของมอเตอร์เป็นค่าใหม่

ตัวอย่างเช่น หากมอเตอร์หมุนไปถึง 180 องศา การตั้งตำแหน่งเป็น 0 องศาจะรีเซ็ตตำแหน่งนั้นจาก 180 องศาเป็น 0 องศา จากนั้นมอเตอร์จะสามารถหมุนไปยังตำแหน่งต่างๆ ตามค่าใหม่นั้นได้

Usage:
arm_motor.set_position(position, units)

พารามิเตอร์

คำอธิบาย

position

ค่าตำแหน่งที่จะตั้งค่าสำหรับมอเตอร์ DEGREES ใช้จำนวนเต็ม TURNS สามารถใช้จำนวนเต็มหรือทศนิยมได้

units

เลือกได้ตามต้องการ หน่วยตำแหน่ง: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.set_position(0, DEGREES)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping กำหนดวิธีการหยุดมอเตอร์: โดยการเบรก การปล่อยให้ไหลไปเอง หรือการหยุดนิ่ง

Usage:
arm_motor.set_stopping(mode)

พารามิเตอร์

คำอธิบาย

mode

วิธีที่มอเตอร์จะหยุด:

  • BRAKE — หยุดทันที
  • COAST — ชะลอความเร็วจนหยุด
  • HOLD — หยุดทันทีและคงตำแหน่งของมอเตอร์ไว้

For example, if a Competition Advanced 2.0 build is used and arm_motor is set to HOLD, the motor will hold the arm at its current position until another arm movement happens. This means the motor will work against gravity to keep the arm in the air if the motor was stopped with the arm raised.

หากไม่ใช้วิธีนี้ มอเตอร์จะใช้ BRAKE เมื่อหยุด

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor, then coast to a stop
    arm_motor.set_velocity(20)
    arm_motor.set_stopping(COAST)
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

set_timeout กำหนดเวลาที่มอเตอร์จะพยายามทำการเคลื่อนไหวให้เสร็จสิ้น หากมอเตอร์ไม่สามารถทำการเคลื่อนไหวให้เสร็จสิ้นภายในเวลาที่กำหนด มันจะหยุดพยายามและไปยังบรรทัดโค้ดถัดไป ซึ่งจะช่วยป้องกันไม่ให้มอเตอร์ติดขัดในการเคลื่อนไหว

Usage:
arm_motor.set_timeout(value, units)

พารามิเตอร์

คำอธิบาย

value

ระยะเวลาที่มอเตอร์สามารถพยายามทำการเคลื่อนที่ให้เสร็จสิ้นได้ ค่านี้อาจเป็นจำนวนเต็มบวก integer หรือทศนิยม (float)

units

เลือกได้ หน่วยเวลา: SECONDS (ค่าเริ่มต้น) หรือ MSEC วินาที

# Build Used: Competition Advanced 2.0
def main():
    # Move ArmMotor as far as possible for 1 second before resetting
    arm_motor.set_position(0, DEGREES)
    arm_motor.set_timeout(1, SECONDS)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

ผู้รับ#

get_position#

ตำแหน่งของมอเตอร์คือระยะที่มอเตอร์หมุนไป โดยวัดเป็น DEGREES หรือ TURNSหนึ่งรอบเท่ากับ 360 องศา get_position จะส่งคืนตำแหน่งปัจจุบันของมอเตอร์

ในตอนเริ่มต้นโครงการ ตำแหน่งของมอเตอร์จะถูกตั้งไว้ที่ 0 องศา หากมอเตอร์หมุนไปข้างหน้าหนึ่งรอบ ตำแหน่งจะเปลี่ยนเป็น 360 องศา หรือ 1 รอบ หากมอเตอร์หมุนไปในทิศทางตรงกันข้าม ตำแหน่งจะเปลี่ยนเป็นค่าลบ

Usage:
arm_motor.get_position(units)

พารามิเตอร์

คำอธิบาย

units

ตัวเลือกเสริม หน่วยสำหรับปรับตำแหน่งมอเตอร์กลับไปที่: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Build Used: Competition Advanced 2.0
def main():
    # Display how far the ArmMotor moves after one second
    arm_motor.set_position(0, DEGREES)
    console.print("Start: ")
    console.print(arm_motor.get_position(DEGREES))
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()
    console.print("After: ")
    console.print(arm_motor.get_position(DEGREES))

# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity จะส่งคืนค่าความเร็วในการหมุนของมอเตอร์เป็นเปอร์เซ็นต์ ตั้งแต่ -100% ถึง 100%

ค่าบวกหมายความว่ามอเตอร์หมุนไปข้างหน้า ค่าลบหมายความว่ามอเตอร์หมุนย้อนกลับ

Usage:
arm_motor.get_velocity()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Build Used: Competition Advanced 2.0
def main():
    # Display the ArmMotor's velocity when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_velocity())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_velocity())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

get_current#

get_current จะส่งคืนค่ากำลังไฟฟ้าที่มอเตอร์ใช้จากแบตเตอรี่เป็นเปอร์เซ็นต์ ตั้งแต่ 0% ถึง 100%

ค่ากระแสไฟฟ้าที่สูงขึ้นหมายความว่ามอเตอร์กำลังใช้พลังงานมากขึ้น ซึ่งอาจเกิดขึ้นเมื่อมอเตอร์กำลังยกของหนัก ดันกับวัตถุ หรือพยายามเคลื่อนที่เมื่อติดอยู่

Usage:
arm_motor.get_current()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Build Used: Competition Advanced 2.0
def main():
    # Display the motor's current when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_current())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_current())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

is_stopped#

is_stopped จะส่งคืนค่าบูลีนว่ามอเตอร์หยุดเคลื่อนที่แล้วหรือไม่ ค่านี้สามารถใช้ควบคุมจังหวะเวลาของพฤติกรรมอื่นๆ โดยอิงจากการเคลื่อนที่ของมอเตอร์ได้

  • True — มอเตอร์หยุดทำงานแล้ว

  • False — มอเตอร์ยังคงหมุนอยู่

วิธีนี้ทำงานร่วมกับเมธอด Motion ต่อไปนี้ที่มีพารามิเตอร์ wait : spin_for และ spin_to_position

Usage:
arm_motor.is_stopped()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_stopped():
            eye.set_light(OFF)
        else:
            eye.set_light(ON)

# Start threads — Do not delete
start_thread(main)

is_moving#

is_moving จะส่งคืนค่าบูลีนว่ามอเตอร์กำลังหมุนอยู่หรือไม่ ค่านี้สามารถใช้ควบคุมจังหวะเวลาของพฤติกรรมอื่นๆ โดยอิงจากการเคลื่อนที่ของมอเตอร์ได้

  • True — มอเตอร์กำลังหมุน

  • False — มอเตอร์ไม่หมุน

วิธีนี้ทำงานร่วมกับเมธอด Motion ต่อไปนี้ที่มีพารามิเตอร์ wait : spin_for และ spin_to_position

Usage:
arm_motor.is_moving()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_moving():
            eye.set_light(ON)
        else:
            eye.set_light(OFF)

# Start threads — Do not delete
start_thread(main)