সুচিপত্র:

GiggleBot লাইন ফলোয়ার টিউনিং - উন্নত: 7 ধাপ
GiggleBot লাইন ফলোয়ার টিউনিং - উন্নত: 7 ধাপ

ভিডিও: GiggleBot লাইন ফলোয়ার টিউনিং - উন্নত: 7 ধাপ

ভিডিও: GiggleBot লাইন ফলোয়ার টিউনিং - উন্নত: 7 ধাপ
ভিডিও: GiggleBot Controlled with micro:bit 2024, নভেম্বর
Anonim
GiggleBot লাইন ফলোয়ার টিউনিং - উন্নত
GiggleBot লাইন ফলোয়ার টিউনিং - উন্নত

এই খুব সংক্ষিপ্ত নির্দেশিকাগুলিতে আপনি একটি কালো লাইন অনুসরণ করতে আপনার নিজের GiggleBot টিউন করতে যাচ্ছেন। এই অন্যান্য টিউটোরিয়াল GiggleBot লাইন ফলোয়ারে, আমরা সেই দৃশ্য অনুযায়ী কাজ করার জন্য টিউনিং মানগুলিকে হার্ড-কোডেড করেছি। আপনি অন্যান্য লাভের সাথে এসে এটিকে আরও ভাল আচরণ করতে চাইতে পারেন।

এই টিউটোরিয়ালে, আমরা আপনাকে 2 টি স্ক্রিপ্ট দেখিয়েছি যা উভয়ই বিভিন্ন বিবিসি মাইক্রো: বিটগুলিতে লোড করা যায় যাতে তাদের মধ্যে একটিকে গিগলবোটের মধ্যে রাখা হয় এবং অন্যটি দিয়ে 2 টি বোতাম মেনুতে যেতে এবং ভিন্ন সুর করতে ব্যবহৃত হয় পরামিতি এই আপডেট হওয়া প্যারামিটার পাঠানো হয় রেডিওর মাধ্যমে।

ধাপ 1: প্রয়োজনীয় উপাদান

আপনি নিম্নলিখিত প্রয়োজন হবে:

  1. মাইক্রো: বিটের জন্য একটি গিগলবট রোবট।
  2. x3 AA ব্যাটারী
  3. x2 বিবিসি মাইক্রো: বিটস - একটি গিগলবটের জন্য এবং অন্যটি টিউনিং প্যারামিটারের জন্য রিমোট হিসেবে কাজ করে।
  4. বিবিসি মাইক্রোর জন্য একটি ব্যাটারি: বিট - যেমন বিবিসি মাইক্রো: বিট প্যাকেজের মধ্যে আসে।

বিবিসি মাইক্রোর জন্য গিগলবট রোবট পান: এখানে।

ধাপ 2: ট্র্যাক এবং পরিবেশ স্থাপন করা

ট্র্যাক এবং পরিবেশ স্থাপন
ট্র্যাক এবং পরিবেশ স্থাপন
ট্র্যাক এবং পরিবেশ স্থাপন
ট্র্যাক এবং পরিবেশ স্থাপন

আপনাকে আসলে আপনার ট্র্যাকগুলি (ডাউনলোড, মুদ্রণ, কাটা এবং টেপ টাইলস) তৈরি করতে হবে এবং তারপরে পরিবেশ (আইডিই এবং রানটাইম) সেট আপ করতে হবে।

যেহেতু এই টিউটোরিয়ালটি GiggleBot লাইন ফলোয়ার শিরোনামের এই অন্যান্য টিউটোরিয়ালের সাথে খুব সম্পর্কিত, তাই সেখানে যান এবং 2 এবং 3 ধাপ অনুসরণ করুন এবং তারপর এখানে ফিরে আসুন।

IDE এর জন্য, আপনি Mu সম্পাদক ব্যবহার করতে পারেন এবং রানটাইমের জন্য আপনাকে GiggleBot MicroPython Runtime ডাউনলোড করতে হবে। রানটাইম এর ডকুমেন্টেশন থেকে ডাউনলোড করা যাবে এখানে। ডকুমেন্টেশনের শুরু করা অধ্যায়ের দিকে যান এবং পরিবেশ স্থাপনের জন্য সেই নির্দেশাবলী অনুসরণ করুন। এই মুহূর্তে, রানটাইমের ভার্সন v0.4.0 ব্যবহার করা হয়েছে।

ধাপ 3: GiggleBot সেট আপ

GiggleBot এ রানটাইম ফ্ল্যাশ করার আগে, নিশ্চিত করুন যে আপনি GiggleBot- এর জন্য আপনার পছন্দসই গতি এবং আপডেট হার বেছে নিয়েছেন: ডিফল্টরূপে, গতি 100 (base_speed পরিবর্তনশীল) এবং আপডেট হার 70 (update_rate পরিবর্তনশীল) সেট করা আছে।

বর্তমান বাস্তবায়নের পরিপ্রেক্ষিতে, সর্বোচ্চ আপডেট হার যা অর্জন করা যায় তা হল 70 এবং যদি run_neopixels সত্যে সেট করা হয়, তাহলে মাত্র 50 টি অর্জনযোগ্য। সুতরাং একটি উপায়ে, আপনি বলতে পারেন যে ডিফল্ট আপডেট হার বিবিসি মাইক্রো: বিট যা করতে পারে তার প্রান্তে ঠিক।

শুধু রেকর্ডের জন্য, লাইন ফলোয়ার সেন্সর প্রতি সেকেন্ডে ১০০ বার আপডেট ফিরিয়ে দিতে পারে।

দ্রষ্টব্য: নিম্নলিখিত স্ক্রিপ্টে হোয়াইটস্পেস অনুপস্থিত থাকতে পারে এবং এটি GitHub Gists প্রদর্শনে কিছু সমস্যার কারণে বলে মনে হচ্ছে। আপনাকে তার গিটহাব পৃষ্ঠায় নিয়ে যাওয়ার জন্য সারসংকলনে ক্লিক করুন যেখানে আপনি কোডটি কপি-পেস্ট করতে পারেন।

GiggleBot PID লাইন ফলোয়ার টিউনার (এটি টিউন করার জন্য রিমোট প্রয়োজন) - xjfls23

মাইক্রোবিট আমদানি থেকে*
gigglebot আমদানি থেকে*
utime আমদানি sleep_ms, ticks_us থেকে
আমদানি রেডিও
আমদানি ustruct
# রেডিও এবং জিবি নিওপিক্সেল শুরু করুন
radio.on ()
নিও = init ()
# সময়
update_rate = 70
# ডিফল্ট লাভ মান
কেপি = 0.0
কি = 0.0
কেডি = 0.0
সেটপয়েন্ট = 0.5
trigger_point = 0.0
min_speed_percent = 0.2
base_speed = 100
last_position = setpoint
অবিচ্ছেদ্য = 0.0
run_neopixels = মিথ্যা
center_pixel = 5# যেখানে হাসির সেন্টার পিক্সেল GB তে অবস্থিত
# ফিরোজা = টুপল (মানচিত্র (ল্যাম্বদা এক্স: ইন্ট (x / 5), (64, 224, 208))) # রঙের ব্যবহার করে নিওপিক্সেল দিয়ে ত্রুটি আঁকতে
# ফিরোজা = (12, 44, 41) # যা ঠিক উপরের ফিরোজা এর উপরে মন্তব্য করেছে
error_width_per_pixel = 0.5/3# সর্বোচ্চ ত্রুটি প্রতিটি নিওপিক্সেলের মধ্যে সেগমেন্ট সংখ্যা দ্বারা বিভক্ত
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, smallest_motor_power, highest_motor_power):
গ্লোবাল বেস_স্পিড
যদি abs_error> = trigger_point:
# x0 = 0.0
# y0 = 0.0
# x1 = উপরের_বাউন্ড - ট্রিগার_পয়েন্ট
# y1 = 1.0
# x = abs_error - trigger_point
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# একই রকম
y = (abs_error - trigger_point) / (উপরের_বাউন্ড - trigger_point)
মোটর -পাওয়ার = বেস_স্পিড * (ক্ষুদ্রতম_মোটর -পাওয়ার + (1- y) * (সর্বোচ্চ_মোটর -পাওয়ার - ক্ষুদ্রতম_মোটর -পাওয়ার))
মোটর_পরিবর্তন
অন্য:
রিটার্ন বেস_স্পিড * সর্বোচ্চ_মোটর_ পাওয়ার
চালান = মিথ্যা
পূর্ববর্তী ত্রুটি = 0
মোট_ সময় = 0.0
মোট_গণনা = 0
যখন সত্য:
# যদি একটি বোতাম টিপানো হয় তাহলে অনুসরণ শুরু করুন
যদি button_a.is_pressed ():
চালান = সত্য
# কিন্তু যদি বোতামটি চাপানো হয় তবে লাইন অনুসারী বন্ধ করুন
যদি button_b.is_pressed ():
চালান = মিথ্যা
অবিচ্ছেদ্য = 0.0
পূর্ববর্তী ত্রুটি = 0.0
display.scroll ('{} - {}'। বিন্যাস (total_time, total_counts), বিলম্ব = 100, অপেক্ষা = মিথ্যা)
মোট_ সময় = 0.0
মোট_গণনা = 0
পিক্সেল_অফ ()
থামুন ()
ঘুম_এমএস (500)
যদি রান সত্য হয়:
# লাইন সেন্সর পড়ুন
start_time = ticks_us ()
# আমরা রিমোট দিয়ে কেপি/কেডি লাভ আপডেট করেছি কিনা তা পরীক্ষা করুন
চেষ্টা করুন:
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ())
set_eyes ()
টাইপ এরর ছাড়া:
পাস
ডান, বাম = read_sensor (LINE_SENSOR, উভয়)
# লাইন বাম দিকে যখন অবস্থান <0.5
# লাইন ডানদিকে যখন অবস্থান> 0.5
# লাইন মাঝখানে যখন অবস্থান = 0.5
# এটি একটি ওজনযুক্ত গাণিতিক গড়
চেষ্টা করুন:
অবস্থান = ডান /ভাসা (বাম + ডান)
জিরো ডিভিশন ত্রুটি ছাড়া:
অবস্থান = 0.5
যদি অবস্থান == 0: অবস্থান = 0.001
যদি অবস্থান == 1: অবস্থান = 0.999
# একটি পিডি কন্ট্রোলার ব্যবহার করুন
ত্রুটি = অবস্থান - সেটপয়েন্ট
অবিচ্ছেদ্য += ত্রুটি
সংশোধন = কেপি * ত্রুটি + কি * অবিচ্ছেদ্য + কেডি * (ত্রুটি - পূর্ববর্তী_ ত্রুটি)
previous_error = ত্রুটি
# মোটর গতি গণনা করুন
motor_speed = উপরের_বাউন্ড_লাইনার_স্পিড_রেডিউসার (abs (error), setpoint * trigger_point, setpoint, min_speed_percent, 1.0)
leftMotorSpeed = motor_speed + correction
rightMotorSpeed = motor_speed - সংশোধন
# গিগলবটকে কোন দিকে যেতে হবে তা দেখানোর জন্য নিওপিক্সেলগুলি আলোকিত করুন
যদি run_neopixels isTrueand total_counts %3 == 0:
আমি inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08' এর জন্য:
নিও [আমি] = (0, 0, 0)
আমি inb '\ x00 / x01 / x02 / x03' এর জন্য:
ifabs (error)> error_width_per_pixel * i:
যদি ত্রুটি <0:
neo [center_pixel + i] = (12, 44, 41)
অন্য:
neo [center_pixel - i] = (12, 44, 41)
অন্য:
শতাংশ = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel
# বর্তমান পিক্সেল হালকা করুন
যদি ত্রুটি <0:
# নিও [সেন্টার_পিক্সেল + আই] = টুপল (মানচিত্র (ল্যাম্বদা x: int (x * শতাংশ), ফিরোজা))
neo [center_pixel + i] = (int (12* শতাংশ), int (44* শতাংশ), int (41* শতাংশ))
অন্য:
# নিও [কেন্দ্র_পিক্সেল - আমি] = টুপল (মানচিত্র (ল্যাম্বদা x: int (x * শতাংশ), ফিরোজা))
neo [center_pixel - i] = (int (12* শতাংশ), int (44* শতাংশ), int (41* শতাংশ))
বিরতি
neo.show ()
চেষ্টা করুন:
# মোটর ক্লিপ করুন
যদি leftMotorSpeed> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
যদি rightMotorSpeed> 100:
rightMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100
যদি leftMotorSpeed <-100:
leftMotorSpeed = -100
যদি rightMotorSpeed <-100:
rightMotorSpeed = -100
# মোটর চালু করুন
set_speed (leftMotorSpeed, RightMotorSpeed)
ড্রাইভ ()
# মুদ্রণ ((ত্রুটি, মোটর_স্পিড))
ছাড়া:
# যদি আমরা কিছু অমীমাংসিত সমস্যায় পড়ি
পাস
# এবং লুপ ফ্রিকোয়েন্সি বজায় রাখুন
end_time = ticks_us ()
delay_diff = (end_time - start_time) /1000
মোট_ সময় += বিলম্ব_ পার্থক্য
মোট_ গণনা += 1
if1.0/ update_rate - delay_diff> 0:
ঘুম (1.0/ update_rate - delay_diff)

GitHub দ্বারা raw দিয়ে হোস্ট করা rawgigglebot_line_follower_tuner.py দেখুন

ধাপ 4: টিউনার সেট করা (দূরবর্তী)

পরবর্তী কাজটি আমাদের করতে হবে রানটাইম + স্ক্রিপ্টকে ২ য় বিবিসি মাইক্রো: বিট। এই দ্বিতীয় মাইক্রো: বিটটি GiggleBot- এর রিমোট হিসেবে কাজ করবে, যা নিম্নলিখিত প্যারামিটারগুলিকে টিউন করতে ব্যবহৃত হবে:

  1. পিআইডি কন্ট্রোলারের জন্য কেপি = আনুপাতিক লাভ।
  2. পিআইডি নিয়ন্ত্রকের জন্য কি = অবিচ্ছেদ্য লাভ।
  3. পিআইডি কন্ট্রোলারের জন্য কেডি = ডেরিভেটিভ লাভ।
  4. trigger_point = GiggleBot এর সর্বনিম্ন এবং সর্বোচ্চ গতির মধ্যে শতাংশে প্রকাশ করা বিন্দু যেখানে গতি সর্বনিম্ন গতিতে না পৌঁছানো পর্যন্ত রৈখিকভাবে হ্রাস পেতে শুরু করে।
  5. min_speed_percent = সর্বনিম্ন গতি সর্বোচ্চ গতির শতাংশে প্রকাশ।

অন্যান্য 2 টি অবশিষ্ট ভেরিয়েবল যা টিউন করা যায় সেগুলি স্ক্রিপ্টে সরাসরি কঠিন কোডেড হয় যা GiggleBot- এ বসে থাকে: update_rate এবং base_speed যা সর্বাধিক গতির প্রতিনিধিত্ব করে। ডকুমেন্টেশনে বর্ণিত, GiggleBot- এর জন্য সর্বোচ্চ গতি নির্ধারণ করা যেতে পারে 100, যা আমাদের GiggleBot- এর জন্য ডিফল্ট মান।

দ্রষ্টব্য: নিম্নলিখিত স্ক্রিপ্টে হোয়াইটস্পেস অনুপস্থিত থাকতে পারে এবং এটি GitHub Gists প্রদর্শনে কিছু সমস্যার কারণে বলে মনে হচ্ছে। আপনাকে তার গিটহাব পৃষ্ঠায় নিয়ে যাওয়ার জন্য সারসংকলনে ক্লিক করুন যেখানে আপনি কোডটি কপি-পেস্ট করতে পারেন।

গিগলবট রিমোট পিআইডি লাইন ফলোয়ার টিউনার (অন্য অংশের প্রয়োজন) - xjfls23

মাইক্রোবিট আমদানি থেকে*
ইউটিম আমদানি ঘুম_এমএস থেকে
আমদানি রেডিও
আমদানি ustruct
# 1 ম উপাদান হল Kp লাভ
# ২ য় উপাদান হল কি লাভ
# তৃতীয় উপাদান হল Kd লাভ
# 4th র্থ উপাদান হল মোটরের গতি কমিয়ে আনার জন্য ট্রিগার_পয়েন্ট (0 -> 1)
# 5 ম উপাদান হল মোটরগুলির ন্যূনতম গতি যা শতাংশে প্রকাশ করা হয় (0 -> 1)
লাভ = [0.0, 0.0, 0.0, 1.0, 0.0]
stepSize = 0.1
প্রথম উপাদানটির জন্য # 0 এবং 1
দ্বিতীয় এলিমেন্টের জন্য # 2 এবং 3
currentSetting = 0
ডিফশো মেনু ():
display.scroll ('{} - {}'। ফরম্যাট (currentSetting, gains [int (currentSetting /2)]), বিলম্ব = 100, অপেক্ষা = মিথ্যা)
radio.on ()
শো মেনু ()
যখন সত্য:
আপডেট = মিথ্যা
যদি button_a.is_pressed ():
currentSetting = (currentSetting +1) % (2*5)
আপডেট = সত্য
যদি button_b.is_pressed ():
যদি currentSetting %2 == 0:
# বৃদ্ধি যখন কারেন্টসেটিং 0 বা 2 বা..
ifint (currentSetting /2) [0, 2] এ:
লাভ [int (currentSetting /2)] += 10* stepSize
অন্য:
লাভ [int (currentSetting /2)] += stepSize
অন্য:
# বৃদ্ধি যখন কারেন্টসেট 1 বা 3 বা..
ifint (currentSetting /2) [0, 2] এ:
লাভ [int (currentSetting /2)] -= 10* stepSize
অন্য:
লাভ [int (currentSetting /2)] -= stepSize
radio.send_bytes (ustruct.pack ('fffff', *লাভ))
আপডেট = সত্য
যদি আপডেট করা হয়:
শো মেনু ()
ঘুম_এমএস (200)

GitHub দ্বারা raw দিয়ে হোস্ট করা rawgigglebot_line_follower_configurator.py দেখুন

ধাপ 5: GiggleBot টিউনিং

GiggleBot টিউন করা
GiggleBot টিউন করা

ট্র্যাকের উপর GiggleBot রাখুন, এটি চালু করুন এবং এটি চালাতে দিন। ইতিমধ্যে, আপনাকে ক্রমাগত এটিকে ট্র্যাকে ফিরিয়ে আনতে হবে এবং অন্যান্য বিবিসি মাইক্রো: বিট যা আপনি আপনার হাতে ধরে রেখেছেন তার সাথে লাভ/পরামিতিগুলি টিউন করতে হবে।

GiggleBot শুরু করার জন্য, GiggleBot এর BBC মাইক্রো: বিট এ বোতাম টিপুন এবং এটি বন্ধ করতে এবং এইভাবে বোতাম B তে তার স্টেট প্রেস রিসেট করুন।

দূরবর্তী বিবিসি মাইক্রো: বিট এ, বোতাম টিপলে আপনি তার মেনুতে প্রতিটি বিকল্পের মধ্য দিয়ে যাবেন এবং বোতাম বি সংশ্লিষ্ট মান বৃদ্ধি/হ্রাস করবে। এটি একটি পুরানো গাড়ির ড্যাশবোর্ডে ঘড়ি সেট করার মতো। বিকল্পগুলি এইরকম:

  1. 0-1 অপশন Kp লাভের জন্য।
  2. 2-3 টি কি কি লাভের জন্য।
  3. কেডি লাভের জন্য 4-5 বিকল্প।
  4. 6-7 অপশন হল সেই মুহুর্তের জন্য সেটপয়েন্ট সেট করার জন্য যখন মোটরগুলি কমতে শুরু করে।
  5. 8-9 বিকল্পগুলি সর্বনিম্ন গতি নির্ধারণের জন্য।

মনে রাখবেন যে মেনুতে এমনকি সংখ্যাগুলি সংশ্লিষ্ট মানগুলি বাড়ানোর জন্য এবং বিজোড়গুলির জন্য এটি ঠিক বিপরীত।

এছাড়াও, GiggleBot এর BBC মাইক্রো: বিট -এ বোতাম টিপলে, আপনি তার নিওপিক্সেল -তৈরি স্ক্রিনে দেখতে পাবেন শেষ রিসেট হওয়ার পর থেকে গত হওয়া মিলিসেকেন্ডের সংখ্যা এবং রোবট যে চক্রের মধ্য দিয়ে গেছে - এই 2 দিয়ে আপনি হিসাব করতে পারেন রোবটের হালনাগাদ হার।

সবশেষে এবং সবচেয়ে গুরুত্বপূর্ণভাবে, আমি GiggleBot এর জন্য 2 টি টিউনিং নিয়ে এসেছি। তাদের মধ্যে একটি হল যখন নিওপিক্সেল এলইডি বন্ধ করা হয় এবং অন্যটি অন্যথায়। নিওপিক্সেল এলইডিগুলি কোন দিক থেকে ত্রুটি জমা হয়েছে তা দেখানোর জন্য ব্যবহৃত হয়।

প্যারামিটার টিউনিং এর 1 ম সেট (NeoPixel LEDs বন্ধ আছে)

  1. কেপি = 32.0
  2. কি = 0.5
  3. কেডি = 80.0
  4. trigger_setpoint = 0.3 (যা 30%)
  5. min_speed_percent = 0.2 (যা 20%)
  6. base_speed = 100 (ওরফে সর্বোচ্চ গতি)
  7. update_rate = 70 (চলমান @70Hz)

প্যারামিটার টিউনিংয়ের দ্বিতীয় সেট (নিওপিক্সেল এলইডি চালু আছে)

  1. কেপি = 25.0
  2. কি = 0.5
  3. কেডি = 35.0
  4. trigger_setpoint = 0.3 (যা 30%)
  5. min_speed_percent = 0.3 (যা 30%)
  6. base_speed = 70 (ওরফে সর্বোচ্চ গতি)
  7. update_rate = 50 (চলমান @50Hz)
  8. এছাড়াও, ভেরিয়েবল run_neopixels কে স্ক্রিপ্টে True তে সেট করতে হবে যা GiggleBot এর BBC micro: bit এ লোড হয়ে যায়। এটি নিওপিক্সেল এলইডিগুলিকে এমনভাবে ফ্ল্যাশ করবে যাতে তারা নির্দেশ করে যে কোন দিকে ত্রুটি জমা হয়।

ধাপ 6: নিওপিক্সেলের সাথে গিগলবট চলমান বন্ধ

এটি আগের ধাপে পাওয়া ১ ম টিউনিং প্যারামিটার দিয়ে GiggleBot চালানোর একটি উদাহরণ। এই উদাহরণে NeoPixel LEDs বন্ধ আছে।

ধাপ 7: নিওপিক্সেলগুলির সাথে গিগলবট চলমান

এটি 5 য় ধাপে পাওয়া টিউনিং প্যারামিটারের ২ য় সেট দিয়ে GiggleBot চালানোর একটি উদাহরণ। এই উদাহরণে NeoPixel LEDs চালু আছে

লক্ষ্য করুন কিভাবে এই উদাহরণে, GiggleBot এর লাইন অনুসরণ করা কঠিন সময় - এর কারণ হল Neopixel LEDs বিবিসি মাইক্রো: বিট এর CPU সময় "খাচ্ছে"। এজন্য আমাদের আপডেটের হার 70 থেকে কমিয়ে 50 করতে হয়েছিল।

প্রস্তাবিত: