🐍คู่มือผู้ใช้ Python SerialMaster
วิธีการใช้ python script สำหรับสนุกและเรียนรู้ไปกับหุ่นยนต์ (Nybble😼 or Bittle🐶)?
Last updated
วิธีการใช้ python script สำหรับสนุกและเรียนรู้ไปกับหุ่นยนต์ (Nybble😼 or Bittle🐶)?
Last updated
Install python (version≥ 3.6, such as Anaconda3-5.2.0-Windows-x86_64.exe)
Install pyserial library (version 3.5)
โดยปกติแล้วการใช้ USB adapter ในการเชื่อมต่อกับหุ่นยนต์จะต้องเห็นพอร์ทแค่อันเดียวหากไม่ได้เชื่อมต่อกับสิ่งอื่น
แต่เมื่อเชื่อมต่อผ่านทาง Bluetooth จะเห็นพอร์ตที่เชื่อมต่อ 2 พอร์ตดังรูป
เปิด Terminal (เช่น Anaconda Prompt) ใส่พาธที่สคริปต์ตั้งอยู่ (***\serialMaster) คุณสามารถใช้คำสั่งต่อไปนี้ในการเรียกใช้สคริปต์ สคริปต์จะตรวจสอบหมายเลขพอร์ตซีเรียลโดยอัตโนมัติตั้งแต่ต้นและเสร็จสิ้นการเชื่อมต่อ
Parameters: kbalance เป็น serial command บ่งบอกถึงสกิลของหุ่นยนต์
แน่นอน คุณยังสามารถเรียกใช้สคริปต์นี้โดยไม่ต้องใส่พารามิเตอร์ใด ๆ:
เมื่อระบบตรวจสอบว่ามีหมายเลขพอร์ตซีเรียลหลายตัว สคริปต์จะตรวจสอบหมายเลขพอร์ตซีเรียลทั้งหมดที่เชื่อมต่อกับหุ่นยนต์อย่างปกติ (คุณสามารถส่งคำสั่งซีเรียลไปยังหุ่นยนต์หลายตัวพร้อมกัน) เมื่อสคริปต์เริ่มทำงาน และพิมพ์ข้อมูลเตือนดังต่อไปนี้:
เมื่อสคริปต์เริ่มทำงานอย่างเป็นทางการ ข้อมูลเตือนต่อไปนี้จะถูกพิมพ์ออกมา:
คุณสามารถพิมพ์ 'quit' หรือ 'q' เพื่อออก
ต่อไปนี้คุณสามารถป้อนคำสั่งซีเรียลใน Terminal เพื่อควบคุมหุ่นยนต์ให้ดำเนินการต่าง ๆ ที่น่าสนใจ 😃 เช่น
รายการ testSchedule ใน example.py ใช้เพื่อทดสอบคำสั่งพอร์ตซีเรียลต่าง ๆ ให้เรียกใช้โค้ดสคริปต์ต่อไปนี้เพื่อดูผลของการดำเนินการของคำสั่งพอร์ตซีเรียลในรายการ:
คุณยังสามารถอ้างอิงเนื้อหาของรายการ stepUpSchedule (ใน ***\serialMaster\demos\stepup.py) เขียนรายการพฤติกรรมตามความต้องการจริงของคุณ และเปิดเผยความคิดสร้างสรรค์ของคุณ 🤩
หมายเหตุ: เมื่อเรียกใช้สคริปต์ที่อยู่ในพาธ \serialMaster\demos คุณต้องใช้คำสั่ง "cd demos" เพื่อเข้าสู่พาธที่สคริปต์ตั้งอยู่ (\serialMaster\demos) ก่อน แล้วจึงใช้คำสั่ง python3 เพื่อเรียกใช้สคริปต์ (เช่น "python3 stepup.py")
['kbalance', 2]
'kbalance' หมายถึงคำสั่งในการควบคุม Bittle ให้ยืนอยู่ในท่าปกติ
2 หมายถึงเวลาที่หน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที
['d', 2]
d หมายถึงคำสั่งในการวางหุ่นยนต์ลงและปิดเซอร์โว
2 หมายถึงเวลาที่หน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที
['c', 2]
c หมายถึงคำสั่งในการเข้าสู่โหมดการคาลิเบรท (calibration mode)
2 หมายถึงเวลาที่หน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที หลังจากที่คำสั่งเคลื่อนไหวเหล่านี้เสร็จสิ้น คำสั่งถัดไปจะถูกดำเนินการหลังจากหน่วงเวลา 2 วินาที
['c', [0, -9], 2]
c หมายถึงคำสั่งในการเข้าสู่โหมดการคาลิเบรท (calibration mode)
0 หมายถึงหมายเลขดัชนีของเซอร์โวข้อต่อ (joint servo)
-9 หมายถึงมุมการหมุน, หน่วยเป็นองศา
2 หมายถึงเวลาที่หน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที
โดยใช้รูปแบบนี้คุณสามารถเข้าสู่โหมดการปรับแต่งเพื่อปรับแต่งมุมของเซอร์โวข้อต่อบางตัวได้ หมายเหตุ: หากคุณต้องการให้ค่าการแก้ไขในคำสั่งนี้มีผลให้เกิดผล คุณต้องป้อนคำสั่ง "s" หลังจากดำเนินการคำสั่งนี้
ตัวอย่างนี้หมายถึง เซอร์โวข้อต่อที่มีหมายเลขซีเรียลเป็น 0 หมุน -9 องศา หลังจากที่คำสั่งการเคลื่อนไหวเหล่านี้เสร็จสิ้น คำสั่งถัดไปจะถูกดำเนินการหลังจากหน่วงเวลา 2 วินาที
['m', [0, -20], 1.5]
m หมายถึงคำสั่งในการควบคุมการหมุนของเซอร์โวข้อต่อ
0 หมายถึงหมายเลขดัชนีของเซอร์โวข้อต่อ (joint servo)
-20 หมายถึงมุมการหมุน (มุมอ้างอิงจากจุดเริ่มต้น ไม่ใช่มุมเพิ่มเติม), หน่วยเป็นองศา
1.5 หมายถึงเวลาที่หน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที สามารถเป็นตัวเลขทศนิยมได้
['m', [0, 45, 0, -45, 0, 45, 0, -45], 2]
โดยใช้รูปแบบนี้คุณสามารถส่งคำสั่งหมุนของเซอร์โวข้อต่อหลายตัวพร้อมกัน และคำสั่งการหมุนเหล่านี้จะถูกดำเนินการลำดับการไปเรื่อย ๆ ไม่ใช่พร้อมกัน มุมของข้อต่อถูกจัดเก็บเป็นตัวอักษร ASCII ดังนั้นสามารถป้อนโดยตรงโดยมนุษย์ได้
ตัวอย่างนี้หมายถึง หมุนเซอร์โวข้อต่อที่มีหมายเลขดัชนีเป็น 0 ไปยังตำแหน่งมุม 45 องศาก่อน จากนั้นหมุนไปยังตำแหน่งมุม -45 องศา และเช่นนี้ต่อไป หลังจากที่คำสั่งการเคลื่อนไหวเหล่านี้เสร็จสิ้น คำสั่งถัดไปจะถูกดำเนินการหลังจากหน่วงเวลา 2 วินาที
['i', [ 8, -15, 9, -20], 2]
โดยใช้รูปแบบนี้คุณสามารถส่งคำสั่งหมุนของเซอร์โวข้อต่อหลายตัวพร้อมกัน และคำสั่งการหมุนเหล่านี้จะถูกดำเนินการพร้อมกัน มุมของข้อต่อถูกจัดเก็บเป็นตัวอักษร ASCII ดังนั้นสามารถป้อนโดยตรงโดยมนุษย์ได้
ตัวอย่างนี้หมายถึง หมุนเซอร์โวข้อต่อที่มีหมายเลขดัชนีเป็น 8 และ 9 ไปยังตำแหน่งมุม -15 และ -20 องศา พร้อมกัน หลังจากที่คำสั่งการเคลื่อนไหวเหล่านี้เสร็จสิ้น คำสั่งถัดไปจะถูกดำเนินการหลังจากหน่วงเวลา 2 วินาที
['M', [8, 50, 9, 50, 10, 50, 11, 50, 0, 0], 3]
M หมายถึงคำสั่งในการหมุนของเซอร์โวข้อต่อหลายตัว โดยจะทำการหมุนข้อต่อลำดับที่กำหนดไว้ มุมของข้อต่อถูกเข้ารหัสเป็นเลขฐานสองเพื่อเพิ่มประสิทธิภาพในการส่งข้อมูล
8, 9, 10, 11, 0 หมายถึงหมายเลขดัชนีของเซอร์โวข้อต่อ (joint servos)
50, 50, 50, 50, 0 หมายถึงมุมการหมุนของข้อต่อ (มุมอ้างอิงจากจุดเริ่มต้น ไม่ใช่มุมเพิ่มเติม) หน่วยเป็นองศา
3 หมายถึงเวลาหน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที
['I', [20, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 36, 36, 36, 36], 5]
I หมายถึงคำสั่งในการหมุนของเซอร์โวข้อต่อทั้งหมดพร้อมกัน (ในปัจจุบันคำสั่งรองรับจำนวน 16 ข้อต่อ) มุมของข้อต่อถูกเข้ารหัสเป็นเลขฐานสองเพื่อเพิ่มประสิทธิภาพในการส่งข้อมูล
20, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 36, 36, 36, 36 หมายถึงมุมการหมุนของข้อต่อแต่ละตัวที่สอดคล้องกับหมายเลขดัชนี 0-15 (มุมอ้างอิงจากจุดเริ่มต้น ไม่ใช่มุมเพิ่มเติม) หน่วยเป็นองศา
5 หมายถึงเวลาหน่วงหลังจากเสร็จสิ้นคำสั่ง หน่วยเป็นวินาที
['b', [10,2], 2]
b หมายถึงคำสั่งในการควบคุมบัซเซอร์ให้ส่งเสียงเป่าวิทยุ (beep)
10 หมายถึงเสียงดนตรี (music tone) ที่ใช้ในการสั่งให้บัซเซอร์ส่งเสียง
2 หมายถึงความยาวของการเล่นเสียง (duration) ต่อเป็นเวลา 1/duration วินาที
2 หมายถึงเวลาหน่วงหลังจากสิ้นสุดการเล่นเสียง หน่วยเป็นวินาที
['b',[0, 1, 14, 8, 14, 8, 21, 8, 21, 8, 23, 8, 23, 8, 21, 4, 19, 8, 19, 8, 18, 8, 18, 8, 16, 8, 16, 8, 14, 4],3]
b หมายถึงคำสั่งในการควบคุมบัซเซอร์ให้ส่งเสียงเป่าวิทยุ (beep)
0, 14, 14, 21... หมายถึงเสียงดนตรี (music tone) ที่ใช้ในการสั่งให้บัซเซอร์ส่งเสียง ตามลำดับเสียง
1, 8, 8, 8 หมายถึงความยาวของการเล่นเสียง (duration) ต่อเป็นเวลา 1/duration วินาที โดยเรียงตามเสียงดนตรีที่กำหนด ในที่นี้คือ 0, 14, 14, 21...
3 หมายถึงเวลาหน่วงหลังจากเสียงดนตรีเล่นเสร็จ หน่วยเป็นวินาที
ใช่ ด้วยคำสั่ง tone คุณสามารถสร้างเสียงดนตรีง่าย ๆ หรือเล่นทั้งหมดในครั้งเดียวกันได้ โดยใช้รูปแบบดังตัวอย่างที่กล่าวมาก่อนหน้านี้
ความหมายของตัวอย่างนี้คือ: เล่นทั้งหมดของสัมผัสด้วยเสียงดนตรีแบบง่าย ๆ และหน่วงเวลา 3 วินาทีหลังจากที่สัมผัสด้วยเสียงดนตรีเสร็จสิ้น
ck = [
-3, 0, 5, 1,
0, 1, 2,
45, 0, 0, 0, 0, 0, 0, 0, 45, 35, 38, 50, -30, -10, 0, -20, 6, 1, 0, 0,
-45, 0, 0, 0, 0, 0, 0, 0, 35, 45, 50, 38, -10, -30, -20, 0, 6, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 5, 0, 0, 0,
]
['K', ck, 1]
'K' หมายถึงข้อมูลทักษะ (skill data) ที่ส่งให้กับ Bittle ในเวลาเดียวกัน (realtime) โดยต้องใช้ฟอร์แมตของสตริงและรหัสของทักษะที่ต้องการส่งขึ้นไปใน Bittle
อาเรย์ของทักษะจะถูกส่งไปยังหุ่นยนต์และทำงานโดยการประมวลผลที่ตัวหุ่นยนต์ (execute locally on the robot) โดยไม่ต้องส่งข้อมูลกลับมายังคอมพิวเตอร์หรืออุปกรณ์อื่น ๆ อาทิเช่น Raspberry Pi หรือเซิร์ฟเวอร์
คุณสามารถแทรกทักษะลงในไลบรารีของทักษะ (skill library) หรือ InstinctX.h โดยใช้รูปแบบนี้
สำหรับคำอธิบายของคำสั่งอื่น ๆ บนพอร์ตซีเรียลโปรต์ โปรดอ้างอิงตามเอกสาร Serial Commands. นี้
Pleaseขอให้นี่เป็นแรงบันดาลใจสำหรับการช่วย Nybble และ Bittle ในการค้นหาแรงบันดาลใจของพวกเขา และขอให้คุณมีความสุขกับการเล่น! 😍