# สกิลคอมโพสเซอร์

## บทเกริ่นนำ ของอินเทอร์เฟซ

{% embed url="<https://youtu.be/kyN5vFY9fAI>" %}
Teach Nybble push-ups with one hand
{% endembed %}

### \*\* ดาวน์โหลดเวอร์ชันล่าสุดของ [Petoi Desktop APP](https://github.com/PetoiCamp/OpenCat/releases). \*\*

{% hint style="danger" %}
หุ่นยนต์ต้องใช้พลังงานจากแบตเตอรี่และใช้เฟิร์มแวร์ OpenCat 2.0 เพื่อให้ Petoi Desktop App รู้จัก ก่อนเปิดซอฟต์แวร์ โปรดติดตั้งแบตเตอรี่และกดปุ่มบนแบตเตอรี่ค้างไว้เพื่อเปิด Nybble / Bittle
{% endhint %}

เปิด [**Petoi Desktop App**](https://github.com/PetoiCamp/OpenCat/releases) (สำหรับ Windows: UI.exe / สำหรับ Mac: Petoi Desktop App) คลิกปุ่ม "สกิลคอมโพสเซอร์" และเปิดอินเทอร์เฟซของ สกิลคอมโพสเซอร์

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FHvpGfAb928VVJEdTthei%2Fimage.png?alt=media\&token=adc9d789-3796-42cd-bbc7-4394fc0b1636)

### อินเทอร์เฟซของสกิลคอมโพสเซอร์

#### Nybble

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FpFgKM6gRfALtEYGzzLAX%2Fimage.png?alt=media\&token=5a4379fc-53db-4815-9554-f1597e63dafd)

#### Bittle

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FutGbVcb1OGk7x5JrJyE2%2Fimage.png?alt=media\&token=fb7b5a33-45d3-47c6-b260-6f570cd4afc3)

{% hint style="info" %}
หมายเหตุ: ปุ่มส่วนใหญ่บนอินเทอร์เฟซมีคำแนะนำการใช้งานหากเลื่อนเมาส์ไปด้านบนของเครื่องมือนั้นๆ
{% endhint %}

### ตัวเลือกในเมนู

* โมเดล

  * Nybble
  * Bittle

  Nybble cat และ Bittle มีข้อต่อขาหลังที่แตกต่างกัน ข้อมูลสกิลของทั้งสองตัวไม่สามารถใช้แทนกันได้ เลือกรุ่นที่ถูกต้องก่อนใช้งาน สกิลคอมโพสเซอร์ มิฉะนั้น ข้อต่อบางส่วนอาจขัดแย้งกับร่างกายของหุ่นยนต์
* ภาษา

  ขณะนี้มีภาษา English, 中文, and Italian. คุณสามารถมีส่วนช่วยในอัพเดทภาษาได้ที่ [translation script](https://github.com/PetoiCamp/OpenCat/blob/main/pyUI/translate.py).
* ประโยชน์

  เราจะเพิ่มแกดเจ็ตขนาดเล็กลงในแท็บยูทิลิตี้ต่อไป ขณะนี้เรามีตัวเลือกสีตาสำหรับเซ็นเซอร์อัลตราโซนิกของแมว Nybble พร้อมไฟ LED ในตัว

### การเชื่อมต่อและการหมุนหมายเลขสถานะ

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FkMecV6ZIaT5OysSwx7Bw%2Fimage.png?alt=media&#x26;token=d585d619-6c2c-47b8-bc8d-083e77aa7321" alt=""><figcaption></figcaption></figure>

พอร์ท / เชื่อมต่อ

เชื่อมต่อหุ่นยนต์กับคอมพิวเตอร์ของคุณผ่านทาง [USB uploader](https://docs.petoi.com/communication-modules/usb-downloader-ch340c#connect-nyboard) หรือ [Bluetooth settings](https://docs.petoi.com/communication-modules/dual-mode-bluetooth#connection-with-nyboard)จากนั้นเปิดแอปเดสก์ท็อปนี้ ควรตรวจจับและเชื่อมต่อกับหุ่นยนต์โดยอัตโนมัติ พอร์ตอนุกรมของหุ่นยนต์จะปรากฏในเมนูแบบเลื่อนลงต่อไปนี้ ปุ่มควรเปลี่ยนจาก "<mark style="color:yellow;">**Listening**</mark>" เพื่อ "<mark style="color:green;">**Connected**</mark>" หากหุ่นยนต์ไม่สามารถเชื่อมต่อได้ในครั้งแรก คุณสามารถคลิก "<mark style="color:yellow;">**Listening**</mark>" สำหรับการปลดการเชื่อมต่อพอร์ตทั้งหมด จากนั้นกดปุ่ม "<mark style="color:red;">**Connect**</mark>" อีกครั้ง

{% hint style="info" %}
หมายเหตุ: แอปเดสก์ท็อปจะคอยฟังพอร์ตอนุกรมและส่งสัญญาณจับมือไปยังอุปกรณ์ที่เพิ่มใหม่ หากอุปกรณ์ตอบสนองด้วยสัญญาณที่กำหนดไว้ล่วงหน้า อุปกรณ์นั้นจะรับรู้เป็นอุปกรณ์ Petoi และเพิ่มลงในเมนูแบบเลื่อนลง
{% endhint %}

#### เซอร์โว

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

#### ไจโร

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

#### แรนด้อม

ในโหมดทดลองบางโหมดเช่น (e.g. [RandomMind mode](https://docs.petoi.com/desktop-app/firmware-uploader#click-the-firmware-uploader-button-to-open-the-firmware-uploader-interface))หุ่นยนต์จะเคลื่อนที่แบบสุ่ม ปุ่มนี้สามารถสลับการเปิด/ปิดพฤติกรรมได้

ท่าที่ตั้งค่าไว้

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FK8qW5Sc4xOtUARxMoA0G%2Fimage.png?alt=media\&token=7db67214-99cc-460c-a0fc-e1db6b1fec73)

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

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

### Joint Controller

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FTInN1DGUNucAE7TIVqpC%2Fimage.png?alt=media\&token=b34f427e-3cdb-447c-b62c-b65e6141c49f)

แถบเลื่อนมุมสามารถแสดงมุมข้อต่อปัจจุบันของหุ่นยนต์ สามารถหมุนข้อต่อของหุ่นยนต์กลับด้านได้หากคุณเปลี่ยนค่า คุณสามารถลากแถบเลื่อนเพื่อปรับมุมกว้าง หรือคลิกด้านบนหรือด้านล่างแถบเลื่อนเพื่อปรับแบบละเอียด (ทีละ 1 องศา) ข้อต่อบางอันจะมีระยะการเข้าถึงที่เล็กกว่าตัวเลื่อน พยายามใช้มุมระหว่าง -125 ถึง 125 องศา การส่งมุมที่ใหญ่ขึ้นจะเพิ่มเวลาตอบสนองกับหุ่นยนต์

แถบเลื่อนสอดคล้องกับข้อต่อของหุ่นยนต์ หากคุณมองลงไปที่หุ่นยนต์โดยให้ส่วนหัวชี้ไปข้างหน้าข้อต่อที่อยู่ใกล้กับร่างกายจะอยู่ใกล้กับศูนย์กลางของแผง ข้อต่อของหุ่นยนต์สามารถเข้ากับร่างกายของคุณเองและกลายเป็นอวตารของคุณได้

{% hint style="info" %}
หมายเหตุ: แถบเลื่อนบางตัวที่มีพื้นหลังสีเหลืองอ่อนจะปิดใช้งานสำหรับข้อต่อที่ไม่มีในบางรุ่นเช่น Bittle ไม่มีเหมือน Nybble
{% endhint %}

คุณสามารถควบคุมหลายข้อต่อได้โดยคลิกปุ่มหมุนหมายเลข "+" หรือ "-" บนแถบเลื่อนแต่ละตัว แถบเลื่อนทั้งหมดที่มีการกด "+" จะเปลี่ยนโดย increaments เดียวกัน แถบเลื่อนที่กดปุ่ม "-" จะเปลี่ยนตามค่าลบ ปุ่มสามารถเปิดปิดได้ คลิกปุ่ม "Unbind All" เพื่อปลดข้อต่อทั้งหมดพร้อมกัน

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

| Global Orientation and Translation | Effect                     |
| ---------------------------------- | -------------------------- |
| Pitch                              | ปรับมุมเอียง               |
| Roll                               | ปรับมุมม้วน                |
| Spinal                             | เคลื่อนไปตามทิศทางหุ่นยนต์ |
| Height                             | ยกหรือลดร่างกายของหุ่นยนต์ |

### Skill Editor

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FzaPhtOcawErtVX6I1GGH%2Fimage.png?alt=media&#x26;token=0846296d-835e-4b8a-96f7-69b1c9bc4325" alt=""><figcaption></figcaption></figure>

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

ในแต่ละเฟรมมีแถวของตัวมันเองโดยแถวแรกบนสุดจะเป็นแถบเมนูบอกว่าทำอะไรเราสามารถแอดเฟรมแล้วปรับค่าได้

## การทำงานขั้นพื้นฐาน

### การเปิดใช้งานเฟรม

สามารถคลิก  "<mark style="color:blue;">**=**</mark>"  (**ปุ่มที่ 2** ของแต่ละเฟรม) เพื่อเปิดใช้งานเฟรมที่เกี่ยวข้องและย้ายหุ่นยนต์ไปยังท่าทางของเฟรม เฟรมจะเก็บการแก้ไขใหม่ทั้งหมดของคุณในท่าทางปัจจุบันของหุ่นยนต์ สัญลักษณ์ "<mark style="color:blue;">**=**</mark>" จะเป็นตัวหนา และปุ่มจะใหญ่ขึ้น หากเฟรมปัจจุบันถูกแก้ไข สัญลักษณ์ "<mark style="color:blue;">**=**</mark>" จะกลายเป็นเครื่องหมายตกใจสีแดง "<mark style="color:red;">**!**</mark>"  คุณสามารถคลิกปุ่มนี้เพื่อบันทึกการแก้ไขของคุณ มิฉะนั้น การแก้ไขปัจจุบันจะถูกยกเลิกหากคุณคลิกปุ่ม "<mark style="color:blue;">**=**</mark>"ของเฟรมอื่นๆ

### การเพิ่มเฟรม

คุณสามารถคลิกปุ่ม "<mark style="color:green;">**v**</mark>"  (**ปุ่มที่ 9** ของแต่ละเฟรม) เพื่อเพิ่มเฟรมหลังจากเฟรมปัจจุบันและเปิดใช้งาน กรอบใหม่จะเหมือนกับของ**เฟรมที่เปิดใช้งานก่อนหน้า**

{% hint style="info" %}
หมายเหตุ: เฟรมใหม่ไม่จำเป็นต้องคัดลอกเฟรมโดยการกดปุ่ม "<mark style="color:green;">**v**</mark>"&#x20;
{% endhint %}

### แทรกเฟรม

ไม่จำเป็นต้องเพิ่มเฟรมใหม่หลังจากเฟรมสุดท้ายเสมอไป คุณสามารถคลิกปุ่ม "<mark style="color:green;">**v**</mark>"  (**ปุ่มที่ 9** ของแต่ละเฟรม) oเฟรมระหว่างกลางใด ๆ เพื่อแทรกเฟรมใหม่ด้านล่างโดยการกดปุ่ม  "<mark style="color:green;">**v**</mark>" . เฟรมใหม่มีข้อมูลที่เหมือนกันกับ**เฟรมที่เปิดใช้งานก่อนหน้า**

### สะท้อนเฟรม

สามารถคลิกปุ่ม "<mark style="color:blue;">**>|<**</mark>" เพื่อให้เฟรมนี้เหมือนกับเฟรมท่าทางของเฟรมที่เปิดใช้งานไปแล้ว&#x20;

### ลบเฟรม

สามารถคลิกที่ปุ่ม "<mark style="color:red;">**<**</mark>"  (**ปุ่มที่ 8** ของแต่ละเฟรม) เพื่อลบเฟรมปัจจุบันโดยกดปุ่มค้างไว้เฟรมต่อไปนี้ทั้งหมดจะเลื่อนขึ้น ถ้า **เฟรมที่เปิดใช้งานถูกลบ** เฟรมก่อนหน้าจะเปิดใช้งาน  **เฟรมที่เปิด** เป็นเฟรมแรกและถูกลบ เฟรมถัดไปจะถูกเปิดใช้งาน

### เพิ่มคำอธิบายสำหรับแต่ละเฟรม

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

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FsaFO9qBozsIUQdPS611e%2Fimage.png?alt=media&#x26;token=aa7f8cdb-0095-496a-b2b6-6b6c2ebf5286" alt=""><figcaption></figcaption></figure>

### การผูกติดข้อต่อและแก้ไขแบบส่งผ่าน

หากมุมของข้อต่อเหมือนกันในเฟรมปัจจุบันและเฟรมถัดไป การแก้ไขและบันทึกมุมจะอัปเดตมุมในเฟรมต่อไปนี้ด้วยจนกว่ามุมจะแตกต่างกัน ตัวอย่างเช่น หากมุมร่วมของ 8 เป็น 4,4,4,4,6,7 ในทุกเฟรม การเปลี่ยนมุมในเฟรมที่สองเป็น 8 จะอัปเดตลำดับเป็น 4,8,8,8,6,7

เล่นสกิลตามลำดับ

นอกเหนือจากการคลิกด้วยตนเองที่ปุ่ม "<mark style="color:blue;">**=**</mark>"  (**ปุ่มที่ 2** ของแต่ละเฟรม)หากต้องการดูท่าเดียว คุณสามารถคลิก "<mark style="color:green;">**Play**</mark>" ปุ่มเริ่มแสดงท่าตามลำดับเริ่มจากเฟรมที่เปิดใช้งานทั้งหมด ในระหว่างการเล่นสามารถกดปุ่ม "<mark style="color:red;">**Stop**</mark>" เพื่อหยุดการเล่นสกิลกลางคันได้

### ส่งออกสกิล

หลังจากคลิกไปที่ปุ่ม "<mark style="color:blue;">**Export**</mark>" คุณสามารถเลือกตำแหน่งและชื่อไฟล์ในการบันทึกสกิล เฟรมที่กำลังดำเนินการทั้งหมดในรายการเฟรมจะถูกส่งออก) เป็นไฟล์ข้อความ คุณสามารถยกเลิกการบันทึกเพื่อข้ามได้ แอปเดสก์ท็อปจะยังคงส่งทักษะไปยังหุ่นยนต์เพื่อประสิทธิภาพแบบเรียลไทม์ และคุณสามารถเรียกใช้ทักษะที่ส่งล่าสุดด้วยโทเค็นซีเรียล"**T**". โดยสองวิธีต่อไปนี้

* เปิด [the serial monitor](https://docs.petoi.com/arduino-ide/serial-monitor), และพิมพ์ "**T**" ใน serial command&#x20;
* เปิด [the mobile app](https://docs.petoi.com/mobile-app/app-guide), ใช้ "[Customized buttons](https://docs.petoi.com/mobile-app/app-guide#customized-buttons)" ฟังก์ชั่น, และพิมพ์ "**T**" ในโค้ดบ๊อก

เนื้อหาของไฟล์ข้อความที่ส่งออก (.txt) สามารถคัดลอกและวางลงในไฟล์ Instinct\*\*.h เพื่อใช้เป็นอาร์เรย์ทักษะได้

### นำเข้าสกิล

หลังจากที่คลิกปุ่ม "<mark style="color:blue;">**Import**</mark>"คุณจะเห็นหน้าต่างเด้งขึ้นมามันอนุญาตให้คุณก๊อปปี้และวางสกิลดาต้าอารเ์เรย์ใน text editor หรือ นำเข้าสกิลที่มีอยู่แล้วจากการสร้างโดยคนอื่นได้คุณสามารถดูตัวอย่างได้ที่OpenCat/src/**InstinctBittle.h** or **InstinctNybble.h**. รูปแบบสกิลที่สมบูรณ์ควรประกอบด้วยคู่"**{ }**" และมีตัวเลขระหว่างกลาง. เฉพาะรายการแรกเท่านั้นที่จะถูกนำเข้าหากมีอาร์เรย์สกิลหลายรายการ ควรตรวจสอบก่อนนำเข้า

### รีเซ็ตตัวแก้ไขสกิล

คุณสามารถใช้ปุ่ม "<mark style="color:red;">**Restart**</mark>" เพื่อล้างแผงตัวแก้ไขสกิลและเริ่มต้นใหม่

## การดำเนินการขั้นสูง

### ตั้งค่า Action Frame Loops

หากคุณต้องการเฟรมแอคชั่นต่อเนื่องใน [the action frame list](#skill-editor) เพื่อรันลูปจำนวนหลายครั้งคุณต้องใส่จำนวนลูปที่ต้องการวนซ้ำก่อนคุณสามารถใส่จำนวนลูป, คุณสามารถใส่การ **วนซ้ำ ในช่องด้านบน** [the action frame list](#skill-editor) (ทางด้านซ้ายของ **Set**"),จากนั้นใช้ปุ่มซ้ายของเมาส์เพื่อเลือกเลข(**ช่องแรกของเฟรมที่ 1** ) ของเฟรมแรกและสองเฟรมสุดท้ายของเฟรมการกระทำต่อเนื่องที่ต้องการให้เกิดการเคลื่อนไหวเป็นซ้ำ (ปุ่มหมายเลขจะปรากฏในสถานะเลือกไปแล้ว) ดังแสดงในรูปต่อไปนี้:

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FonHehLJROiPgFLtnWVNH%2Fimage.png?alt=media&#x26;token=b5ca0ac2-e195-48b6-9306-16811de94f23" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
หากคุณป้อน -1 ในช่อง **ทำซ้ำ** เฟรมจะดำเนินการวนซ้ำจะวนซ้ำตลอดไป เว้นแต่คุณจะกดปุ่มรีเซ็ตบนกระดานหลักของหุ่นยนต์
{% endhint %}

### กำหนดความเร็วในการเคลื่อนที่

ใน [the action frame list](#skill-editor), คุณสามารถกำหนดความเร็วในการวิ่งของแต่ละเฟรมของการกระทำ (**ช่องที่สามของแต่ละเฟรม**),มีให้คุณเลือก 9 แบบดังนี้ (เพิ่มความเร็วรอบวิ่งตามลำดับค่าตัวเลข):

1，2，4，8，12，16，32，48，max

{% hint style="info" %}
หมายเหตุ:

* คุณยังสามารถป้อนค่าจำนวนเต็มในช่วง **0\~125** (**0** หมายถึง **สูงสุด**) ในกล่องตัวเลือก
* คลิกปุ่ม "<mark style="color:green;">**Play**</mark>" ใน "**Skill Editor**" คุณ**ไม่**สามารถมองเห็นเอฟเฟกต์ความเร็วในการวิ่งที่แท้จริงของการกระทำได้ หลังจากคลิกปุ่ม "<mark style="color:blue;">**ส่งออก**</mark>" คุณจะเห็นเอฟเฟกต์ความเร็วจริง
* การเคลื่อนที่ด้วยความเร็วสูงสุดเป็นเวลานานจะทำให้เซอร์โวเสียหายได้ ดังนั้นจึงแนะนำโดยทั่วไปว่าอย่าตั้งค่าเป็น "<mark style="color:blue;">**สูงสุด**</mark>"
* เมื่อเปิดปุ่ม "<mark style="color:green;">**Gyro**</mark>" ในพื้นที่ "<mark style="color:blue;">**หน้าปัดสถาน**</mark>**ะ**" (สีตัวอักษรเป็น<mark style="color:green;">สีเขียว</mark>) หลังจากปรับค่ามุมร่วมในเฟรมหรือความเร็วในการทำงานของเฟรม สามารถกด <mark style="color:green;">**เล่น**</mark> เพื่อดูเอฟเฟกต์การดีบัก หรือ<mark style="color:blue;">**ส่งออก**</mark>พฤติกรรมการกระทำ หุ่นยนต์จะพยายามรักษาสมดุลร่างกายของตนเองตามเวลาจริง ดังนั้นอาจเห็นได้ว่าเมื่อหุ่นยนต์ทำการกระทำที่กำหนดไว้ล่วงหน้า (โดยเฉพาะเมื่อทำการกระทำที่ค่อนข้างรุนแรง) ร่างกายของมันจะสั่นไปมา และมาหรือแม้แต่พลิกคว่ำ และหุ่นยนต์จะฟื้นตัวโดยอัตโนมัติ การดำเนินการอาจรบกวนขั้นตอนการทำงานเดิมของคุณ ดังนั้น ขอแนะนำให้คุณคลิกปุ่ม "<mark style="color:green;">**Gyro**</mark>" เมื่อออกแบบการทำงานเพื่อปิดไจโรสโคป (สีตัวอักษรเปลี่ยนเป็น<mark style="color:red;">สีแดง</mark>) และหุ่นยนต์จะไม่ดำเนินการป้อนกลับสมดุลตามเวลาจริง เมื่อคุณต้องการเปิดไจโรสโคป ให้คลิกปุ่ม "<mark style="color:red;">**ไจโร**</mark>" อีกครั้ง
  {% endhint %}

### ตั้งค่าการหน่วงเวลา

ใน [the action frame list](#skill-editor) ตัวเลือก "**Delay**"  (**ปุ่มที่ 6** ของแต่ละเฟรม) แต่ละเฟรมสามารถที่จะระบุระยะเวลาที่หุ่นยนต์เล่นอนิเมชั่นก่อนที่เฟรมถัดไปจะทำงานหลังจากเฟรมนี้ทำงานเสร็จสิ้น

มีให้เลือก **17 แบบ**: 0，50，100，200，300，400，500，600，700，800，900，1000，2000，3000，4000，5000，6000.

แน่นอน คุณยังสามารถป้อนค่าจำนวนเต็มในช่วง 0\~6000 ในช่องตัวเลือก "**Delay**" หน่วยเป็นมิลลิวินาที (ms)

### ตั้งค่าทริกเกอร์และมุม

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FbpEIvi2erUxVqYoWt9RB%2Ftrigger.jpeg?alt=media&#x26;token=ee90cedb-5d1b-438b-81a3-d39490f77fc4" alt=""><figcaption></figcaption></figure>

ตัวเลือก "ทริกเกอร์" (**ปุ่มที่ 4** ของเฟรม) ในเฟรมใช้เพื่อกำหนดทิศทางการหมุนของร่างกายเมื่อหุ่นยนต์สั่งงานเฟรมถัดไป มีตัวเลือกการตั้งค่า **5** แบบต่อไปนี้:

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

ตัวเลือก "**มุม**" (**ปุ่มที่ 5** ของเฟรม) ถูกกำหนดโดยอ้างอิงถึงมุมของระบบพิกัดเชิงขั้ว ดังที่แสดงในรูปด้านบน เมื่อร่างกายอยู่ในแนวนอน มุมของแกนพิกัดเชิงขั้วคือ 0 องศา หากแกนพิกัดเชิงขั้วหมุนทวนเข็มนาฬิกา มุมจะเป็นบวกและค่อยๆ เพิ่มขึ้น ช่วงการตั้งค่ามุมคือค่าจำนวนเต็มระหว่า&#xE07;**-125\~125**.

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

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

### ส่งออกท่าทางที่เรียนรู้(มิเรอร์)

เมื่อเส่งออกเฟรมแอคชั่น หากคุณต้องการมิเรอร์เฟรมแอคชั่นทั้งหมด [the action frame list](#skill-editor) (ข้อต่อด้านซ้ายและด้านขวาของหุ่นยนต์จะสลับกันราวกับเห็นในกระจก) ขั้นแรกให้คลิกปุ่ม "[<mark style="color:blue;">**MirrorAll**</mark>](#skill-editor)" และคลิกปุ่ม "[**Export**](#export-the-skill)" หากคุณต้องการยกเลิกการส่งออกที่ทำมิเรอร์ คุณสามารถยกเลิกการเลือกได้กดปุ่ม "<mark style="color:blue;">**MirrorAll**</mark>" อีกครั้ง

### ตัวเลือกพฤติกรรมและการเดิน

ก่อนการส่งออกแอคชั่นเฟรมให้เลือกตัวเลือก "**Behavior**/**Gait**"  ใน "[**Skill Editor**](#skill-editor)" ซึ่งเป็น "<mark style="color:blue;">**Behavior**</mark>"หลังจากนั้นคลิกส่งออก "[<mark style="color:blue;">**Export**</mark>](#export-the-skill)"โปรแกรมจะทำงานบนหุ่นยนต์และสอดแทรกระหว่าเฟรมเหล่านี้โดยอัตโนมัติเพื่อให้หุ่นยนต์เคลื่อนไหวได้อย่างราบรื่น และเฟรมทั้งหมดจะดำเนินการเพียงรอบเดียว

หากเลือก  "<mark style="color:blue;">**Gait**</mark>"  ก่อนที่จะคลิกปุ่มส่งออก "[<mark style="color:blue;">**Export**</mark>](#export-the-skill)"หุ่นยนต์จะดำเนินการต่อในลูปและแต่ละเฟรมของการดำเนินการจะทำงานด้วยความเร็วสูงสุด จะไม่มีการเพิ่มการแก้ไขระหว่างเฟรมการดำเนินการ การเคลื่อนไหวอาจรุนแรงมาก ดังนั้นจึงขอแนะนำให้ผู้เริ่มต้นใช้ตัวเลือก "**พฤติกรรม**" เพื่อพัฒนาทักษะใหม่เสมอ

เมื่อนำเข้าอาร์เรย์ทักษะที่สร้างไว้ล่วงหน้า แอปเดสก์ท็อปจะเลือกตัวเลือก "**พฤติกรรม/การเดิน**" โดยอัตโนมัติตามรูปแบบข้อมูล เฟรมจะถูกโหลดลงในโปรแกรมแก้ไขเฟรม และหุ่นยนต์จะย้ายไปยังตำแหน่งของเฟรมแรกโดยอัตโนมัติ

{% hint style="info" %}
แอปเดสก์ท็อปจะรอให้หุ่นยนต์ส่งคืนโทเค็นการยืนยันหลังจากส่งคำสั่ง อาจค้างหากโปรแกรมของหุ่นยนต์หยุดทำงานหรือขาดการเชื่อมต่อ คุณไม่จำเป็นต้องปิดแอปเดสก์ท็อปและสูญเสียเฟรมการกระทำที่ไม่ได้บันทึก แต่กดปุ่ม "**รีเซ็ต**" บนกระดานหลักของหุ่นยนต์เพื่อหยุดการวนรอบการรอของแอป หากโปรแกรมยังไม่ตอบสนอง คุณสามารถคลิกปุ่มท่าทางในพื้นที่ "ท่าทางที่ตั้งไว้ล่วงหน้า" หรือลองเชื่อมต่อหุ่นยนต์อีกครั้งโดยใช้ปุ่ม "<mark style="color:blue;">**เชื่อมต่อ/ฟัง**</mark>"
{% endhint %}

### การควบคุมหุ่นยนต์หลายตัวพร้อมกัน

แอพเดสก์ท็อปรองรับการเชื่อมต่อของหุ่นยนต์หลายตัวผ่าน [serial ports](https://docs.petoi.com/communication-modules/usb-downloader-ch340c#connect-nyboard) (และผ่าน [the Bluetooth communication module](https://docs.petoi.com/communication-modules/dual-mode-bluetooth#connection-with-nyboard))เพื่อให้เกิดการควบคุมหุ่นยนต์หลายตัวพร้อมกัน แอปสามารถจดจำพอร์ตอนุกรมเป็นหุ่นยนต์ได้หลังจากทำการเชื่อมต่อทางกายภาพแล้วเท่านั้น หลังจากเปิดหุ่นยนต์ตามปกติแล้ว:

* USB

ก่อนอื่นให้เชื่อมต่อตัวอัปโหลด USB เข้ากับแผงวงจรหลักของหุ่นยนต์ จากนั้นใช้สายเคเบิลข้อมูลเพื่อเชื่อมต่อกับอินเทอร์เฟซ USB ของคอมพิวเตอร์

* Bluetooth

ขั้นแรกให้เสียบโมดูล Bluetooth เข้ากับบอร์ดหลักของหุ่นยนต์ (ไม่จำเป็นต้องใช้บอร์ดที่ใช้ ESP32) จับคู่บอร์ดกับอินเทอร์เฟซการตั้งค่า Bluetooth ของคอมพิวเตอร์ แอปเดสก์ท็อปจะตรวจจับว่ามีการเชื่อมต่อพอร์ตอนุกรมใหม่หรือไม่ เมื่อเชื่อมต่อพอร์ตอนุกรมหลายพอร์ตสำเร็จ ปุ่มตัวเลือกพอร์ตอนุกรมในพื้นที่ "<mark style="color:blue;">**State Dials**</mark>" จะเปลี่ยนเป็น "<mark style="color:blue;">**All**</mark>" คลิกรายการแบบเลื่อนลงเพื่อดูพอร์ตอนุกรมทั้งหมดที่เชื่อมต่อสำเร็จ หุ่นยนต์ทั้งหมดจะถูกซิงโครไนซ์แบบเรียลไทม์ด้วยวิธีนี้ คุณยังสามารถเลือกพอร์ตอนุกรมใดก็ได้เพื่อควบคุมหุ่นยนต์ที่เกี่ยวข้อง

หากคุณถอดปลั๊กซีเรียลพอร์ต USB บนคอมพิวเตอร์ (หรือเลือกที่จะตัดการเชื่อมต่อโมดูล Bluetooth ในอินเทอร์เฟซการตั้งค่า Bluetooth) พอร์ตอนุกรมที่เกี่ยวข้องจะถูกลบออกจากรายการแบบหล่นลงตามเวลาจริง

หากคุณถอดปลั๊กซีเรียลพอร์ต USB ทั้งหมด (ตัดการเชื่อมต่อโมดูลบลูทูธทั้งหมด) ปุ่มตัวเลือกพอร์ตอนุกรมจะแสดงเป็น "**ไม่มี**" และปุ่มด้านซ้ายจะแสดงขึ้น "<mark style="color:yellow;">**Listening**</mark>". แอปเดสก์ท็อปยังคงตรวจพบโดยอัตโนมัติว่ามีการเชื่อมต่อพอร์ตหรือไม่ เมื่อหุ่นยนต์เชื่อมต่อกับคอมพิวเตอร์อีกครั้งผ่านพอร์ต ปุ่มทางด้านซ้ายของเมนูแบบเลื่อนลงจะแสดงขึ้น "<mark style="color:green;">**Connected**</mark>". ชื่อพอร์ตที่สอดคล้องกันจะแสดงอยู่ในปุ่มตัวเลือกพอร์ตอนุกรม

หากคุณต้องการให้แอปเดสก์ท็อปหยุดตรวจหาการเชื่อมต่อแบบซีเรียล คุณสามารถคลิกปุ่ม"<mark style="color:green;">**Connected**</mark>" / ปุ่ม "<mark style="color:yellow;">**Listening**</mark>" ข้อความในปุ่มจะเปลี่ยนเป็น "<mark style="color:red;">**Connect**</mark>"และการเชื่อมต่อแบบพอร์ตทั้งหมดจะถูกตัดการเชื่อมต่อ คลิกปุ่ม "<mark style="color:red;">**Connect**</mark>" อีกครั้งเพื่อรีสตาร์ทฟังก์ชันการตรวจจับแบบเรียลไทม์
