Inersia#

Perkenalan#

Robot Coding VEX AIM memiliki Sensor Inersia bawaan. Sensor ini mengukur bagaimana robot bergerak dan berbelok.

Sensor Inersia menggunakan dua bagian untuk melakukan hal ini. Giroskop mengukur putaran, seperti arah, rotasi, yaw, roll, pitch, dan laju putaran robot. Akselerometer mengukur perubahan gerakan, seperti mempercepat, memperlambat, atau berhenti tiba-tiba saat terjadi tabrakan.

Metode inersia dapat digunakan untuk melacak belokan, mengukur percepatan, mendeteksi tabrakan, mengatur ulang nilai arah atau rotasi, dan mengkalibrasi sensor.

Berikut adalah daftar semua metode:

Orientasi — Atur dan setel ulang arah hadap, putaran, atau kemiringan robot.

  • get_rotation — Mengembalikan seberapa jauh robot telah berputar.

  • get_heading — Mengembalikan arah yang dihadapi robot, dari 0 hingga 359,99 derajat.

  • get_yaw — Mengembalikan sudut yaw robot.

  • get_roll — Mengembalikan sudut roll robot.

  • get_pitch — Mengembalikan sudut kemiringan robot.

  • reset_rotation — Mengatur ulang rotasi robot saat ini ke 0 derajat.

  • reset_heading — Mengatur ulang arah robot saat ini ke 0 derajat.

  • set_heading — Mengatur arah robot saat ini ke nilai arah baru.

Tabrakan — Mendeteksi tabrakan.

  • crashed — Mendaftarkan fungsi yang akan dijalankan ketika terjadi crash.

  • set_crash_sensitivity — Mengatur seberapa sensitif deteksi tabrakan terhadap benturan.

Gerakan — Mengukur percepatan dan kecepatan putar.

  • get_acceleration — Mengembalikan seberapa cepat robot mempercepat atau memperlambat pada sumbu yang dipilih.

  • get_turn_rate — Mengembalikan seberapa cepat robot berputar pada sumbu yang dipilih.

Kalibrasi — Kelola kalibrasi sensor.

  • calibrate — Mengkalibrasi Sensor Inersia.

  • is_calibrating — Mengembalikan apakah Sensor Inersia sedang melakukan kalibrasi.

Orientasi#

get_rotation#

Rotasi adalah seberapa banyak robot telah berputar, diukur dalam derajat. Tidak seperti arah, rotasi dapat meningkat melebihi 359,99 derajat atau menurun di bawah 0 derajat. Pada awal proyek, nilai rotasi diatur ke 0 derajat. get_rotation mengembalikan rotasi robot saat ini sebagai nilai float.

Memutar ke kanan akan meningkatkan rotasi, dan memutar ke kiri akan mengurangi rotasi. Misalnya, melakukan dua putaran penuh ke kanan akan menghasilkan rotasi sebesar 720 derajat. Memutar satu putaran penuh ke kiri dari 0 derajat akan menghasilkan rotasi sebesar -360 derajat.

Usage:
robot.inertial.get_rotation()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Display the robot's rotation as it rotates
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
    wait(50, MSEC)

get_heading#

Heading adalah arah yang dihadapi robot, diukur dalam derajat dari 0 hingga 359,99. get_heading mengembalikan heading robot saat ini sebagai nilai float.

Arah awal adalah 0 derajat. Jika robot berbelok melewati 359,99 derajat, arah akan kembali ke 0 derajat.

Usage:
robot.inertial.get_heading()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
    wait(50, MSEC)
robot.stop_all_movement()

# Display the robot's heading as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
    wait(50, MSEC)

get_yaw#

Yaw menggambarkan putaran robot ke kiri atau ke kanan di sekitar sumbu vertikalnya. get_yaw mengembalikan sudut yaw robot dalam rentang -180,00 hingga 180,00 derajat sebagai nilai float.

Gambar di bawah ini menggunakan panah untuk menunjukkan arah rotasi positif untuk yaw.

Robot Pemrograman VEX AIM dengan panah biru yang menunjuk ke bawah dari tengah robot. Di sekeliling panah biru, panah melengkung hitam menunjuk searah jarum jam, menunjukkan arah yaw positif.

Usage:
robot.inertial.get_yaw()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Display the robot's yaw angle as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_yaw())
    wait(50, MSEC)

get_roll#

Roll menggambarkan kemiringan robot dari sisi ke sisi. get_roll mengembalikan sudut roll robot dalam rentang -180,00 hingga 180,00 derajat sebagai nilai float.

Gambar di bawah ini menggunakan panah untuk menunjukkan arah rotasi positif untuk gerakan berguling (roll).

Robot Pemrograman VEX AIM dengan panah hijau yang memanjang di bagian depan robot, di tengah sensor Visi AI. Di sekeliling panah hijau, panah hitam melengkung berlawanan arah jarum jam, menunjukkan arah positif untuk putaran (roll).

Usage:
robot.inertial.get_roll()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Display the robot's roll angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_roll())
    wait(50, MSEC)

get_pitch#

Pitch menggambarkan kemiringan robot ke depan atau ke belakang. get_pitch mengembalikan sudut pitch robot dalam rentang -90,00 hingga 90,00 derajat sebagai nilai float.

Gambar di bawah ini menggunakan panah untuk menunjukkan arah rotasi positif untuk pitch.

Robot Pemrograman VEX AIM dengan panah merah yang memanjang di sisi robot di bawah logo VEX. Di sekeliling panah merah, panah hitam melengkung berlawanan arah jarum jam, menunjukkan arah positif untuk pitch.

Usage:
robot.inertial.get_pitch()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Display the robot's pitch angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_pitch())
    wait(50, MSEC)

reset_rotation#

reset_rotation mengatur ulang rotasi robot saat ini ke 0 derajat.

Setelah metode ini digunakan, robot akan melacak belokan selanjutnya dari nilai rotasi 0 derajat yang baru.

Usage:
robot.inertial.reset_rotation()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Reset the robot's rotation if it exceeds 180 degrees
while True:
    if robot.inertial.get_rotation() >= 180:
        robot.inertial.reset_rotation()

    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")

    wait(50, MSEC)

reset_heading#

reset_heading mengatur ulang arah pergerakan robot saat ini ke 0 derajat.

Setelah metode ini digunakan, arah robot saat ini menjadi arah baru yaitu 0 derajat.

Usage:
robot.inertial.reset_heading()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)

set_heading#

Heading adalah arah yang dihadapi robot, diukur dalam derajat dari 0 hingga 359,99. Perintah set_heading mengubah heading robot saat ini ke nilai heading baru.

Sebagai contoh, jika robot telah berputar menghadap ke kanan, mengatur arah ke 0 derajat akan menjadikan posisi menghadap ke kanan tersebut sebagai 0 derajat yang baru. Kemudian robot dapat melacak arah lain berdasarkan arah baru tersebut.

Usage:
robot.inertial.set_heading(heading)

Parameter

Keterangan

heading

Nilai haluan, dalam derajat, yang akan diatur untuk robot. Nilai ini dapat berkisar dari 0 hingga 359,99.

# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)

Menabrak#

crashed#

crashed mendaftarkan fungsi yang akan dipanggil ketika robot mendeteksi benturan atau tabrakan tiba-tiba.

Penggunaan:

robot.inertial.crashed(callback, arg)

Parameter

Keterangan

callback

Sebuah fungsi yang telah didefinisikan sebelumnya untuk dieksekusi ketika terjadi tabrakan.

arg

Opsional. Sebuah tuple yang berisi argumen untuk diteruskan ke fungsi callback. Lihat Menggunakan Fungsi dengan Parameter untuk informasi selengkapnya.

# Define what happens when a crash occurs
def crash_detected():
    # Stop all movement and indicate a crash occurred
    robot.screen.print("Crash detected")
    robot.stop_all_movement()

robot.inertial.crashed(crash_detected)

# Drive forward until crash
robot.move_at(0, 100)

set_crash_sensitivity#

set_crash_sensitivity menyesuaikan seberapa besar percepatan mendadak yang dibutuhkan agar robot mendeteksi tabrakan.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parameter

Keterangan

sensitivity

Sensitivitas benturan:

  • HIGH — Paling sensitif; mendeteksi benturan kecil dan memicu pada 1G.
  • NORMAL — Sensitivitas standar; mendeteksi benturan sedang dan memicu pada 1,5G.
  • LOW — Paling tidak sensitif; mendeteksi benturan yang lebih kuat dan memicu pada 2G.

def crashed_callback():
    robot.stop_all_movement()
    robot.sound.play(CRASH)

# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)

# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)

Gerakan#

get_acceleration#

Akselerasi adalah seberapa cepat robot mempercepat atau memperlambat. get_acceleration mengembalikan akselerasi robot pada sumbu yang dipilih, dari -4,00 G hingga 4,00 G, sebagai nilai float.

G adalah satuan yang digunakan untuk mengukur percepatan. 1 G kira-kira sama dengan percepatan yang Anda rasakan akibat gravitasi saat duduk diam.

Nilainya bisa positif atau negatif tergantung pada arah percepatan pada sumbu yang dipilih. Pada AIM, opsi sumbu diberi nama sesuai arah pada robot: FORWARD, RIGHTWARD, dan DOWNWARD.

Robot Pemrograman VEX AIM dengan panah arah yang memanjang dari tengah robot. Panah hijau berlabel maju memanjang dari bagian depan robot, panah biru berlabel ke bawah memanjang dari bagian bawah robot, dan panah merah berlabel ke kanan memanjang dari sisi robot di bawah logo VEX.

Penggunaan:

robot.inertial.get_acceleration(type)

Parameter

Keterangan

type

Sumbu untuk mengukur percepatan:

  • DOWNWARD — Mengukur percepatan sepanjang arah vertikal robot.
  • FORWARD — Mengukur percepatan sepanjang arah depan-belakang robot.
  • RIGHTWARD — Mengukur percepatan sepanjang arah samping-samping robot.

# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()

robot.move_at(90, 100)
wait(0.1, SECONDS)

robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")

get_turn_rate#

Kecepatan putar adalah seberapa cepat robot berputar. get_turn_rate mengembalikan kecepatan putar robot dalam derajat per detik \(dps\) sebagai nilai float, dari -1000,00 hingga 1000,00 dps.

Nilainya bisa positif atau negatif tergantung pada arah rotasi robot pada sumbu yang dipilih. Gambar di bawah menggunakan panah untuk menunjukkan arah rotasi positif untuk roll, pitch, dan yaw.

Robot Pemrograman VEX AIM dengan panah arah yang memanjang dari tengah robot. Panah hijau berlabel roll memanjang dari bagian depan robot dengan panah melengkung hitam yang mengarah berlawanan arah jarum jam di sekitarnya. Panah biru berlabel Yaw memanjang dari bagian bawah robot dengan panah melengkung hitam yang mengarah searah jarum jam di sekitarnya. Dan panah merah berlabel Pitch memanjang dari sisi robot di bawah logo VEX, dengan panah melengkung hitam yang mengarah berlawanan arah jarum jam di sekitarnya.

Usage:
robot.inertial.get_turn_rate(axis)

Parameter

Keterangan

axis

Orientasi mana yang harus dikembalikan:

  • YAW
  • ROLL
  • PITCH
# Display the gyro rate as the robot is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_turn_rate(YAW))
    wait(50, MSEC)

Kalibrasi#

Kalibrasi membantu Sensor Inersia mengukur putaran dengan benar dengan mengukur dan mengkompensasi noise dan drift sensor selama periode 2 detik. Selama waktu ini, robot harus tetap diam sepenuhnya di permukaan yang stabil. Pergerakan selama kalibrasi dapat menghasilkan hasil yang tidak akurat.

Robot VEX mencoba mengkalibrasi diri secara otomatis saat dinyalakan, menunggu hingga tidak mendeteksi gerakan. Namun, jika robot sedang dibawa atau dipindahkan selama proses penyalaan, sensor mungkin gagal mengkalibrasi dengan benar atau menghasilkan kalibrasi yang salah.

Jika proyek Anda sangat bergantung pada arah yang akurat, atau jika Anda membutuhkan belokan yang konsisten dan berulang, memanggil calibrate di awal kode Anda dapat membantu. Sebaiknya tampilkan pesan seperti “Calibrating…” di layar robot selama kalibrasi, lalu perbarui menjadi “Calibration complete.” setelahnya untuk mengingatkan Anda (dan siapa pun yang menggunakan robot) bahwa robot harus tetap diam selama periode ini.

calibrate#

calibrate mengkalibrasi giroskop. Kalibrasi membantu Sensor Inersia mengukur putaran dengan benar dengan mengukur dan mengkompensasi noise dan drift sensor selama periode 2 detik. Selama waktu ini, robot harus tetap diam sepenuhnya di permukaan yang stabil. Pergerakan selama kalibrasi dapat menghasilkan hasil yang tidak akurat.

Robot VEX mencoba mengkalibrasi diri secara otomatis saat dinyalakan, menunggu hingga tidak mendeteksi gerakan. Namun, jika robot sedang dibawa atau dipindahkan selama proses penyalaan, sensor mungkin gagal mengkalibrasi dengan benar atau menghasilkan kalibrasi yang salah.

Usage:
robot.inertial.calibrate()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)

is_calibrating#

is_calibrating mengembalikan nilai Boolean yang menunjukkan apakah Sensor Inersia sedang melakukan kalibrasi.

  • True — Sensor Inersia sedang melakukan kalibrasi.

  • False — Sensor Inersia tidak sedang dikalibrasi.

Usage:
robot.inertial.is_calibrating()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
    robot.screen.show_emoji(THINKING)
    wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)