# Petoi 编程积木

## 准备 Mind+

* 从Mind+官网下载最新版本（**不低于V1.7.0**）<https://mindplus.cc/download.html>
  * Windows: **>=** **V1.7.0**
  * Mac: **>=** **V1.7.3 RC2.0**
* 安装教程及如果出现问题可以参考Mind+官方文档： [安装教程](https://mindplus.dfrobot.com.cn/zhunbei)
* 安装完成后即可打开Mind+<br>

## 准备 Petoi 机器人&#x20;

### NyBoard

* 对于使用 [NyBoard](https://docs.petoi.com/v/chinese/nyboard/zong-shu) 的产品：[**Nybble**](https://nybble.petoi.com/v/chinese-1) 和 [**Bittle**](https://bittle.petoi.com/v/zhong-wen)。有两种方式来上传Mind+模式固件：
  * 使用[桌面应用程序](https://docs.petoi.com/v/chinese/zhuo-mian-ying-yong/gu-jian-shang-zai)\
    ![](/files/W549jOdY9Sd7qjAd8CYW)
    * 如果您刚刚下载了此桌面应用程序的新版本。 您应该单击**升级固件**按钮。 您可以选择“N”来保留原来的舵机校准参数。
    * 如果您在下载此桌面应用程序后已经升级过一次固件，则可以单击**只更新模式**按钮。 只切换模式而不刷主板配置模式固件可以更加节省时间。
  * 使用 Arduino IDE\
    请下载[GitHub网站](https://github.com/PetoiCamp/OpenCat)最新的程序代码，按照[上传程序固件](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#shang-chuan-cheng-xu-gu-jian)步骤，先进入[主板配置模式](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#2.-jin-ru-zhu-ban-pei-zhi-mo-shi)，再激活 **OpenCat.ino** 中的以下代码：\
    \&#xNAN;**`#define MAIN_SKETCH`**

    **`#define GROVE_SERIAL_PASS_THROUGH`**

    上传[主功能程序](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#10.-shang-chuan-zhu-yao-gong-neng-cheng-xu)上电启动机器人。使用数据线及[USB上载模块](https://docs.petoi.com/v/chinese/tong-xin-mo-kuai/usb-xia-zai-mo-kuai-ch340c#lian-jie-nyboard)与电脑端进行连接或者使用[蓝牙通讯模块](https://docs.petoi.com/v/chinese/tong-xin-mo-kuai/shuang-mo-lan-ya-mo-kuai#yu-nyboard-lian-jie)与电脑端完成配对。

{% hint style="warning" %}
机器人在[标准模式](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#11.-dai-ma-zhong-de-mo-kuai-hong)固件下也可以使用Mind+扩展库，但无法使用 “[读写 模拟/数字 引脚](#xie-mo-ni-zhi)” 功能积木块。

**注意：**

机器人在**Mind+模式**下，陀螺仪功能处于关闭状态，即机器人将不能保持自平衡，摔倒后不会自动翻身起立。
{% endhint %}

#### 通讯连接方式

* **有线连接：** 套件包含一个[USB适配器](https://docs.petoi.com/chinese/tong-xin-mo-kuai/usb-xia-zai-mo-kuai-ch340c)和一条USB数据线，用于将机器人的主板连接到计算机。
* **无线连接（蓝牙）：** 套件包含一个[蓝牙模块](https://docs.petoi.com/chinese/tong-xin-mo-kuai/shuang-mo-lan-ya-mo-kuai)，用于将机器人的主板连接到计算机。

### BiBoard

* 对于使用 [BiBoard](https://docs.petoi.com/v/chinese/kuai-su-shang-shou-zhi-nan) 的产品：[**Bittle**](https://bittle.petoi.com/v/zhong-wen) 和 [**Bittle X**](https://bittle-x.petoi.com/v/zhong-wen-1), 不需要修改任何软件代码，默认支持Mind+内所有功能积木块，同时陀螺仪功能处于开启状态，即机器人可以保持自平衡，摔倒后可以自动翻身起立。

#### 通讯连接方式

* **有线连接：** 套件包含一条USB Type-C数据线，用于将机器人的主板连接到计算机。
* **无线连接（蓝牙）：** 主板内置[蓝牙通信](/chinese/lan-ya-lian-jie.md)模块，可实现机器人主板与计算机之间的蓝牙无线连接。

## 导入Petoi Mind+扩展库

<figure><img src="/files/BdOaW3CN9uIu19re9o0q" alt=""><figcaption></figcaption></figure>

在导入用户库界面的文本框中粘贴GitHub网址：<https://github.com/PetoiCamp/Petoi_MindPlusLib>

<figure><img src="/files/iuVjbYZyTJxWIlVc2wLv" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/CyB3TTQjHrUU99bLyg3E" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
对于macOS旧版本Mind+(**<=V1.7.2 RC3.0**)，使用macOS导入扩展库后，请先下载[PetoiRobot.zip](https://github.com/PetoiCamp/Petoi_MindPlusLib/raw/main/PetoiRobot.zip)解压出来的文件夹（PetoiRobot）拷贝到/Users/{your username}/Documents/mindplus-py/environment/Python3.6.5-64/lib/python3.6/site-packages/中。

![](/files/PB5ijbBYcDUFVl7FsaOw)
{% endhint %}

## 编写程序并运行

<figure><img src="/files/WTr5lZgEYr38BI31oVu6" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Petoi 编程积木是 Mind+的用户扩展库。

如果您是通过双击图标![](/files/RsOTCs6KaINvTqjGez5o)打开 Mind+，它不会自动加载此扩展库 ，每次打开应用后都需要重新手动加载。

&#x20;如果您是通过双击使用了此扩展库的代码存档（后缀为mp或sb3）打开Mind+，或者在打开 Mind+后导入这些代码存档，则 Mind+会自动加载此扩展库。
{% endhint %}

## 程序运行原理及流程

使用此扩展库编写完成控制机器人的程序代码后，无需编译上传程序代码到机器人主板上。直接点击“运行”按钮即可运行程序代码。如需在程序运行过程中中止程序，可随时点击“停止”按钮。程序运行流程可分为三个步骤：

1. 打开串口
2. 控制机器人
3. 关闭串口

## 积木块使用说明

### 打开串口

打开串口有两种方式：

* 自动识别并打开串口\
  ![](/files/fQU3laLGjJfumMwkuIiE)
* 输入串口名称打开串口\
  ![](/files/WM56hAvjSxKBzLxFNjZZ)

{% hint style="info" %}
如果串口打开失败，可以参考终端窗口中的打印信息，更换串口名称：

![](/files/5nFQo4h3HVhQUOWEA1kH)
{% endhint %}

### 关闭陀螺仪

![](/files/JqXd0s5E7rU3jW6dqfki)

当开启陀螺仪功能时，机器人可以实时保持自身身体平衡，可能会看到机器人在做预设动作（尤其是执行比较剧烈的动作）时，身体会来回晃动，甚至会发生身体倾翻，这时机器人自动会做复原的动作，这样可能会打乱您预设的执行步骤。

如果上传的固件是Mind+模式程序固件（**`#define GROVE_SERIAL_PASS_THROUGH`** 此行代码被激活），机器人启动时默认是关闭陀螺仪功能 (机器人将不能保持自平衡，摔倒后不会自动翻身起立)，就不需要添加此积木块了。

{% hint style="info" %}
如果上传的是[标准模式](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#11.-dai-ma-zhong-de-mo-kuai-hong)程序固件，建议您在设计动作时，在程序打开串口后添加此积木块关闭陀螺仪， 机器人就不会实时做平衡反馈动作了。如下图所示：

![](/files/5gVkyPAQxmDGcGWIVFGN)
{% endhint %}

### 执行固有技能动作

![](/files/0SDN4fKkWB5y5r2rWRId)

使用此积木块可以让机器人执行烧录到机器人主板中技能动作。其中从“坐下”到“零位”，属于**姿势**（只包含一个动作帧）；从“拳击”到“闻一闻”，属于**行为**（包含多个连贯的动作帧，其中一部分连续动作帧可以循环执行多次，但所有动作帧按照顺序只执行一轮）；从“原地踏步”到“向右跑”，属于**步态**（包含多个连贯的动作帧，这些动作帧按照顺序循环不断重复执行）。配合使用积木块中延时设置，可以控制机器人在做完技能动作延迟预设时间后执行下一个积木块程序。

### 执行从技能创作坊中最新导出的一个技能

<div align="left"><figure><img src="/files/8dpxitiKUI1grZaOPdIC" alt=""><figcaption></figcaption></figure></div>

使用此积木块可以让机器人执行从[技能创作坊](https://docs.petoi.com/v/chinese/zhuo-mian-ying-yong/ji-neng-chuang-zuo-fang#dao-chu-dong-zuo)中最新导出的一个技能。配合使用积木块中延时设置，可以控制机器人在做完技能动作延迟预设时间后执行下一个积木块程序。

{% hint style="info" %}
相当于执行串口命令“**T**”，然后延迟预设时间执行后面的程序。
{% endhint %}

### 执行技能文件中的技能

<div align="left"><figure><img src="/files/Fb74vUUTJz2GYmjiKYeJ" alt=""><figcaption></figcaption></figure></div>

使用此积木块可以让机器人执行技能文件中的技能，技能文件位于以下目录中：

* **Windows**: C:\Users\\{your user name}\\.config\Petoi\SkillLibrary\\{model}
* **MacOS** : /Users/{your user name}/.config/Petoi/SkillLibrary/{model}
* **Linux**: /home/{your user name}/.config/Petoi/SkillLibrary/{model}

目录中文件夹名称 {**model**} 为 Bittle 或者 Nybble。 从[技能创作坊](https://docs.petoi.com/v/chinese/zhuo-mian-ying-yong/ji-neng-chuang-zuo-fang#dao-chu-dong-zuo)导出技能文件时，程序会自动将技能文件保存到该目录中。

{% hint style="info" %}
小技巧：您可以将GitHub上OpenCat项目源代码中的[SkillLibrary文件夹](https://github.com/PetoiCamp/OpenCat/tree/main/SkillLibrary)复制并粘贴到 ***.config/Petoi*** 目录中。 这样您就可以在Mind+程序中使用这些示例技能文件。

<img src="/files/RvIU90CTbCaeLWTHOWEf" alt="" data-size="original">
{% endhint %}

{% hint style="info" %}
文件夹 **.config** 在MacOS/Linux 中是隐藏文件夹，但可以在终端中或通过特定的视图设置访问：

* **MacOS** \
  在 Finder 中打开目录 /Users/{用户名}，然后同时按“Command”+“Shift”+“.” （句号）键即可显示隐藏文件夹。<br>

  <figure><img src="/files/lhWoPIcnmWIkqJE3flfR" alt=""><figcaption></figcaption></figure>

{% endhint %}

### 依次旋转关节

![](/files/YMk7QDFPGXBd3iw5G2HH)

使用此积木块可以控制一个关节或多个关节按顺序依次旋转，有以下几种积木块搭配使用方式供参考：

* 控制单个关节旋转到绝对角度值 <br>

  <div align="left"><figure><img src="/files/06KTlRMD9B6CMvt0fHgm" alt=""><figcaption></figcaption></figure></div>
* 控制单个关节旋转到相对角度值<br>

  <div align="left"><figure><img src="/files/gDmT8RYIjTt20o2nKVIi" alt=""><figcaption></figcaption></figure></div>
* 控制多个关节依次旋转到绝对角度值或相对角度值<br>

  <figure><img src="/files/QhMKjpebFBdqK9uJ2Dxh" alt=""><figcaption></figcaption></figure>
* 使用关节角度列表来控制多个关节依次旋转到绝对角度<br>

  <figure><img src="/files/CvnbSlhPDK1YvQzgIPn2" alt=""><figcaption></figcaption></figure>

配合使用积木块中延时设置，可以控制机器人在做完动作延迟预设时间后执行下一个积木块程序。

{% hint style="info" %}

* ![](/files/pc5LWat9qmDsSPQjMyB2)，![](/files/E6gpteUXRfJg1XZTrGEl)\
  代表由一个[关节序号](https://app.gitbook.com/o/-M-_eWZUjFA4usjshHcZ/s/-MQ6a951Q6Jn1Zzt5Ajr-3369173170/~/changes/235/petoi-ji-qi-ren-guan-jie-xu-hao)和一个角度值组成的列表。\
  比如示例中【头偏转角到30度】代表的是列表 `[0, 30]。`
* ![](/files/RnqecH3s9DRX1hvgrbj4)\
  由一对或多对 [关节序号](https://app.gitbook.com/o/-M-_eWZUjFA4usjshHcZ/s/-MQ6a951Q6Jn1Zzt5Ajr-3369173170/~/changes/235/petoi-ji-qi-ren-guan-jie-xu-hao) + 角度值 组成，具体格式如下：

  `[关节序号，角度值，关节序号，角度值 ......]`
  {% endhint %}

### 同时旋转关节

![](/files/go8BRyBm6uOH0pIHMLth)

使用此积木块可以控制多个关节同时旋转，有以下几种积木块搭配使用方式供参考：

* 控制多个关节同时旋转到绝对角度值或相对角度值<br>

  <figure><img src="/files/jysTo40hSFUYW2m4bPL8" alt=""><figcaption></figcaption></figure>
* 使用关节角度列表来控制多个关节同时旋转到绝对角度值<br>

  <figure><img src="/files/ElVAGxF4ZqVmiH6f2ukt" alt=""><figcaption></figcaption></figure>

配合使用积木块中延时设置，可以控制机器人在做完动作延迟预设时间后执行下一个积木块程序。

### 获取关节当前角度值

![](/files/Y6OTZ2qL0R8VXBycsgjE)

使用此积木块可以获取到所选关节的当前角度值，建议可以先将其赋值给一个变量，然后可以通过使用变量及逻辑算法，控制其他的关节旋转。

{% hint style="info" %}
此积木块的返回值只是一个角度值，不能单独将其填入“依次旋转”，‘’同时旋转“积木块中使用。
{% endhint %}

使用示例：

<figure><img src="/files/I5kcTfOd4qXrGBl4Fad2" alt=""><figcaption></figcaption></figure>

{% file src="/files/Oysec3RP7pqUo3U1OomX" %}

### 转换到动作帧

![](/files/XSMjzYQGXjwlLJapPJdg)

使用此积木块可以控制所有关节同时旋转，请与”动作帧“积木块搭配使用。如下图所示：

<figure><img src="/files/1YB7wHamL8jfPbMGuE1f" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
”动作帧“积木块代表由16个角度值组成的一个列表。其中每个角度值对应于相应[关节序号](https://app.gitbook.com/o/-M-_eWZUjFA4usjshHcZ/s/-MQ6a951Q6Jn1Zzt5Ajr-3369173170/~/changes/235/petoi-ji-qi-ren-guan-jie-xu-hao)舵机旋转到的绝对角度值。
{% endhint %}

配合使用积木块中延时设置，可以控制机器人在做完动作延迟预设时间后执行下一个积木块程序。

### 播放旋律

![](/files/qdie3TebMGdcBeByrdIP)

使用此积木块可以控制主板播放音乐。有以下几种积木块搭配使用方式供参考：

* 使用多个“音符+时值”积木块组成的列表<br>

  <figure><img src="/files/Bo3sY2zFk5ubg8vi7RJZ" alt=""><figcaption></figcaption></figure>
* 使用音符及时值列表<br>

  <figure><img src="/files/fl41cQUx9df7o5mjvYSe" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
![](/files/jto1iO47lB2JckLsBOpF)

由一对或多对 音符 + 时值 组成，具体格式如下：

`[`音符，时值，音符，时值，音符，时值`......]`
{% endhint %}

配合使用积木块中延时设置，可以控制机器人在播放完音乐延迟预设时间后执行下一个积木块程序。

### 执行串口命令

![](/files/sey5Nye11KnHRzN2oAUp)

使用此积木块可以给机器人发送串口命令，这样可以给您提供更多，更灵活的控制方式。比如可以输入“**kkcL**”（踢左前腿）， “**khiR**”(举右前腿打招呼)。更多串口命令请参考[串口协议](https://docs.petoi.com/v/chinese/api/chuan-kou-xie-yi)。

配合使用积木块中延时设置，可以控制机器人在执行完串口命令延迟预设时间后执行下一个积木块程序。

### 写模拟值

![](/files/hvf4dbutvCQzVVKrX7me)

使用此积木块可以给指定引脚写入模拟值。模拟值范围：0\~255

### 读模拟值

![](/files/43GrL4fncGnxOvWvsmvx)

使用此积木块可以读取指定引脚的模拟值。

### 写数字值

![](/files/YrDWNYphmO3yS8UVRvWA)

使用此积木块可以给指定引脚写入高低电平值。高电平: 1；低电平：0。

### 读数字值

![](/files/kozkmurdGQj8NGcjjoEg)

使用此积木块可以读取指定引脚的高/低电平值。高电平: 1；低电平：0。

### 关闭串口

![](/files/cujVVh2sjxOQVMJrw7vx)

一般在控制程序的结尾，建议使用此积木块关闭串口通讯。

### 示例程序

在GitHub仓库中([Petoi\_MindPlusLib/examples](https://github.com/PetoiCamp/Petoi_MindPlusLib/tree/main/examples))我们提供了一些相关示例程序，可供您下载参考。

<figure><img src="/files/HhHYB96J0Ju62ajvtNg1" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.petoi.com/chinese/tu-xing-hua-bian-cheng/petoi-bian-cheng-ji-mu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
