জড়তা#
ভূমিকা#
VEX AIM কোডিং রোবটটিতে একটি অন্তর্নির্মিত ইনার্শিয়াল সেন্সর রয়েছে। এই সেন্সরটি রোবটটির চলাচল ও মোড় নেওয়ার পদ্ধতি পরিমাপ করে।
ইনার্শিয়াল সেন্সর এই কাজটি করার জন্য দুটি অংশ ব্যবহার করে। জাইরোস্কোপ রোবটের দিক পরিবর্তন পরিমাপ করে, যেমন—তার অভিমুখ, ঘূর্ণন, ইয়ো, রোল, পিচ এবং বাঁকের হার। অ্যাক্সেলেরোমিটার গতির পরিবর্তন পরিমাপ করে, যেমন—গতি বেড়ে যাওয়া, কমে যাওয়া, বা কোনো সংঘর্ষের সময় হঠাৎ থেমে যাওয়া।
ইনার্শিয়াল পদ্ধতিগুলো বাঁক ট্র্যাক করতে, ত্বরণ পরিমাপ করতে, সংঘর্ষ শনাক্ত করতে, হেডিং বা ঘূর্ণন মান রিসেট করতে এবং সেন্সর ক্যালিব্রেট করতে ব্যবহার করা যেতে পারে।
নিম্নে সকল পদ্ধতির একটি তালিকা দেওয়া হলো:
অভিমুখ — রোবটটি কোন দিকে মুখ করে আছে, ঘুরছে বা কাত হচ্ছে তা জানুন এবং পুনরায় সেট করুন।
get_rotation— রোবটটি কতটুকু ঘুরেছে তা ফেরত দেয়।get_heading— রোবটটি যে দিকে মুখ করে আছে তা ফেরত দেয়, 0 থেকে 359.99 ডিগ্রির মধ্যে।get_yaw— রোবটের ইয়ো অ্যাঙ্গেল ফেরত দেয়।get_roll— রোবটের রোল অ্যাঙ্গেল ফেরত দেয়।get_pitch— রোবটের পিচ কোণ ফেরত দেয়।reset_rotation— রোবটের বর্তমান ঘূর্ণন 0 ডিগ্রিতে রিসেট করে।reset_heading— রোবটের বর্তমান হেডিং 0 ডিগ্রিতে রিসেট করে।set_heading— রোবটের বর্তমান হেডিং একটি নতুন হেডিং মানে সেট করে।
দুর্ঘটনা — সংঘর্ষ শনাক্ত করুন।
crashed— ক্র্যাশ শনাক্ত হলে চালানোর জন্য একটি ফাংশন নিবন্ধন করে।set_crash_sensitivity— সংঘর্ষের প্রতি ক্র্যাশ সনাক্তকরণ কতটা সংবেদনশীল হবে তা নির্ধারণ করে।
গতি — ত্বরণ এবং মোড় নেওয়ার গতি পরিমাপ করুন।
get_acceleration— নির্বাচিত অক্ষে রোবটটি কত দ্রুত গতি বাড়াচ্ছে বা কমাচ্ছে তা ফেরত দেয়।get_turn_rate— নির্বাচিত অক্ষে রোবটটি কত দ্রুত ঘুরছে তা ফেরত দেয়।
ক্যালিব্রেশন — সেন্সর ক্যালিব্রেশন পরিচালনা করুন।
calibrate— ইনার্শিয়াল সেন্সর ক্যালিব্রেট করে।is_calibrating— ইনার্শিয়াল সেন্সরটি বর্তমানে ক্যালিব্রেট হচ্ছে কিনা তা ফেরত দেয়।
অভিমুখীকরণ#
get_rotation#
রোবটটি কতটা ঘুরেছে, তাকেই রোটেশন বলা হয়, যা ডিগ্রিতে পরিমাপ করা হয়। হেডিং-এর মতো নয়, রোটেশন ৩৫৯.৯৯ ডিগ্রির বেশি বা ০ ডিগ্রির নিচে কমতে পারে। একটি প্রোজেক্টের শুরুতে, রোটেশনের মান ০ ডিগ্রিতে সেট করা থাকে। get_rotation কমান্ডটি রোবটের বর্তমান রোটেশনকে একটি ফ্লোট হিসেবে রিটার্ন করে।
ডানদিকে ঘোরালে ঘূর্ণন বাড়ে এবং বামদিকে ঘোরালে ঘূর্ণন কমে। উদাহরণস্বরূপ, ডানদিকে দুটি পূর্ণ পাক দিলে ঘূর্ণন হবে ৭২০ ডিগ্রি। ০ ডিগ্রি থেকে বামদিকে একটি পূর্ণ পাক দিলে ঘূর্ণন হবে -৩৬০ ডিগ্রি।
Usage:
robot.inertial.get_rotation()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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#
হেডিং হলো রোবটের অভিমুখ, যা ০ থেকে ৩৫৯.৯৯ ডিগ্রির মধ্যে পরিমাপ করা হয়। get_heading রোবটের বর্তমান হেডিং একটি ফ্লোট হিসেবে ফেরত দেয়।
প্রারম্ভিক অভিমুখ ০ ডিগ্রি। যদি রোবটটি ৩৫৯.৯৯ ডিগ্রি অতিক্রম করে ঘুরে যায়, তবে অভিমুখটি পুনরায় ০ ডিগ্রিতে ফিরে আসে।
Usage:
robot.inertial.get_heading()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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 রোবটের তার উল্লম্ব অক্ষের চারপাশে বাম বা ডান দিকে ঘোরার বিষয়টি বর্ণনা করে। get_yaw হলে রোবটের ইয়াও কোণ -180.00 থেকে 180.00 ডিগ্রির মধ্যে একটি ফ্লোট হিসাবে ফেরত দেয়।
নিচের চিত্রটিতে তীর চিহ্ন ব্যবহার করে ইয়ো (yaw)-এর ধনাত্মক ঘূর্ণনের দিক দেখানো হয়েছে।
Usage:
robot.inertial.get_yaw()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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 বলতে রোবটের একপাশ থেকে অন্যপাশে হেলে পড়াকে বোঝায়। get_roll-এর মান get_roll হলে, এটি রোবটের রোল অ্যাঙ্গেলকে -180.00 থেকে 180.00 ডিগ্রির মধ্যে একটি ফ্লোট হিসেবে রিটার্ন করে।
নিচের চিত্রটিতে তীর চিহ্ন ব্যবহার করে রোলের ধনাত্মক ঘূর্ণনের দিক দেখানো হয়েছে।
Usage:
robot.inertial.get_roll()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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#
পিচ রোবটের সামনে বা পিছনে হেলে পড়াকে বোঝায়। get_pitch-এর মান get_pitch হলে, এটি রোবটের পিচ কোণকে -90.00 থেকে 90.00 ডিগ্রির পরিসরে একটি ফ্লোট হিসেবে ফেরত দেয়।
নিচের চিত্রটিতে তীর চিহ্ন ব্যবহার করে পিচের ধনাত্মক ঘূর্ণনের দিক দেখানো হয়েছে।
Usage:
robot.inertial.get_pitch()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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 রোবটের বর্তমান ঘূর্ণনকে ০ ডিগ্রিতে রিসেট করে।
এই পদ্ধতিটি ব্যবহার করার পর, রোবটটি নতুন ০ ডিগ্রি ঘূর্ণন মান থেকে ভবিষ্যতের বাঁকগুলো ট্র্যাক করে।
Usage:
robot.inertial.reset_rotation()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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 রোবটের বর্তমান হেডিং ০ ডিগ্রিতে রিসেট করে।
এই পদ্ধতিটি ব্যবহার করার পর, রোবটটির বর্তমান দিকটি নতুন ০ ডিগ্রি অভিমুখ হয়ে যায়।
Usage:
robot.inertial.reset_heading()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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#
হেডিং হলো রোবটের অভিমুখ, যা ০ থেকে ৩৫৯.৯৯ ডিগ্রি পর্যন্ত পরিমাপ করা হয়। set_heading রোবটের বর্তমান হেডিং পরিবর্তন করে একটি নতুন হেডিং মানে সেট করে।
উদাহরণস্বরূপ, যদি রোবটটি ডানদিকে মুখ করে, তবে হেডিং ০ ডিগ্রিতে সেট করলে সেই ডানমুখী অবস্থানটিই নতুন ০ ডিগ্রি হয়ে যায়। এরপর রোবটটি সেই নতুন দিকের উপর ভিত্তি করে অন্যান্য হেডিং ট্র্যাক করতে পারে।
Usage:
robot.inertial.set_heading(heading)
প্যারামিটার |
বর্ণনা |
|---|---|
|
রোবটের জন্য নির্ধারণ করার হেডিং ভ্যালু, ডিগ্রিতে। এর মান ০ থেকে ৩৫৯.৯৯-এর মধ্যে হতে পারে। |
# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)
দুর্ঘটনা#
crashed#
crashed এমন একটি ফাংশন রেজিস্টার করে যা রোবট কোনো আকস্মিক আঘাত বা সংঘর্ষ শনাক্ত করলে কল করা হবে।
ব্যবহারবিধি:
robot.inertial.crashed(callback, arg)
প্যারামিটার |
বর্ণনা |
|---|---|
|
একটি ফাংশন যা সংঘর্ষ সনাক্ত হলে কার্যকর হওয়ার জন্য পূর্বে সংজ্ঞায়িত করা হয়েছে। |
|
ঐচ্ছিক। কলব্যাক ফাংশনে পাস করার জন্য আর্গুমেন্ট ধারণকারী একটি টাপল। আরও তথ্যের জন্য প্যারামিটার সহ ফাংশনের ব্যবহার দেখুন। |
# 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 set_crash_sensitivity নির্ধারণ করে যে, একটি রোবটের সংঘর্ষ শনাক্ত করার জন্য ঠিক কতটা আকস্মিক ত্বরণের প্রয়োজন হবে।
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
প্যারামিটার |
বর্ণনা |
|---|---|
|
ক্র্যাশ সংবেদনশীলতা:
|
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)
গতি#
get_acceleration#
ত্বরণ হলো রোবটটি কত দ্রুত গতি বাড়াচ্ছে বা কমাচ্ছে। get_acceleration get_acceleration নির্বাচিত অক্ষে রোবটের ত্বরণকে -4.00 G থেকে 4.00 G পর্যন্ত একটি ফ্লোট মান হিসাবে ফেরত দেয়।
G প্রায় ১ G।
নির্বাচিত অক্ষের ত্বরণের দিকের উপর নির্ভর করে মানটি ধনাত্মক বা ঋণাত্মক হতে পারে। AIM-এ, অক্ষের বিকল্পগুলির নামকরণ রোবটের দিক অনুসারে করা হয়েছে: FORWARD, RIGHTWARD, এবং DOWNWARD।

ব্যবহারবিধি:
robot.inertial.get_acceleration(type)
প্যারামিটার |
বর্ণনা |
|---|---|
|
যে অক্ষে ত্বরণ পরিমাপ করা হবে:
|
# 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#
টার্ন রেট হলো রোবটটি কত দ্রুত ঘুরছে। get_turn_rate get_turn_rate হলে রোবটের ঘোরার হার প্রতি সেকেন্ডে ডিগ্রি \(dps\) এককে একটি ফ্লোট মান হিসেবে ফেরত দেয়, যার মান -1000.00 থেকে 1000.00 dps পর্যন্ত হতে পারে।
নির্বাচিত অক্ষে রোবটটি যে দিকে ঘুরছে, তার উপর নির্ভর করে মানটি ধনাত্মক বা ঋণাত্মক হতে পারে। নিচের চিত্রটিতে রোল, পিচ এবং ইয়ো-এর ধনাত্মক ঘূর্ণনের দিক দেখানোর জন্য তীরচিহ্ন ব্যবহার করা হয়েছে।

Usage:
robot.inertial.get_turn_rate(axis)
প্যারামিটার |
বর্ণনা |
|---|---|
|
কোন অভিমুখে ফিরে আসতে হবে:
|
# 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)
ক্রমাঙ্কন#
ক্যালিব্রেশন ২-সেকেন্ড সময় ধরে সেন্সরের নয়েজ এবং ড্রিফট পরিমাপ ও তার ক্ষতিপূরণ করার মাধ্যমে ইনার্শিয়াল সেন্সরকে সঠিকভাবে বাঁক পরিমাপ করতে সাহায্য করে। এই সময়ে, রোবটটিকে অবশ্যই একটি স্থিতিশীল পৃষ্ঠের উপর সম্পূর্ণ স্থির থাকতে হবে। ক্যালিব্রেশনের সময় নড়াচড়া করলে ভুল ফলাফল আসতে পারে।
VEX রোবটগুলো চালু হওয়ার সময় স্বয়ংক্রিয়ভাবে নিজেদের ক্যালিব্রেট করার চেষ্টা করে এবং কোনো নড়াচড়া শনাক্ত না করা পর্যন্ত অপেক্ষা করে। তবে, চালু হওয়ার সময় যদি রোবটটিকে বহন করা হয় বা সরানো হয়, তাহলে সেন্সরটি সঠিকভাবে ক্যালিব্রেট হতে ব্যর্থ হতে পারে অথবা ভুল ক্যালিব্রেশন দেখাতে পারে।
যদি আপনার প্রজেক্টটি একটি নির্ভুল হেডিং-এর উপর ব্যাপকভাবে নির্ভরশীল হয়, অথবা যদি আপনার সামঞ্জস্যপূর্ণ এবং পুনরাবৃত্তিযোগ্য বাঁকের প্রয়োজন হয়, তবে আপনার কোডের শুরুতে calibrate কল করা সহায়ক হতে পারে। ক্যালিব্রেশনের সময় রোবটের স্ক্রিনে “Calibrating…”-এর মতো একটি বার্তা প্রদর্শন করা এবং পরে এটিকে “Calibration complete.”-এ আপডেট করা একটি ভালো অভ্যাস, যা আপনাকে (এবং রোবট ব্যবহারকারী অন্য যে কাউকে) মনে করিয়ে দেয় যে এই সময়কালে রোবটটিকে অবশ্যই স্থির থাকতে হবে।
calibrate#
calibrate জাইরোকে ক্যালিব্রেট করে। ক্যালিব্রেশন ২-সেকেন্ড সময় ধরে সেন্সরের নয়েজ এবং ড্রিফট পরিমাপ ও তার ক্ষতিপূরণ করার মাধ্যমে ইনার্শিয়াল সেন্সরকে সঠিকভাবে বাঁক পরিমাপ করতে সাহায্য করে। এই সময়ে, রোবটটিকে অবশ্যই একটি স্থিতিশীল পৃষ্ঠের উপর সম্পূর্ণ স্থির থাকতে হবে। ক্যালিব্রেশনের সময় নড়াচড়া করলে ভুল ফলাফল আসতে পারে।
VEX রোবটগুলো চালু হওয়ার সময় স্বয়ংক্রিয়ভাবে নিজেদের ক্যালিব্রেট করার চেষ্টা করে এবং কোনো নড়াচড়া শনাক্ত না করা পর্যন্ত অপেক্ষা করে। তবে, চালু হওয়ার সময় যদি রোবটটিকে বহন করা হয় বা সরানো হয়, তাহলে সেন্সরটি সঠিকভাবে ক্যালিব্রেট হতে ব্যর্থ হতে পারে অথবা ভুল ক্যালিব্রেশন দেখাতে পারে।
Usage:
robot.inertial.calibrate()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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 একটি বুলিয়ান মান প্রদান করে যা নির্দেশ করে যে ইনার্শিয়াল সেন্সরটি ক্যালিব্রেট হচ্ছে কিনা।
True— ইনার্শিয়াল সেন্সরটি ক্যালিব্রেট করা হচ্ছে।False— ইনার্শিয়াল সেন্সরটি ক্যালিব্রেট হচ্ছে না।
Usage:
robot.inertial.is_calibrating()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# 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)