# 使用Arduino IDE校准舵机

{% hint style="info" %}
校准舵机对于机器人的正常运行至关重要。
{% endhint %}

预组装版本的机器人应该已经正确安装了腿，但没有进行微调校准。

校准舵机前请确保您已经上传了OpenCat[主程序固件](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#10.-shang-chuan-zhu-yao-gong-neng-cheng-xu) 。

## \* 校准舵机流程背后的逻辑：

1. 在校准之前，通电前我们不知道舵机将指向哪里。 所以如果躯干连接上腿部部件，腿会旋转到随机角度，并可能与机器人的身体或其他腿碰撞并被堵转。 如果一个舵机堵转了很长时间，它可能会损坏。
2. 进入[主板配置模式](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 中的 `#define MAIN_SKETCH` 并上传）后，您需要在出现[清除校准数据](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#7.-qing-chu-xiao-zhun-shu-ju)提示时输入“Y”或“n”。 之后，所有的技能数据都会保存到控制器的静态内存中。 其中包括一个“校准”技能，这是一个所有关节都处在零位置的姿势。
3. 上传[标准功能程序](https://docs.petoi.com/v/chinese/arduino-ide/wei-nyboard-shang-chuan-cheng-xu#10.-shang-chuan-zhu-yao-gong-neng-cheng-xu)（启用OpenCat.ino 中的`#define MAIN_SKETCH` 并上传）后，您可以在[串口监视器](https://docs.petoi.com/v/chinese/arduino-ide/chuan-kou-jian-shi-qi)中输入“c”来校准关节。 该程序将读取“校准”姿势并将舵机旋转到已知位置。 所有舵机都应该从休息姿势旋转到校准位置。 然后你可以一个关节一个关节地连接腿部部件，连接时尽量垂直于周围的身体框架。

Nybble 和 Bittle 的校准原理相同。

进入校准模式需要做好以下准备：

‌1. 全部舵机线路与主板连接好

2\. 电池电量充足

3\. 连接好[USB适配器并能正常通信](https://docs.petoi.com/v/chinese/tong-xin-mo-kuai/usb-xia-zai-mo-kuai-ch340c#lian-jie-nyboard)

如果您使用未组装的套件构建机器人，请在校准之前不要安装头，腿组件。 您还需要安装电池并长按电池上的按钮为机器人供电。

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2F0ut32koZsNHUMAoaxnGp%2Fassets_bittle_wire2.jpeg?alt=media\&token=66dd55a4-24a9-48f4-a57b-6a38bcea5959)

校准分为三个步骤：

1. 进入校准模式，使舵机自由转动到中位；
2. 安装各个肢体到校准位；
3. 通过串口监视器微调关节修正量。

## 1. 进入校准模式

检查所有舵机接头插入的位置和方向，您**必须**把舵机和外接电池都插上NyBoard后才可以正确校准。 在我们安装腿部组件之前，舵机的输出轴应该处于零状态（转到中位然后停下）。

在串口监视器输入`c`来进入校准模式，舵机应该迅速地依次转到中位然后停下，同时齿轮箱会发出一些声响。由于舵机的起始位置各不相同，有些舵机的转角会大一些。在串口监视器会打印出一列表：

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2F0qH16ZCGzjTHxVrzvK69%2FcaliTable.png?alt=media\&token=64b4531b-bca6-4dbd-bc66-e3c60ed5123e)

第一行是关节序号，第二行是它们的修正量，第三行是刚刚输入的校准指令。

| **Index**  | 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 | 11 | 12 | 13 | 14 | 15 |
| ---------- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- |
| **Offset** | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |

初始的关节修正量是 “-1” 或 “0”，需要测定后修改。

{% hint style="info" %}
模型舵机用电位器作为位置环反馈的传感器。在保持某目标角度时，可能会有轻微抖动。舵机厂可以通过调整PID参数来抑制这种抖动，但随着电位器触点的磨损，这种“帕金森”症状会加重，但主要影响静态姿势的保持，在动态中并不明显。高端舵机可能会用贵上10倍的成本来解决这个问题，对我们而言，更换老化的舵机是更加经济的方案。
{% endhint %}

## 2. 安装舵机关联部件

### 2.1 坐标系

输入‘c’指令后，所有舵机都转到了中位，就可以安装之前组装好的舵机关联部件了。它们基本上按照相互垂直的角度互相连接，校准姿势如下图所示:

![Nybble校准姿势](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2F52R4o9Mbiw0DUuwAFmrj%2Fcalibration_Nybble.png?alt=media\&token=a6826c7b-edc5-4ac4-beda-dff286ed73dc)

![Bittle校准姿势](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FEZlk9cBEFYMyVY32vpUp%2Fzero.png?alt=media\&token=a1db8802-2ea5-4976-a8c2-83ca3d3c9c43)

{% hint style="info" %}
如果您使用未组装的套件搭建机器人，请按照上方图片安装舵机相关部件，并尽量保证它们相互垂直（大腿垂直于躯干， 小腿垂直于大腿）。 详细请参考用户手册中的相关章节：&#x20;

* Nybble
* Bittle
  {% endhint %}

{% hint style="warning" %}
把舵机关联部件直插到舵机输出轴上，这过程中不要转动舵机输出轴。
{% endhint %}

关节角使用本体极坐标系，以逆时针转动为正。从机身左侧看，关节逆时针转动定义为正方向。

{% hint style="info" %}
对于Nybble头的俯仰关节例外，因为我们习惯说“抬头”，直觉上是正方向，但从左侧看是顺时针转动。
{% endhint %}

{% hint style="info" %}
但从机身右侧看，转动方向的正负性刚好相反。
{% endhint %}

### 2.2 离散的角度间隔

如果我们仔细观察舵机输出轴，可以发现它上面有一定数量的齿，这些齿可以防止输出轴在转动时相对摇臂滑动。在我们的舵机上，输出轴的圆周被分隔成25个齿，每个齿间隔14.4度（偏移 -7.2\~7.2 度）。这意味着我们安装关节时不可能绝对垂直，只能尽可能地接近垂直。

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FtGPPbbSWCwftv6bVtg69%2Fassets_bittle_-MTLzoDqllmeUcpCu5jV_-MTM-Wiv6R3xuNmAhgrE_37.png?alt=media\&token=188de7e5-2957-47cc-b56e-e785290bf040)

## 3 使用串口监视器对机器人进行精细校准

### 3.1 关节控制命令

校准的指令格式（参考[串口协议](https://docs.petoi.com/v/chinese/chuan-kou-xie-yi)）是`cIndex Offset`，Index是舵机编号， Offset是校准修正量。注意Index和Offset之间有空格。 机器人舵机编号如下图所示：

![Nybble](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FIqnS2WPW6Ae1kGnVhvac%2FjointIndexNybble.png?alt=media\&token=2172a439-da2c-40f3-a7b7-2b4c450cd533)

![Bittle](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FgnOf1sGdDEB0Y5FYueSI%2FBittle-joint-Index.png?alt=media\&token=41b208f9-edef-459e-bff3-88fbed4e6a03)

比如:

`c8 6`表示给8号舵机+6度的修正量。对于每个舵机都需要进行这样的校准以使各部位转动到校准位。

c0 -4 表示给0号舵机-4度的修正量。

{% hint style="warning" %}
修正量的分辨率是1度，不要使小数。
{% endhint %}

{% hint style="info" %}
如果您发现需要的修正量的绝对值大于9度，那说明您在安装肢体时不够靠近校准位，这会导致该关节的有效行程不对称，在某一侧的可到达角度范围变小。把这个肢体取下来，转一个齿的角度重新安装，就可以得到一个方向相反，但是绝对值更小的修正量。
{% endhint %}

{% hint style="info" %}
比如，如果您必须使用 -9 作为校准值，请将肢体取下，旋转一颗牙齿，然后再装回去。 新的校准值应该在 5 左右，即它们的绝对值总和为 14。在重新安装时，避免旋转舵机的输出轴。
{% endhint %}

找到可以使肢体达到零状态的最佳偏移量。 这是一个反复试验的过程。

校准后，**记得要输入`s`来保存修正量**，否则程序重启后它们就失效了。您甚至可以每校准一个舵机就保存一次。

### &#x20;3.2 “L”形关节校准器

实际测量时，我们的观测会由于透视关系而产生偏差，这也是为什么我们在读直尺的刻度时要尽量在尺的上方平视。

在校准机器人的关节时，保持平视也特别重要，所以我提供了“L”形的关节校准器辅助参考。按**先调4个肩关节（8\~11）后调4个膝关节（12\~15）**&#x7684;顺序依次校准，目标是使校准器的三个尖角**同时**对准舵机螺丝或脚尖孔洞的圆心。在校准每个关节时，要从**圆心-尖角**的延长线上平视观察，校准器的三角窗口边应该和小腿上的三角窗口边平行。

#### Nybble

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FmsnLhsDvQTojQ9ZshTw4%2FNybble-L.jpg?alt=media\&token=1e12033f-7abb-4681-837a-08369db890f8)

#### Bittle

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FovWNh8Q8YlMtpVp4Hjre%2Fassets_bittle_-MSGw-I0q_j0kHosz8nz_-MSGx1sAobtzY1ucuddF_53.jpeg?alt=media\&token=bdbab52c-1a8e-49af-ba0c-d225e59c7ab6)

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2Fp7sI9RqkZrMD7ieGBc80%2Fcalib1.png?alt=media\&token=3cd8f642-2f70-4539-bc72-60ed0aeba32d)

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2F49bd8e1o0qPW16AG9UgN%2Fcalib2.png?alt=media\&token=9d15242b-65db-44f1-8383-4fc4775d4879)

### 3.3 验证校准效果

校准后，可在串口监视器输入`d`或`kbalance`验证效果。机器人会在对应的休息和站立姿势间切换，它的四肢应该是前后、左右对称的。

&#x20;您可能需要进行几轮校准才能达到最佳状态。

![](https://201656985-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ6a951Q6Jn1Zzt5Ajr-3369173170%2Fuploads%2FBBCz2Ox07NUvpQKNLa7L%2FcalibValidation_Bittle.png?alt=media\&token=c2dab063-99f0-4ef8-a0d8-e18e29ff215e)

### 3.4 调节重心

试着了解机器从如何在步行过程中保持平衡。如果要向机器人身体上添加新部件，请尽最大努力在脊柱周围对称分布其重量。也可以前后滑动电池座，以找到最佳的平衡位置。由于电池的前半部分较重，必要时您也可以反向插入电池，以使重心更多地向后移动。

{% hint style="info" %}
如果重心发生变化，您可能需要重新校准。
{% endhint %}

请不要强行为机器人增加过重的物品，可能导致舵机扫齿或卡住。
