Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
📚➡️🤖
这里是介绍我们产品的文档中心。 我们会对产品硬件、软件进行快速迭代,将仿生机器人宠物推向世界。 请仔细阅读说明文档以配置您的机器人。 如果您需要任何帮助,请写信至 support@petoi.com,或在我们的论坛 petoi.camp 上发帖。
您可以使用此站点上的查找 (Cmd+K/Ctrl+K) 功能。 它支持 Lens,这是一项基于类似ChatGPT 的服务。
关节校准对于机器人正常工作至关重要。
预组装的机器人应该已安装腿部组件,但您可以通过微调关节的校准参数来进一步提高其性能。
校准前请确保您已上传 OpenCat 主功能固件。
在舵机通电和校准之前,您不知道它们上电后会指向哪里。 因此,如果您连接腿,腿将旋转到随机角度,并可能与机器人的身体或其他腿碰撞并被卡住。 如果舵机长时间卡住,则可能会损坏。
该机器人有一种称为“校准”的姿势,所有关节均设置为 0 度。 您可以设置机器人进入校准姿势状态,以便您知道所有关节都应该旋转到零度点(尽管您看不到,因为腿尚未连接到舵机输出轴的齿轮上)。 然后,您可以将身体组件逐个关节地连接到舵机输出轴的齿轮上,尽量保持相互垂直的关系(大腿与躯干垂直,小腿与大腿垂直,颈部安装时尽量保持头部正对正前方),如下图所示。
由于舵机输出轴的齿轮齿是离散的,因此不可能将支腿完美地对齐到直角。 因此,您需要在软件中微调偏移。
Nybble 和 Bittle 的关节校准原理是相同的。
进入校准状态需要做好以下几项准备工作:
将所有舵机线连接至主板
将电池连接至主板并开机(长按电池上的按钮可打开/关闭电源)
使用USB 适配器或蓝牙模块连接机器人与电脑或手机。
如果您使用未组装的套件搭建机器人,请不要在进入校准状态之前安装头部和腿部组件。
机器人的腿在启动时可能会指向未知的角度。 当进入校准状态时,关节将转动到零度位置。 您可以看到舵机输出轴上的齿轮旋转然后停止。 然后您可以连接腿部组件并在软件界面中微调关节偏转。 通过使用软件,有3种方式可以进入校准状态并对关节进行微调。
使用 Petoi 桌面应用程序
使用 Arduino IDE
您也可以通过保持侧立姿势启动机器人来进入校准状态。 这种方法不需要任何计算机、遥控器或者手机App。因此当您专注于从套件中组装机器人,手头没有计算机、遥控器或者手机App时,可以粗略校准关节舵机。
完成关节校准后,安装中心螺钉,固定所有关节部件和舵机齿轮。
我们人类和许多其他有腿动物都有很多关节。 这些关节让我们能够以多种方式自由行动。 尽管很难在机器人上重现这些复杂的运动,但我们可以将所有这些关节简化为有限数量的执行器。
当控制这么多关节时,首先要做的就是对它们进行索引。 我们可以根据它们与躯干的距离来定义顺序。 例如,肩关节比肘关节更靠近躯干,而让我们环顾四周的关节比让我们点头的关节更靠近躯干。 如果我们有尾巴,那么与肩关节相比,它就会像头部一样接近躯干。
所以我们可以这样对关节进行排序:头部平转、头部倾斜、尾部平转、尾部倾斜、4x 肩部(或臀部)开合、4x 肩部(或臀部)俯仰、4x 肘部(或膝盖)。 对于同一距离组中的关节,如果从后面看身体,我们可以从左前角顺时针索引它们。
当我们将这些关节映射到特定的机器人时,索引变得更加实用。 NyBoard 上关节伺服引脚的排列顺序如下:关节舵机引脚排序规律:
舵机插头有3根线。插入的方向很关键,插错可能会烧坏主板!!!
舵机线缆的颜色可能会有批次差别,但其中最暗色的(黑色或棕色)按惯例总是地线( GND)。地线要插到贴近主板的一端。
图中关节舵机的序号只与主板上的PWM管脚的位置相关。按照图示接线,不需要阅读 PCB 板上的舵机引脚号。
📱🤖
感谢您选择 Petoi 的机器狗 Bittle 或 机器猫 Nybble。 本操作指南将帮助您设置机器宠物,并提供更简单的 UI 来对机器宠物进行校准、控制和编程。 对于高级用户,我们建议您使用 Github 上的 OpenCat 固件更新机器宠物,以获得最佳兼容性和最新功能。
该应用程序适用于 iOS 和 Android 设备。
iOS 11+
如果在国内无法访问 Google Play,您可以用下面的 apk文件直接安装。安装前需要解压缩。
如果蓝牙模块在闪烁而 app 中的蓝牙设备扫描列表为空,首先检查是否已打开了App 的蓝牙和位置权限,如果仍搜索不到设备,可以尝试安装前一稳定版本。
您需要将蓝牙模块插入 NyBoard 上的 6 针插座。 注意蓝牙模块的引脚顺序。 长按电池上的按钮,开启机器宠物电源。
在机器宠物启动后或者使用过程中,如果蜂鸣器重复发出短鸣音乐,说明电池电量不足,请及时充电。充电口位于电池的一端。
如果主板是 BiBoard,不需插入蓝牙模块。
蓝牙模块上的 LED 闪烁表示等待连接。 打开应用程序 Petoi 并扫描以连接名称为 Bittle、Petoi 或 OpenCat 的设备。不要在手机系统设置中的蓝牙连接设置界面连接机器人! 请记住打开蓝牙服务并授予应用程序访问该服务的权限。
请记住打开蓝牙服务并授予应用程序访问该服务的权限。 在某些设备上,您可能还需要允许应用程序的位置服务,尽管我们没有使用任何这些信息。
应用程序将向蓝牙设备发送问候语,并期待 OpenCat 固件的响应。 在连接到应用程序之前,您需要在机器人上上传完整的 OpenCat 固件。 否则应用程序会认为它“不是 Petoi 设备”。 预组装的机器人应该已经上传了固件。 否则,您需要使用 Arduino IDE 或桌面应用程序对其进行上传固件。
如果蓝牙已连接,其 LED 将常亮。 机器宠物将演奏三音旋律。 如果稍后机器宠物没有响应或出现故障,请按 NyBoard 上的复位按钮重新启动 NyBoard 上的程序。
该应用程序会自动检测到使用了最新的 OpenCat 固件的 Nybble 或 Bittle。 否则,它将显示出 Nybble 或 Bittle 的选项供用户选择。 当然也可以在控制面板中点击打开右上角菜单,点击“选择宠物”重新访问该选项页面。
通过遥控器来控制机器人非常简单。
遥控器不需要配对。使用前要拔掉塑料绝缘片,在使用时要把发射端对着机身后部的接收器。如果机器人无响应,您可以通过手机摄像头来检查发射灯。如果按键时灯不闪,您需要更换遥控器电池;如果灯闪,那可能是机器人主机上的程序没有配置好。
我们使用的是通用的红外线遥控器,按键发出的信号只与它的位置有关。对应符号有助于记忆,因此在程序代码中我们定义了与位置相关的符号来引用这些键,例如第 1 行第 1 列的 K00,第 4 行和第 3 列的 K32。
使用键定义的缩写可以减少 SRAM 的使用。因为遥控器上的按键有限,您可以更改它们的功能定义来调试新功能。
下面的按键映射只是一个示意, 请在 OpenCat/src/infrared.h 中的 #define KXX 语句了解实际的按键定义。您也可以自定义这些按键的功能,请参考论坛帖子。
我们还为未来的批次制作了定制的遥控面板。 以前的用户可以下载设计文件并将其打印在 A4 纸上。
休息 关停舵机并使机器人趴下。如果机器人在做一些“怪异”的事,总可以按这个键让它停下。说到“怪异”我是认真的,机器人的头脑甚至连我也说不清;
在平衡站立姿势时,您可以从侧面推机器人,或者使它用后腿和尾巴站立,观察它如何试图在摇晃的平面上保持平衡。事实上,平衡算法在大部分姿态都是激活的;
前进、左转、右转可以使机器人以当前步态转向;
后退可以让机器后退,同时左右转也是可以的;
校准可以使机器人进入校准姿势并关闭陀螺仪;
踏步使机器人在原点踏步,验证装配和校准的精度;
爬、走、小跑是可以切换的不同步态,可以和方向键结合;
小跑后的按键是一些预设的姿势或行为;
陀螺仪 打开/关闭用于平衡反应的陀螺仪。关闭陀螺仪可加速使原来缓慢的步态更快更稳,但不推荐用于原来就快速的步态(小跑);
拎着机器人脊柱的中间把它悬在半空,这样它的腿可以自由运动。试试遥控器上的所有按钮,看看机器人有什么反应,然后把机器人放到水平的桌上,再试试这些按钮。不同的平面摩擦力可能对机器人的运动造成影响,比如地毯对于机器人的小短腿就好像杂草对于我们的腿一样,这种地形上就比较适合用爬行;
您可以下拉电池盒并沿着机器人肚子的中轴线滑动,这样可以调节重心位置,改善某些快速步态的表现;
机器人可以在一个小角度(<10度)的坡面上行走。
如果连接USB上传器后机器人一直发出短鸣音乐,并且串口监视器中打印 low power,则触发了低电压警报,您需要用电池为主板供电才能超过此告警阈值;
舵机应该由内部齿轮驱动,所以避免从外部快速掰动四肢;
不要让机器人连续行走太长时间,这可能会使电路和舵机过热,影响使用寿命;
不要让运行太久。 它会使电子设备过热并缩短伺服系统的使用寿命。
有时机器人会因为电压波动而死机。可以按复位键重启程序,而不用每次都开关电源;
对待机器人要像对待真的小猫小狗一样耐心和温柔。(^=◕ᴥ◕=^)
以下是用户首次使用App校准时的显示界面。
您也可以在控制面板中点击打开右上角菜单,点击“配置校准”重新访问该校准面。
预组装版本的机器人应该已经正确安装了腿,但没有进行微调校准。
如果您使用未组装的套件构建机器人,请在校准之前不要安装腿组件。 您还需要安装电池并长按电池上的按钮为机器人供电。
进入校准界面,点击“校准”按钮,所有舵机输出轴立即转动到校准位置。
如果您使用未组装的套件搭建机器人,请按照界面下方图片安装舵机相关部件,并尽量保证它们相互垂直(大腿垂直于躯干, 小腿垂直于大腿)。 详细请参考用户手册中的相关章节:
Nybble
Bittle
校准时请使用随附的 L 形工具作为参考:
先从“校准”界面图片中选择关节舵机索引号(调整腿部舵机时,先调整大腿,后调整小腿),然后单击 “+” 或 “-” 按钮,将关节微调至直角状态。
如果校准偏移量超过+/- 9度,则需要将舵机的相应部分拆下,偏转一个齿位重新安装,然后按“+”或“-”按钮。
例如,如果您必须使用 -10 作为校准值,请将肢体取下,偏转一颗齿牙,然后将其装回。 新的校准值应该在 4 左右,即它们的绝对值总和为 14。
注意:在此调整过程中应避免旋转舵机输出轴。
您可以通过点击休息、站立、行走按钮来回切换状态,测试校准效果。
注意:您可能需要进行第二轮校准才能获得最佳校准效果。
校准好后,切记要点击“保存”按钮,保存校准偏移量。 否则,单击左上角的 “<” 放弃校准。
校准前请确保您已经上传了OpenCat 。
当您使用USB上载模块为NyBoard上传固件时,请先下载并安装USB串口驱动程序:
为机器人上传固件有以下两种方法:
最简单的方法是使用 Petoi 桌面应用程序,因为使用这种方法不涉及编程。 您可以上传一些预设模式。
如果您有一定的编程经验,可以使用 Arduino IDE 修改我们的开源代码。
如果您的机器人主板是NyBoard,请参考章节:为NyBoard上传程序
如果您的机器人主板是BiBoard,请参考章节:为BiBoard上传程序
无论用何种方法上传固件,请尽量使用有线上载器,因为蓝牙连接不够稳定,如果在中途受到干扰可能会导致引导程序崩溃。
在控制面板中,您可以控制机器人执行各种姿势、行为和步态。
左侧面板设置机器宠物的步态和方向,并发送组合命令,例如“向左走”和“向前小跑”。 只有选择了初始步态和方向,机器宠物才会移动。 选择“踏步”,机器宠物只是原地踏步,当选择了“爬”,“行走”,“小跑”步态后,单击方向按钮“向后”之后,接着按“左”(或者“右”)按钮,可以让机器宠物向左后退(或者向右后退)。 暂停按钮 “||” 将暂停机器宠物的运动并关闭所有的舵机,以便您可以将关节旋转到任何角度。 “加速器”按钮()用来打开/关闭 陀螺仪,这是一个检测机器宠物身体姿势的传感器。 开启它会使机器宠物不断调整身体角度,并且会知道它何时摔倒。 关闭它会减少计算,可以让它走得更快更稳定。
内置的姿势和行为可以通过按下“默认动作”区域的按钮来触发。 建议不要过于频繁和重复地按下按钮。 给机器宠物一些时间来完成它当前的任务。
长按按钮并拖动,可以改变按钮位置;双击命令按钮可以对它进行编辑;您还可以通过按 “+” 按钮增加自定义的单一命令或者组合命令;
按下创建命令按钮后,你将看到以下命令编辑界面:
进入编辑状态后,显示一个精简的串口命令控制台(如上图所示),可以用来测试串口命令,控制机器人做各种动作。
您可以在代码文本框中输入以下常用的串口指令:
* 扭头 (旋转脖子舵机角度)
* 左右扭动头部(移动 关节1 角度1 关节2 角度2 .... 角度为-127~128)
* 坐
* 按顺序依次移动关节
* 同时移动多个关节
以下是关节的索引供您参考。仔细观察排序的模式并试着记住它们。
* 显示当前关节角度
* 长“喵”一声 (Nybble)
* 短“喵”三声 (Nybble)
* 播放短音(蜂鸣音 持续时间,持续时间为 0~256)
* 播放旋律(b音调 1 持续时间 1,音调 2 持续时间 2,音调 3 持续时间 3,.... 仅允许 64 个字符,其中持续时间为数字的倒数,即记谱法中的“几分之一音符”)
更详细的命令说明表格请参考文档中心串口协议章节。
您可以使用通讯软件(比如微信)或电子邮件将电脑中创作的技能文件发送到您的手机,并使用 Petoi 应用程序在手机上打开该文件。此操作将自动为新技能创建一个按钮, 打开控制面板就可以看到。
Github中的SkillLibrary文件夹是OpenCat 机器人的新技能的集合,可以供您参考。您可以用手机浏览器访问OpenCat工程的GitHub页面,打开技能文件(比如 Bittle_Fold.md),将其分享到手机应用Petoi,如下图所示,即可通过命令按钮来执行此技能。
同时欢迎您通过向此文件夹发送合并请求来分享您的新技能。
按下创建组合命令按钮后,您可以看到以下界面:
您可以在“名字”文本框中为组合命令组命名,并通过单击“指令库”选择框中的命令按钮将命令添加到“组合指令”列表中。 在组合指令列表中,您可以按住单个指令的按钮并拖动来更改单个指令的位置。
单击删除按钮,可以删除此组合指令。
我们会不断改进应用程序,并会在可用时通知您更新。 如果您对该应用程序有任何疑问,请写信至 support@petoi.com。
使用 Petoi 桌面应用程序进行精细校准。
下载完成压缩文件(.zip)后,请对其解压缩后再使用。
Windows用户,请不要将 UI.exe 移动到其他文件目录。
预组装版本的机器人应该已经正确安装了腿,但没有进行微调校准。
校准前请确保您已经上传了OpenCat主功能固件 的2.0版。
如果您使用未组装的套件构建机器人,请在校准之前不要安装腿组件。 您还需要安装电池并长按电池上的按钮为机器人供电。
USB上载器正确连接后(连接方法请参考USB上载模块相关章节),或使用蓝牙模块(连接方法请参考双模蓝牙模块相关章节)连接。
打开Petoi Desktop App(Windows:UI.exe / Mac:Petoi Desktop App),选择 产品 和 语言。点击“关节校准”按钮,打开校准界面:
注意:
由于Nybble比Bittle多使用两个舵机(头部和尾部),因此Nybble 与 Bittle 舵机关节索引号有所不同,其次Nybble 与 Bittle 进入校准状态后的校准姿势也有所不同,如下图所示(界面中淡黄色背景区域中舵机滑块不可使用):
点击“校准位”按钮,所有舵机输出轴立即转动到校准位置。
如果您使用未组装的套件搭建机器人,请按照界面下方图片安装舵机相关部件,并尽量保证它们相互垂直(大腿垂直于躯干, 小腿垂直于大腿)。 详细请参考用户手册中的相关章节:
Nybble
Bittle
2. 在校准过程中请使用随附的 L 形工具作为参考:
根据界面中间图示中的关节索引号(校准舵机时,先调整大腿,再调整小腿)。 拖动相应的滑块(在索引号下方),或点击滑块轨道的灰色部分将关节微调至直角状态。
如果校准偏移量超过+/- 9度,则需要将舵机的相应部分拆下,偏转一个齿位重新安装,然后按“+”或“-”按钮。
例如,如果您必须使用 -10 作为校准值,请将肢体取下,偏转一个齿牙,然后再将其装回。 新的校准值应该在 4 左右,即它们的绝对值总和为 14。
注意:在此调整过程中应避免旋转舵机输出轴。
您可以通过点击休息、站立、行走按钮来回切换状态,测试校准效果。
注意:您可能需要进行第二轮校准才能获得最佳校准效果。
校准完成后,记得点击“保存”按钮保存校准偏移量。 否则,单击“放弃”按钮放弃校准数据。 当然您也可以在校准过程中随时保存,以防连接发生中断丢失数据。
当您关闭界面窗口时,会弹出一个消息窗口,如下图所示:
如果要保存校准数据,请单击“Yes”按钮,否则单击“No”按钮。 单击“Cancel”按钮应用程序停留在当前界面。
下载完成压缩文件(.zip)后,请对其解压缩后再使用。
Windows用户,请不要将 UI.exe 移动到其他文件目录。
Petoi 桌面应用程序为您提供简洁的图形用户界面来配置固件、校准机器人并可以为您的机器人设计自定义动作。 主要功能模块是固件上载、关节校准和技能创作坊。
源代码主要采用 Python3 中的 Tkinker 模块编写,GitHub 代码仓库地址是: https://github.com/PetoiCamp/OpenCat/tree/main/pyUI
其中 UI.py 是所有模块的总入口:
UI.py 调用:
-> FirmwareUploader.py
-> Calibrator.py
-> SkillComposer.py
translate.py 为 UI 提供多语言支持。 您可以帮助我们将 UI 翻译成您的语言。 在运行应用程序之前,您必须使用随附的 USB 适配器或蓝牙模块连接到 Petoi 机器人。
您可以使用预编译的可执行程序文件,就不需要使用编程界面了。
下载 Mac 版本后,您必须将其拖到 Application 文件夹中。
如果您看到“Petoi Desktop App”由于无法验证开发者而无法打开的错误消息,您可以右键单击该图标,按住 Shift 键并单击“打开”。
如果此应用程序在运行时出现兼容性问题,或者您想修改应用程序的源代码并进行测试,您也可以在Terminal 中运行程序。 Terminal 是 Mac 或 Linux 系统中的内置界面,Windows 系统中的等效环境称为命令行工具 (CMD)。 建议您安装 Anaconda 来管理您的 Python 环境,它还可以提供 Powershell 作为旧 Windows 系统中的Terminal 。
根据您现有的 Python 配置,您可能需要升级到 Python3 并安装以下库:
pyserial
pillow
您可以通过在Terminal 中输入 pip3 install pyserial pillow
或使用 Anaconda 中的包管理器来安装它们。 运行程序步骤如下:
在终端中,使用 cd
命令导航到 OpenCat/pyUI/ 文件夹, 其间您可以使用 Tab 键自动补充完成路径名
进入 pyUI/ 文件夹后,输入 ls
查看此路径下的所有文件,确保可以看到列出的 UI.py 和其他 python 脚本文件
输入 python3 UI.py
即可开始运行Petoi 桌面应用程序
对于Linux系统用户,如果遇到 python 报错信息
“_tkinter.TclError: no display name and no $DISPLAY environment variable”,可以尝试安装 python3-tk,tk-dev,以Debian / Ubuntu为例命令如下:
apt install python3-tk
apt install tk-dev
安装完成后,重启电脑。
本指南适用于初学者。 让您更轻松地开始使用机器人(Nybble / Bittle)。
下载完成压缩文件(.zip)后,请对其解压缩后再使用。
Windows用户,请不要将 UI.exe 移动到其他文件目录。
电脑端桌面应用程序 Petoi Desktop App 适用于 机器人 Nybble 和 Bittle,机器人主板 NyBoard采用Arduino UNO ATmega328P主控芯片, 主板 BiBoard 采用 ESP32 主控芯片。
关于NyBoard更详细的规格参数请参考 NyBoard V1_0 或 NyBoard V1_1 或 NyBoard V1_2 (电子原件布局与 NyBoard V1_2 相似)。
关于BiBoard更详细的规格参数请参考 BiBoard V0 快速上手指南。
NyBoard
NyBoard 主板型号(版本信息),请见主板上的丝印。
NyBoard V1_1 主板型号(版本信息),可参考图示位置:
将I2C开关(SW2)拨到“Arduino”
I2C 开关改变 I2C 设备(陀螺仪/加速度计、伺服驱动器、外部 EEPROM)的主控。 默认“Arduino”时,NyBoard 使用板载 ATmega328P 作为主芯片; 拨到“RPi”端时,NyBoard 使用通过 I2C 端口(SDA、SCL)连接的外部芯片作为主芯片。
注意:
有时,如果您无法启动Bittle / Nybble,比如在串口连续打印:Init IMU\r\n,
则可能是您不小心将开关拨到了“RPi”端。
在上传固件前,请确保不要在主板的I2C接口连接任何I2C设备,否则会导致固件上载失败。I2C接口位置如下图示(红框内):
BiBoard
BiBoard 主板型号(版本信息),可参考图示位置:
在预组装的Bittle / Bittle X上,您可以这样查看BiBoard的版本信息:
不同计算机可能存在一些操作系统平台兼容性问题。 但您仍然可以直接从终端(windows: Command Prompt; Linux / Mac OS: Terminal )运行该应用程序:
在终端中将文件路径切换到 OpenCat/pyUI/。
为你的 Python3 安装 pyserial,Pillow 。 你也可以创建一个干净的 Anaconda Python3虚拟环境和使用使用命令 pip3 install pyserial Pillow 安装必要的库文件。
运行 python3 UI.py 命令启动应用程序。
对于NyBoard,固件上传主要是调用应用程序 avrdude 来为主板上传固件文件。
对于BiBoard,固件上传主要是调用应用程序 esptool 来为主板上传固件文件。
具体步骤可参考USB上载模块中连接NyBoard部分。
USB上载器正确连接后,打开 Petoi Desktop App(Windows:UI.exe / Mac:Petoi Desktop App / Linux: Petoi-opencat),选择 产品 和 语言。
法语,日语……等版本还未完成翻译。欢迎为我们的 GitHub 代码仓库做贡献:OpenCat/pyUI/translate.py。
注意:1.0 版软件无法与 关节校准、技能创作坊 及其他 API 一起正常工作。此版本固件仅在您需要使用 CodeCraft(我们的合作伙伴 TinkerGen 提供的图形化编程工具)时使用。
主板型号(硬件版本)和 软件版本 之间没有任何关联。
单击“上传”按钮后,上传过程立即开始。 底部状态栏会实时显示当前进度,以及关键流程的结果。
参数固件上传成功后,主板开始自动运行配置程序。 会依次弹出一些消息窗口供您确认或取消:
舵机校准参数清零? (Y/N)
选择点击“是(Y)”,程序会将所有舵机校准参数清零,状态栏会实时更新相应的过程和结果。
选择点击“否(N)”,程序将跳过此步骤。
对于 1.0 版本软件,会弹出 “更新技能? (Y/N)” 的警告信息窗口,如下所示:
选择“是(Y)”,程序会更新所有技能配置参数,状态栏会实时更新相应的流程和结果。
选择“否(N)”,程序将跳过此步骤。
如果您是第一次上传这个版本的软件,请务必选择点击 “是(Y)”!
对于 2.0 版本软件 ,此选项会在后台自动处理为 Y。
2. 校准 IMU? (Y/N)
选择点击“是(Y)”,程序会校准陀螺仪(IMU),状态栏会实时更新相应的过程和结果。
选择点击“否(N)”,程序将跳过此步骤。
注意:
在点击“是(Y)”按钮之前,请确保将 主板 水平放置。
首次上传不同的版本固件时,请务必点击“是(Y)”按钮!
完成所有步骤后,将弹出一个消息窗口,显示“参数初始化完成!” 您需要确认进行第二轮上传主程序固件。
校准舵机驱动芯片
在校准 IMU后有一步可选的操作来校准舵机驱动:
您可以通过校准舵机驱动芯片(PCA9685 chip)来让角度控制更加精准。用一根跳线连接 PWM 引脚3(舵机控制脚的信号脚之一 )和 Grove 引脚 A3,并把线按稳。
您不需要专门的跳线来完成这一步。任何能连通引脚的细金属线都可以,比如拉直的回形针。
程序会测量信号脉宽,在连续三次测量到相同读数后自动校准芯片。校准修正值会被存入控制板并在下次启动时生效。然后您可以继续进行下一步。
如果机器人的某个舵机停止转动,但将电池断电重启后又能转动,很可能就是因为舵机驱动信号不准,这一步就不可跳过。
主程序固件上传完成后,状态栏会更新固件上传成功或失败等相应结果。 如果上传成功,则会弹出“固件上传完成!”消息窗口。
注意:
首次打开桌面应用软件上传固件时,程序会先上载“参数”固件,再上载“主程序”固件。 如果上载成功后重新上传,只是修改了“模式”选项,应用软件只上载“主程序”固件。
如果 NyBoard 未连接电池或者未打开电源供电,固件上传成功后,您会听到重复的下降旋律,表示电池电量低。 您需要连接电池并打开其电源供电。
如果您有 Arduino IDE 编程经验,可以参考使用 Arduino IDE 上载程序固件。
NyBoard相当于一块通用的Arduino Uno板,具有丰富的外设。 除了原生 Arduino IDE 之外,您还可以使用 Mind+ 积木块对其进行编程。 但要注意,如果使用此模式,原有的 OpenCat 固件会被覆盖,稍后需要重新上传固件才能恢复默认的机器人功能。
设置编码环境很简单,具体步骤如下:
介绍如何在Mind+中使用我们专门为Petoi机器人开发的扩展库
从Mind+官网下载最新版本(不低于V1.7.0)
Windows: >= V1.7.0
Mac: >= V1.7.3 RC2.0
安装教程及如果出现问题可以参考Mind+官方文档:
安装完成后即可打开Mind+
对于使用 的产品: 和 。有两种方式来上传Mind+模式固件:
使用
如果您刚刚下载了此桌面应用程序的新版本。 您应该单击升级固件按钮。 您可以选择“N”来保留原来的舵机校准参数。
如果您在下载此桌面应用程序后已经升级过一次固件,则可以单击只更新模式按钮。 只切换模式而不刷主板配置模式固件可以更加节省时间。
使用 Arduino IDE
请下载最新的程序代码,按照步骤,先进入,再激活 OpenCat.ino 中的以下代码:
#define MAIN_SKETCH
#define GROVE_SERIAL_PASS_THROUGH
上传上电启动机器人。使用数据线及与电脑端进行连接或者使用与电脑端完成配对。
机器人在固件下也可以使用Mind+扩展库,但无法使用 “” 功能积木块。
注意:
机器人在Mind+模式下,陀螺仪功能处于关闭状态,即机器人将不能保持自平衡,摔倒后不会自动翻身起立。
Petoi 编程积木是 Mind+的用户扩展库。
如果您是通过双击使用了此扩展库的代码存档(后缀为mp或sb3)打开Mind+,或者在打开 Mind+后导入这些代码存档,则 Mind+会自动加载此扩展库。
使用此扩展库编写完成控制机器人的程序代码后,无需编译上传程序代码到机器人主板上。直接点击“运行”按钮即可运行程序代码。如需在程序运行过程中中止程序,可随时点击“停止”按钮。程序运行流程可分为三个步骤:
打开串口
控制机器人
关闭串口
打开串口有两种方式:
如果串口打开失败,可以参考终端窗口中的打印信息,更换串口名称:
当开启陀螺仪功能时,机器人可以实时保持自身身体平衡,可能会看到机器人在做预设动作(尤其是执行比较剧烈的动作)时,身体会来回晃动,甚至会发生身体倾翻,这时机器人自动会做复原的动作,这样可能会打乱您预设的执行步骤。
如果上传的固件是Mind+模式程序固件(#define GROVE_SERIAL_PASS_THROUGH
此行代码被激活),机器人启动时默认是关闭陀螺仪功能 (机器人将不能保持自平衡,摔倒后不会自动翻身起立),就不需要添加此积木块了。
使用此积木块可以让机器人执行烧录到机器人主板中技能动作。其中从“坐下”到“零位”,属于姿势(只包含一个动作帧);从“拳击”到“闻一闻”,属于行为(包含多个连贯的动作帧,其中一部分连续动作帧可以循环执行多次,但所有动作帧按照顺序只执行一轮);从“原地踏步”到“向右跑”,属于步态(包含多个连贯的动作帧,这些动作帧按照顺序循环不断重复执行)。配合使用积木块中延时设置,可以控制机器人在做完技能动作延迟预设时间后执行下一个积木块程序。
相当于执行串口命令“T”,然后延迟预设时间执行后面的程序。
使用此积木块可以让机器人执行技能文件中的技能,技能文件位于以下目录中:
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}
文件夹 .config 在MacOS/Linux 中是隐藏文件夹,但可以在终端中或通过特定的视图设置访问:
MacOS 在 Finder 中打开目录 /Users/{用户名},然后同时按“Command”+“Shift”+“.” (句号)键即可显示隐藏文件夹。
使用此积木块可以控制一个关节或多个关节按顺序依次旋转,有以下几种积木块搭配使用方式供参考:
控制单个关节旋转到绝对角度值
控制单个关节旋转到相对角度值
控制多个关节依次旋转到绝对角度值或相对角度值
使用关节角度列表来控制多个关节依次旋转到绝对角度
配合使用积木块中延时设置,可以控制机器人在做完动作延迟预设时间后执行下一个积木块程序。
[关节序号,角度值,关节序号,角度值 ......]
使用此积木块可以控制多个关节同时旋转,有以下几种积木块搭配使用方式供参考:
控制多个关节同时旋转到绝对角度值或相对角度值
使用关节角度列表来控制多个关节同时旋转到绝对角度值
配合使用积木块中延时设置,可以控制机器人在做完动作延迟预设时间后执行下一个积木块程序。
使用此积木块可以获取到所选关节的当前角度值,建议可以先将其赋值给一个变量,然后可以通过使用变量及逻辑算法,控制其他的关节旋转。
此积木块的返回值只是一个角度值,不能单独将其填入“依次旋转”,‘’同时旋转“积木块中使用。
使用示例:
使用此积木块可以控制所有关节同时旋转,请与”动作帧“积木块搭配使用。如下图所示:
配合使用积木块中延时设置,可以控制机器人在做完动作延迟预设时间后执行下一个积木块程序。
使用此积木块可以控制主板播放音乐。有以下几种积木块搭配使用方式供参考:
使用多个“音符+时值”积木块组成的列表
使用音符及时值列表
由一对或多对 音符 + 时值 组成,具体格式如下:
[
音符,时值,音符,时值,音符,时值......]
配合使用积木块中延时设置,可以控制机器人在播放完音乐延迟预设时间后执行下一个积木块程序。
配合使用积木块中延时设置,可以控制机器人在执行完串口命令延迟预设时间后执行下一个积木块程序。
使用此积木块可以给指定引脚写入模拟值。模拟值范围:0~255
使用此积木块可以读取指定引脚的模拟值。
使用此积木块可以给指定引脚写入高低电平值。高电平: 1;低电平:0。
使用此积木块可以读取指定引脚的高/低电平值。高电平: 1;低电平:0。
一般在控制程序的结尾,建议使用此积木块关闭串口通讯。
下载完成压缩文件(.zip)后,请对其解压缩后再使用。
Windows用户,请不要将 UI.exe 移动到其他文件目录。
打开桌面应用程序后,点击“技能创作坊”按钮,即可打开技能创作界面。
界面分为“关节控制器”,“状态开关”,“预设姿态”,“技能编辑器”四个区域:
如上图(技能创作界面)所示。
在添加新的动作帧后,有以下四种方式对该帧动作(当前动作帧)内容进行编辑:
注意:修改完成当前动作帧后,如果 “ = ” 按钮中的符号变为“!”,记得点击此按钮(“!”)保存该动作帧内容。
如果删除的动作帧为当前动作帧,删除后,之前紧挨在所删动作帧上方的一个动作帧自动激活为当前动作帧
如果删除的动作帧不是当前动作帧,删除后,当前动作帧内容保持不变(如果当前动作帧之前在删除的动作帧下方,删除动作帧后,只是当前动作帧的序号会自动减1)
在导出动作行为时,如果想将动作帧列表中的所有动作按照镜像(动作帧列表中每一帧动作都将按机器人左右对称的方式,左右两边关节动作进行互换)一起导出,可以先点击“镜像导出”按钮(选中后按钮呈现凹陷状态 ),再点击“导出”按钮。如果想取消镜像导出,可以再次点击已选中的“镜像导出”按钮(取消后按钮呈现凸起状态 )。
导出动作技能后,可以通过以下几种方式来调用:
技能编辑器导出的技能存储在EEPROM中。 它可以在关闭电源并重新启动后保留,但会被新的导出技能覆盖。
导入动作帧时,有以下两种方式:
点击对话框中的“打开文件”按钮,通过选取之前导出保存的文本文件来导入动作行为:选中动作文件,点击“打开”后,对话框中的文本编辑区自动显示动作文件中的内容,如下图所示:
如果你了解动作数组的结构和数值含义,可以在文本编辑区域修改数组中数值。
按照文本编辑区域中的提示信息,先点击对话框中的“清空”按钮,再从Instinct***.h (***代表Bittle或者Nybble)复制技能数组后, 再粘贴到文本编辑区域中。
注意:复制时至少要保留数组的大括号!
确认无误后,点击对话框中的“确认”按钮即可导入动作。如果数组格式有误(比如数组中缺失了一些数值,或者表示循环次数的值不正确等),点击对话框中的“确认”按钮后,程序会弹出一个“格式有误”消息提示框,提示用户更正文本编辑区域中动作数组内容。
导入成功后,机器人会自动简单复现动作帧列表中的第一帧动作。
点击对话框中的“取消”按钮,即取消当前导入操作。
同时欢迎您通过向此文件夹发送合并请求来分享您的新技能。
您也可以在循环次数文本框中输入-1,这样所选取的循环动作帧就会一直不断循环下去,除非您按下机器人主板上的复位键。
1,2,4,8,12,16,32,48,最快
注意:
您也可以在速度选项框中输入 0~125(0表示最大运行速度)范围内的任意整数值来自定义运行速度。
长时间以最快的速度运动会对舵机造成损坏,所以一般情况下建议不要设置为“最快”。
有17个预设值供您选择: 0,50,100,200,300,400,500,600,700,800,900,1000,2000,3000,4000,5000,6000
当然您也可以在延时文本框中手动输入 0~6000范围内的任意整数值,单位是:毫秒(ms)。
None 表示无触发轴,解发角条件设置
Pitch 表示正俯仰,机器人身体向前俯下方向旋转
-Pitch 表示负俯仰,机器人身体向后仰起方向旋转
Roll 表示正横滚,机器人身体向自身左侧翻滚
-Roll 表示负横滚,机器人身体向自身右侧翻滚
触发角设置范围是:-125 ~ 125 之间的整数值。
当动作帧中设置了具体的触发轴,触发角时,只有当机器人在完成此帧关节动作后,并按照预设的身体旋转方向旋转越过触发角时,才会触发下一帧动作。如果此动作帧还设置了延时时长,那么机器人在运行此动作帧时,不但要满足触发轴,触发角设置的触发条件,还要达到延时设置时长,才会触发执行下一帧动作。
当创作与机器人身体旋转相关的动作行为(比如后空翻,做单杠运动等)时,尤其是需要在机器人身体转到某个角度时发力,结合触发轴、触发角合理设置,效果可能会更好些。因为在运动过程中,我们可以通过陀螺仪来实时监测机器人身体旋转角度,这样就可以使机器人做到当身体旋转到最理想的角度时来触发关节舵机做动作,从而更高效地做动能势能转换。
如果想在动作帧列表的第一帧动作之前插入动作帧列表中的某帧动作,操作会稍微复杂一些:首先将第一帧动作激活为当前动作帧,然后点击第一个动作帧中的“添加”按钮, 这样就在第一个动作帧下方新增一个与该动作帧内容相同的动作帧,然后再将想要插入的动作帧激活为当前动作帧, 然后再次点击第一个动作帧中的“添加”按钮,这样就在第一个动作帧下方插入了想要插入的动作帧,最后点击第一个动作帧中的“删除”按钮,将第一个动作帧删除。
在导入动作帧后,程序会按照所导入的动作数组格式,自动识别并变更行为、步态选项。机器人会自动简单复现动作帧列表中的第一帧动作。
有时桌面应用程序会进入一种类似死机的状态,可能因为程序没有收到命令执行完毕的回馈信息。这时最好不要关掉程序(因为当动作帧列表中已编辑了很多动作帧,而且如果没有进行导出保存操作,直接关掉程序,再次打开程序后,之前编辑的动作帧程序是无法自动恢复的),这时可以直接按下机器人主板上的复位键,如果程序还是没反应,你可以再点一下预设姿态区域一个动作姿态按钮。当桌面应用程序捕捉到命令执行完毕的回馈信息后,就会自动跳出循环等待回馈状态,也就可以接着正常运行了。
如果您在电脑端拔掉一个USB串口(或者在在蓝牙设置界面选择断开此蓝牙模块), 这时串口下拉列表也会随之实时更新(减少对应的串口名称)。
如果您想让桌面应用程序停止检测串口连接,可以点击“已连接”按钮(按钮中文字变为“连接” ),就会断开所有的串口连接。再次点击“连接”按钮,将恢复串口实时检测功能。
您可以修改OpenCat/pyUI/中的技能创作坊的源代码SkillComposer.py来进行二次开发。
单击Test或播放() 按钮可以测试组合指令的执行效果。在组合命令执行过程中,单击暂停( )按钮, 可以中断执行流程。
选项 | 可供选值 | 备注 |
---|---|---|
对于使用 的产品: 和 , 不需要修改任何软件代码,默认支持Mind+内所有功能积木块,同时陀螺仪功能处于开启状态,即机器人可以保持自平衡,摔倒后可以自动翻身起立。
在导入用户库界面的文本框中粘贴GitHub网址:
对于macOS旧版本Mind+(<=V1.7.2 RC3.0),使用macOS导入扩展库后,请先下载解压出来的文件夹(PetoiRobot)拷贝到/Users/{your username}/Documents/mindplus-py/environment/Python3.6.5-64/lib/python3.6/site-packages/中。
如果您是通过双击图标打开 Mind+,它不会自动加载此扩展库 ,每次打开应用后都需要重新手动加载。
自动识别并打开串口
输入串口名称打开串口
如果上传的是程序固件,建议您在设计动作时,在程序打开串口后添加此积木块关闭陀螺仪, 机器人就不会实时做平衡反馈动作了。如下图所示:
使用此积木块可以让机器人执行从中最新导出的一个技能。配合使用积木块中延时设置,可以控制机器人在做完技能动作延迟预设时间后执行下一个积木块程序。
目录中文件夹名称 {model} 为 Bittle 或者 Nybble。 从导出技能文件时,程序会自动将技能文件保存到该目录中。
小技巧:您可以将GitHub上OpenCat项目源代码中的复制并粘贴到 .config/Petoi 目录中。 这样您就可以在Mind+程序中使用这些示例技能文件。
,
代表由一个和一个角度值组成的列表。
比如示例中【头偏转角到30度】代表的是列表 [0, 30]。
由一对或多对 + 角度值 组成,具体格式如下:
”动作帧“积木块代表由16个角度值组成的一个列表。其中每个角度值对应于相应舵机旋转到的绝对角度值。
使用此积木块可以给机器人发送串口命令,这样可以给您提供更多,更灵活的控制方式。比如可以输入“kkcL”(踢左前腿), “khiR”(举右前腿打招呼)。更多串口命令请参考。
在GitHub仓库中()我们提供了一些相关示例程序,可供您下载参考。
在使用桌面应用程序前,请使用电池给机器人正常上电。桌面应用程序启动后,会自动检测电脑连接的串口(“”区域从左数第一个按钮中显示“检测中” ),使用串口连接机器人时,请先将USB上载器接到机器人主板上,再使用数据线将USB上载器连接到电脑的USB接口。此时桌面应用程序给串口发送一个信号,如果串口所连设备正在运行OpenCat机器人程序,收到这个信号后,就会应答。如果二者匹配,桌面应用程序就会自动连接到该串口(此按钮中文字变为“已连接” )。当串口连接成功后,如果您需要断开串口连接,您可以通过点击“此按钮来断开串口连接(按钮中文字变为“连接” )。
在“区域中, 为方便用户创作动作行为设计了9个简单的动作姿态按钮(比如“站立”,“蹲坐”,”休息“……)。在将“”区动作帧列表中任意动作帧激活为后,您可以通过点击这些姿态按钮将动作帧内容直接设置为预设姿态。比如您可以将某个预设姿态作为您创作动作的起始点(“”区中编号为0的第一帧动作)。点击这些姿态按钮后,可以看到“”区中每个关节舵机序号下对应的滑块会滑动到相应的角度值。
在”“区域中可以看到一个类似动画帧一样的结构——动作帧列表,表中一行代表一个动作帧。
可以通过点击每个动作帧中的“添加”按钮( v )或“删除”按钮( < )来增减动作帧从而形成完整连贯的动作行为。
动作帧序号()后面的 “ = ” 按钮()的主要功能是:通过点击此按钮可以把所在行的动作帧激活为当前动作帧(当前动作帧的 “ = ” 按钮呈现凸起状态, 且明显大于其它动作帧中的此按钮),此时就可以对该动作帧的内容进行编辑。按钮中显示 “=” 表示当前动作帧为已保存好的动作;当此动作帧的内容被修改时(比如修改了某个关节舵机的角度值,调整了机器人的身体姿态等)此按钮中的符号会变为“!”。对当前动作帧修改完成后,记得再次点击此按钮以保存当前动作帧内容(此时按钮中的符号会再次变为“=” )。
点击动作帧列表中某个动作帧中最后一个按钮(“添加”按钮 v )后,就会在该动作帧的下方(表示做完该动作之后紧接着要做的动作)新增一个与当前动作帧内容完全相同的动作帧,并且自动将新增动作帧激活为当前动作帧(注意新增动作帧的内容是与当前动作帧内容相同,并不一定与“添加”按钮所在的动作帧内容相同,除非“添加”按钮所在的动作帧即为当前动作帧)。例如在程序初始状态:动作帧列表中只有一个动作帧(只有一行),且为当前动作帧。点击该动作帧中的“添加”按钮后,会在该动作帧下方新增一个与该动作帧内容相同的动作帧,并且自动将新增的动作帧激活为当前动作帧。
通过按下鼠标左键并拖动“”区域中的滑块来调节机器人的身体姿态
界面中左侧“”区域中“俯仰”、“横滚”、“脊向”、“高度”滑块用来调节机器人身体整体的姿态,每个关节舵机序号下对应的滑块用来调节对应关节的旋转角度。通过按下鼠标左键并拖动这些滑块可以修改当前动作帧内容(拖动滑块时,可以看到机器人会实时做出相应的姿势动作)。为了提高调节舵机的效率,我们在“”区域每个关节舵机序号下还设计了两个联动按钮(“+” 和 “-”),用来实现多个关节同时联动的效果。在程序启动后的初始状态下,所有联动按钮呈现凸起状态,表示未被选中;单击联动按钮后,按钮呈现凹陷状态,表示此关节已被选中;再次单击已被选中的联动按钮,按钮呈现凸起状态,表示此关节未被选中,即取消联动。当某个关节舵机的“+”联动按钮被选中时,用鼠标左键按下并拖动其他关节舵机的滑块,该关节舵机会随之同时同向转动;当某个关节舵机的“-”联动按钮被选中时,用鼠标左键按下并拖动其他关节舵机的滑块,该关节舵机会随之同时反向转动。当然对于同一个关节舵机, “+” / “-” 联动按钮只能选择其一。如果想取消所有的已选中联动关节,可以直接点击“”区域中央的“取消所有联动”按钮。“”区域中有些滑块导轨背景色为米黄色,表示该关节舵机暂不支持,因此对应滑块是不可调节的。
通过点击“”区域中的各种动作按钮
如果需要将当前帧的动作行为按机器人左右对称的方式,左右两边关节动作进行互换,可以点击“”区域中镜像按钮(>|<),可以看到机器人会实时做出相应的动作,同时动作帧序号后面的 “ = ” 按钮中的符号变为 “!”, 表示当动作帧的内容已被修改,但未保存。
修改动作帧中的其它参数(比如速度、延时……),这部分内容将在详细介绍。
编辑完动作帧列表中的动作,可以通过点击”“区域中的“播放”按钮查看动作帧列表中多个连续动作帧的运动效果。点击“播放”按钮后,机器人会简单复现一遍动作帧列表中从当前动作帧开始往后的所有动作(动作不做循环,而且所有动作帧只是1倍速运动)。如果当前动作帧是最后一个动作帧,那么点击“播放”按钮后,就会从动作帧列表的第一帧动作开始复现一遍动作帧列表中所有动作。在播放过程中,按钮中的文字会变为“停止”,点击“停止”后,可以使机器人在做完动作帧列表中的某个动作帧后暂停运动,同时按钮中的文字会恢复为“播放”。再次点击“播放”后,机器人会继续执行后续的动作帧。
点击中某个动作帧中的“删除”按钮(< )后,可以删除该帧动作。删除后,之前在该动作帧下方的所有动作帧依次上移(动作帧序号自动减1),紧接在所删动作帧上方的动作帧下面。
对动作帧列表中动作调整好后,点击“”区域中“导出”按钮,可以将动作帧列表中从当前动作帧开始往后的动作一起导出。如果当前动作帧是最后一帧动作时,导出的是动作帧列表中所有动作帧。
点击“导出”按钮后,会弹出一个*.md文件另存窗口, 您可以给创作好的动作行为命名并点击“保存”按钮将其保存为Markdown文本文件;即使您点击“取消”按钮,不保存动作技能文件,您也可以看到机器人会实时按照设计好的动作(按照真实的,)做出相应的技能动作。
通过打开,输入串口指令‘T’。
打开手机应用,利用“”功能,在代码文本框中输入串口指令‘T’。
从版本V1.1.3开始,导出技能时,桌面应用程序会自动将其备份到 /Users/{用户名}/.config/Petoi/SkillLibrary/目录中。 请注意:.config 是一个隐藏目录,但可以在命令行界面中或通过特定的视图设置进行访问。 这样,您可以轻松地在中编写程序时调用多个导出技能。
章节重点介绍代码和数据结构,以便您可以将任意数量的新技能集成到源代码中。 导出的文件(.txt或.md)内容中的技能数据数组可以复制粘贴到Instinct***.h文件中,作为技能数组使用。
。 这样即使您创造了多个技能,它们都永久性的保存到你的手机App中。
点击”“区域中“导入”按钮后,会弹出一个带有文本编辑功能的对话框,如下图所示:
Github中的是OpenCat 机器人的新技能的集合,可以供您参考,使用(下载后,使用导入功能可以将单个技能保存到机器人的内存中,再通过使用或查看具体效果)。
点击”“区域中“重置”按钮后,会清除掉动作帧列表中所有的动作帧,并自动添加一个预设姿态是zero的动作帧,并将其激活为当前动作帧(动作帧列表回到程序启动后的初始状态)。
如果您通过按下鼠标左键并拖动“”区域中的滑块来调节修改动作帧列表中某一帧动作的某些关节角度值后,在动作帧列表中,点击“!”按钮保存此帧动作时,为保持动作的稳定、连贯性,程序会自动同步修改并保存此帧动作之后的所有帧中相同关节的角度值(前提是:此帧动作之后的动作帧中相同关节的角度值之前未曾被修改过)。
如果您需要动作帧列表中某些连续动作帧多次循环运行,可以先在上方的文本框( 在标签 “设置” 的左侧)中输入循环次数,然后再用鼠标左键依次选中想要实现循环运动的连续动作帧首尾两帧的序号(选中后序号按钮呈现凹陷状态),如下图所示:
在中,您可以修改每一帧动作的运行速度(),有以下9种选项供您选择(按数值大小依次调快运行速度):
点击”“区域中的“播放”按钮,看不到动作的真实运行速度效果;只有点击“导出”按钮后,才可以看到真实运行速度效果。
在“”区域中“陀螺仪”按钮处于开启状态(字体颜色为绿色)时,调节动作帧中的关节角度值或者动作帧的运行速度后,播放查看调试效果,或者导出动作行为, 机器人会实时试图保持自身身体平衡,因此可能会看到机器人在做预设动作(尤其是运行比较剧烈的动作)时,身体会来回晃动,甚至会发生身体倾翻,这时机器人自动会做复原的动作,可能会打乱您原来的操作步骤。因此建议您在设计动作时点击“陀螺仪”按钮,关闭陀螺仪(字体颜色为红色), 机器人就不会实时做平衡反馈动作了。当需要开启陀螺仪时,再次点击“陀螺仪”按钮即可。
中,每个动作帧中的延时选项()表示:做完此帧动作后,机器人延时多长时间再做下一帧动作。
中的触发轴()是用来设置机器人触发下一帧动作时的身体旋转方向,有以下5个设置选项:
触发角()参考极坐标系角度定义,如上图所示,身体水平时,极坐标轴角度为 0 度,如果极坐标轴逆时针旋转,角度为正值且逐渐增大。
当中的动作帧数量很多时,可以使用“标记”文本框()来给每个动作帧命名,方便更直观的理解动作帧所表示的具体动作。
您可以在动作帧列表中任意位置插入动作帧列表中的某帧动作。具体方法是:首先将要插入的动作帧激活为当前动作帧(通过点击“=”按钮 ),然后点击插入位置的上一个动作帧中的“添加”按钮(v )即可。
在导出动作帧前,选择“”区域中的“行为”、“步态”选项为 “行为”,点击“导出”按钮后,程序会自动在这些动作帧之间插值,使机器人动作看上去会更加平缓一些,并且所有动作帧只执行一轮;选择“步态”选项 ,点击“导出”按钮后,机器人会不停地循环执行所有帧,并且每帧动作都会以最快速度运行,动作帧之间不做插值,不会加平滑处理。因此建议初学者尽量使用“行为”模式开发新动作技能。
在设计动作行为的过程中,有时可能你想大致比划一下关节舵机接下来会运动到什么位置比较合适。一般情况下,“”区域中的“舵机”开关按钮是处于开启状态(字体颜色为绿色)的,这时所有关节舵机在执行完一个动作帧之后,是处于锁死状态的,不能用手直接掰动(否则会损坏舵机),遇到这种情况,您可以点击“舵机”开关按钮将其改为关闭状态(字体颜色为红色),这时所有关节舵机就会卸力,您就可以任意掰动机器人所有运动关节了。再次“舵机”开关按钮,就会将将其改为开启状态,所有关节舵机就会再次锁死。
“”区域中的“随机行为”按钮, 是用来开启或关闭机器人在开机状态下是否做随机动作的状态开关。只有在上传了随机模式的程序固件后,此按钮才能有效控制机器人是否做随机动作。这个功能在设计动作时用处不大,建议在上传了随机模式的程序固件的情况下,点击此按钮,关闭“随机行为”(字体颜色为红色)。
桌面应用程序支持多个机器人通过各自串口(甚至可以通过蓝牙通讯模块)进行连接,实现多机同时操控。这个操作的要点就是:一定要在机器人正常上电后,先把USB上载器接到机器人主板上,再使用数据线将之连接到电脑的USB接口(使用时,先把蓝牙模块插到机器人主板上,在电脑端开启蓝牙功能,在蓝牙设置界面完成与蓝牙模块配对,并选择连接此蓝牙模块),因为这时程序会自动检测到有新的串口连接,当有多个串口连接成功后,在“”区域中串口选项按钮变为显示“全部”(),点击此按钮可以打开下拉列表查看此时连接成功的所有串口 。这样在操控机器人时,所有机器人都会实时同步动作。当然您也可以在串口下拉列表中选择其中任意一个串口进行连接,这时就可以单独只控制这个串口对应的机器人做动作。
如果拔掉所有USB串口(断开所有蓝牙模块),串口选项按钮中显示“无”,左侧按钮显示“检测中”(),说明程序仍在自动检测有无串口连接,当使用数据线将之前的USB上载器重新连接到电脑的USB接口时,串口选项按钮左侧按钮显示“已连接”(),串口选项按钮中显示对应串口名称(单独只连接一个机器人时,显示串口名称,连接多个时,显示“全部”)。
软件版本
1.0 2.0(默认)
1.0 版本将过时
主板型号
NyBoard_V1_0 NyBoard_V1_1 NyBoard_V1_2(默认) BiBoard_V0_1 BiBoard_V0_2
Bittle X 使用 BiBoard_V0_1 或者 BiBoard_V0_2
产品
Bittle(默认) Nybble Bittle X
模式
标准(默认) 随机 语音 Mind+ 摄像头( Bittle) 超声波(Nybble) 随机_ 超声波(Nybble)
某些模式仅适用于特定产品,当您在产品和主板型号之间切换时,它应该会自动更新允许的模式列表。
串口
自动检测或手动选择
您可以通过重新拔插电脑端的USB接口找到
本章节内容面向具有编程经验的高级用户。
BiBoard 各功能模块具体参数介绍请参考BiBoard V0 快速上手指南第2章。
详情请参考 BiBoard V0 快速上手指南第3.2.1 章节。
Windows 路径:
C:\Users\{username}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\tools\sdk\esp32\qio_qspi\include\sdkconfig.h
Mac 路径:
/Users/{username}/Library/Arduino15/packages/esp32/hardware/esp32/2.0.*/tools/sdk/esp32/qio_qspi/include/sdkconfig.h
在最后追加一行代码:
阅读 Arduino IDE增加硬件分区配置选项,最终效果见下图:
我们一直将代码更新为一个开源项目。您可以加星标并关注我们的GitHub代码仓库以获取最新功能和错误修复。您还可以与全球OpenCatEsp32用户共享代码。
欢迎提交代码!!!
从GitHub下载最新的OpenCatEsp32代码库:https://github.com/PetoiCamp/OpenCatEsp32。最好使用GitHub的版本控制功能。否则,请确保您每次都下载全部的OpenCatEsp32文件夹。所有代码必须是相同版本时才能一起使用。
如果下载代码的Zip文件,则解压缩后将获得一个OpenCatEsp32-main文件夹。您需要在打开OpenCatEsp32.ino之前将其重命名为OpenCatEsp32(Arduino规定代码必须放在同名文件夹之下)。
无论您将文件夹保存在何处,文件结构应如下图所示:
ModuleTests文件夹中有几个名为testX(X代表功能模块,比如蜂鸣器Buzzer,陀螺仪MPU).ino的代码。您可以上传它们以分别测试对应模块。打开任何带有前缀“ test”的testX.ino的工程。 (建议您使用testBuzzer.ino作为第一个测试项目)。
根据设备类型,修改BiBoard.ino中的设备类型宏定义。
根据主板的型号,修改BiBoard.ino中的主板型号宏定义。
设置好后就可以点击上传按钮上传BiBoard.ino,代码中的更改部分会自动保存。
新设置的BiBoard上电时,需要连接串口至电脑,在串口监视器窗口中初始化关节和陀螺仪加速传感器(IMU)。
确保将串口监视器设置为 115200 波特率 并且 没有结束符。
你将看到以下提示问题:
输入“Y”,把所有舵机的修正值归零。
输入“Y”,校准 IMU(即陀螺仪/加速度计传感器)。
将BiBoard平放在水平桌面上,校准时不要触摸它。
有时程序可能会在连接阶段中止。 您可以关闭串口监视器并重新打开它,或按 BiBoard 上的复位按键,重新启动程序。
程序在播放6次音效后开始校准。
串口打印信息详情如下:
IMU校准完成后,以后每次机器人上电,将进入常规上电开机程序。
Bittle主程序通过比对EEPROM 中的BIRTHMARK来判断有没有被初始化过,下次开机时不会再次进入初始化流程。
如果你需要重新校准舵机参数,或者重新校准IMU(MPU6050)您可以在串口监视器中输入“R”重新开始。
长按电池上的电源按钮,机器人身体侧立开机(如下图所示),自动进入关节校准状态。 下图为机器人进入关节校准状态后安装了的腿部组件的图片。
当Bittle的主控板在上电时是正放的(背部朝上),Bittle将从“休息”姿势(即四肢收缩并且所有舵机处于释放状态)启动。
默认程序是标准模式。如果您有一些扩展模块,可以取消这些模块的宏注释。这样会禁用陀螺仪的代码节省出一些编程空间,并激活这些扩展模块的演示代码。
官方模块的代码是在 src/里的单独头文件里定义的。您可以在OpenCat/src/io.h -> readSignal()找到它们对应的函数。 OTHER_MODULES(其他模块)的行为在OpenCat/OpenCat.ino -> otherModule()定义。您可以参考示例代码写出自己的功能。
BiBoard 内置蓝牙,您可以将其与新的 Android 应用程序连接,进行设置和遥控:
您可以在 ChangeLog.md (BiBoard\ChangeLog.md) 中查阅更新历史和新增的功能。
Petoi 群控方案
ESP-NOW 是由乐鑫开发的另一款无线通信协议,可以使多个设备在没有或不使用 Wi-Fi 的情况下进行通信。这种协议类似常见于无线鼠标中的低功耗 2.4GHz 无线连接——设备在进行通信之前要进行配对。配对之后,设备之间的连接是持续的、点对点的,并且不需要握手协议。它是一种短数据传输、无连接的快速通信技术,可以让低功耗控制器直接控制所有智能设备而无需连接路由器,适用于智能灯、遥控控制、传感器数据回传等场景。
使用了 ESP-NOW 通信之后,如果某一个设备突然断电之后,只要它一旦重启,就是自动连接到对应的节点中重新进行通信。
ESP-NOW 的通信模式支持如下:
一对一通信
一对多通信
多对一通信
多对多通信
ESP-NOW 支持如下特性:
单播包加密或单播包不加密通信;
加密配对设备和非加密配对设备混合使用;
可携带最长为 250 字节的有效 payload 数据;
支持设置发送回调函数以通知应用层帧发送失败或成功。
同时,ESP-NOW 也存在一些限制:
暂时不支持广播包;
加密配对设备有以下限制:
Station 模式下最多支持10 个加密配对设备;
SoftAP 或 SoftAP + Station 混合模式下最多支持 6 个加密配对设备;
非加密配对设备支持若干,与加密设备总数和不超过 20 个;
有效 payload 限制为 250 字节。
Petoi群控完全可以采用ESP8266模块的ESP-NOW通信功能。
本案例准备2只Bittle(配备WiFi模块),一台连接有ESP模块的计算机。
图中模块的程序烧录和MAC地址的获取见下文。
打开Thonny并使用USB上载器连接ESP8266模块,在shelll界面中输入:
如果出现错误提示如“找不到espnow”模块
,表示固件烧录有问题;若没有任何提示,表示固件烧录正常。
群控代码分为3部分:
查询模块的MAC地址
发射端程序
接收端程序
MAC地址是一个用来确认网络设备位置的位址,由OSI网络模型第二层(数据链路层)负责。 MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡的非易失存储器(如EEPROM)中。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数。 其中前3个字节代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配, 而后3个字节代表该制造商所制造的某个网络产品(如网卡)的系列号。 只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性。
ESPNOW最简单的使用方式是通过MAC地址发送。我们使用一个小的程序来查询模块的MAC地址。
在Thonny中运行后,在终端打印出MAC地址。此时可以用一个不干胶贴写上模块的MAC地址并贴在模块上。
发射端程序由以下几个部分组成:
启用模块的WiFi功能
配置ESP-NOW协议并启用
添加需要通信的节点(peer)
发送消息
具体程序代码如下:
接收端程序主要由以下几个部分组成
启用模块的WiFi功能
配置ESP-NOW协议并启用
添加需要通信的节点(peer)
接收消息并解码,通过串口给NyBoard发送指令
具体程序代码如下:
此代码封装于一个名为espnow_rx()
的函数中是为了方便上电后自动启动程序。
实现上电自动启动的方法有以下两种:
将代码文件改名为main.py
;
修改boot.py
文件;
对于新手而言,我们更推荐第一种方法。
将串口命令转换写在接收端会使程序过于复杂且不易维护。我们可以新建一个函数在其中进行指令转换并输出命令。
OpenCat 软件可在Petoi机器人上运行,主板是由基于 ATmega328P 的 NyBoard。 更详细的硬件信息请参考 NyBoard V1_0 或 NyBoard V1_1 。
NyBoard 主板型号(版本信息),可参考图示位置:
I2C 开关用于改变 I2C 设备(陀螺仪/加速度计、伺服驱动器、外部 EEPROM)的主控。 默认“Arduino”时,NyBoard 使用板载 ATmega328P 作为主控芯片; 拨到“RPi”端时,NyBoard 使用通过I2C 端口(SDA、SCL)连接的外部芯片作为主控芯片。
注意:
有时,如果您无法启动Bittle / Nybble,则可能是您不小心将开关拨到了“RPi”端。
在上传固件前,请确保不要在主板的I2C接口连接任何I2C设备,否则会导致固件上载失败。I2C接口位置如下图示(红框内):
您将需要配置Arduino集成开发环境,且最好是最新的版本,旧版本往往会编译出可能超出内存限制十六进制文件。
使用 NyBoard V1_*主板,您只需选择 Arduino Uno。
只有当引导程序崩溃时才需要进行下列操作!
每块NyBoard在出厂时都经过了功能性测试,这意味着它们已经预先烧录了引导程序。但是,在极个别情况下,引导程度可能会崩溃并导致无法上传Arduino代码。
当然,不能上传代码往往是由其他原因造成的,而不是因为引导程序崩溃:
有时USB驱动可能会检测到一个USB设备的电流过大而主动禁用该设备。这时需要更换USB端口甚至重启电脑来再次激活USB端口;
需要安装FTDI USB2.0 UART上传器的驱动;
在Arduino IDE中没有选对串口;
接触不良;
运气不好 ☯️ 过两天可能又好了。
如果您确实需要重新烧录引导程序:
如果你手上的是NyBoard V1_*,在Arduino IDE的Tool下选用Arduino Uno。
选择您的烧录工具。下面的截图突出显示了两种常用的编程器,高亮的 USBtinyISP是一种小巧便宜的专门的编程器,当前选择的Arduino as ISP是用另一块Arduino板作为编程器;
把编程器接到NyBoard的2x6的SPI端口,注意接插方向和良好接触。您可以用手指轻轻按压插针确保良好的接触,但无需为这一次性操作把插针焊到主板上。
点击烧录引导程序进行烧录。如果这是您第一次尝试烧录,请耐心多等一会儿,直到看见进度条达到100%并不再有新进度条或新信息跳出为止。
此步骤不需要将NyBoard安装在机器人身上。
具体步骤可参考USB上载模块中连接NyBoard部分。
具体步骤可参考双模蓝牙模块中连接NyBoard部分。
在 Mac 上,蓝牙可能会在多次上传后断开连接。 在这种情况下,请删除连接再重新连接。
在矽递及其代理渠道销售的版本中不包含蓝牙模块,请向support@petoi.com咨询购买方式。
我们一直将代码更新为一个开源项目。您可以加星标并关注我们的GitHub代码仓库以获取最新功能和错误修复。您还可以与全球OpenCat用户共享代码。
欢迎提交代码!!!
从GitHub下载最新的OpenCat代码库:https://github.com/PetoiCamp/OpenCat。最好使用GitHub的版本控制功能。否则,请确保您每次都下载全部的OpenCat文件夹。所有代码必须是相同版本时才能一起使用。
如果下载代码的Zip文件,则解压缩后将获得一个OpenCat-main文件夹。把它重命名为 OpenCat。
Arduino规定代码必须放在同名文件夹之下,您需要在打开OpenCat.ino之前将文件夹OpenCat-main重命名为OpenCat(即删除-main 后缀),否则,Arduino 会在打开 OpenCat.ino 时创建一个新的 OpenCat 文件夹,并将 OpenCat.ino 移动进去,就会打破相关文件的路径结构。
无论您将文件夹保存在何处,文件结构都应如下图所示:
ModuleTests文件夹中有几个名为testX(X代表功能模块,比如蜂鸣器陀螺仪).ino的代码。您可以上传它们以分别测试对应模块。打开任何带有前缀“ test”的testX.ino的工程。 (我建议您使用testBuzzer.ino作为第一个测试项目)。
打开串行监视器并设置波特率。使用NyBoard V1_ *,将开发板选为Arduino Uno,然后在代码和串口监视器中将波特率设置为115200。
编译代码,应该没有错误提示。如果有请根据提示查找问题,一般问题为缺少某些库,根据需要安装即可。随后上传到您的开发板上,您应该看到Tx和Rx LED快速闪烁。一旦它们停止闪烁,消息应出现在串口监视器上。
代码中配置主板,请按照以下步骤操作:
打开文件 OpenCat.ino,选择您的机器人 产品类型 和 主板版本。 例如:
符号 // 停用代码行并将它们转换为注释。 确保您只使用了其中一行并行选项。
注释此行代码#define MAIN_SKETCH,保存、编译、上传程序固件后,机器人将进入主板配置模式。 上传完成后,请按照串口提示信息继续操作。
如果您激活此行代码 #define AUTO_INIT,程序将自动设置而不进行串口提示。 它不会重置关节校准数据,但会校准 IMU。 对于我们的生产线来说,这只是一个方便的选择。
如果在 Arduino -> Tools -> Port 下没有找到 USB 端口,请安装驱动程序。
具体方法可参考USB上载模块中连接NyBoard部分。
点击 上传 按钮即可上传主板配置程序。
您可以在菜单栏 工具 下方或者在主界面的右上角找到按钮。
在输入命令之前,请确保串口监视器设置为 “没有结束符”(No line ending),否则不可见的' \n'或' \r'字符将使解析函数失效。波特率设置为 "115200 波特率" (115200 baud)。
串口提示内容如下:
如果要将所有关节的校准数据重置为 0,请输入“Y”并按回车键 (Enter)。 程序将进行重置,然后更新静态内存中的常量和本能技能。
您必须输入‘Y’或‘n’来越过这一步,否则后续的参数(比如技能数据)将不能正常地更新到主板上。
串口提示: 是否校准IMU (Inertial Measurement Unit)?
如果您从未校准过 IMU 或想要重新校准,请输入“Y”并按回车键 (Enter)。 将机器人平放在桌子上,不要触摸它。 机器人会长鸣六声给你足够的时间。 然后它将读取数百个传感器数据并保存偏移量。 校准完成时会发出蜂鸣声。
当串口监视器打印“Ready!”时,您可以关闭串口监视器进行下一步操作。
在校准 IMU后有一步可选的操作来校准舵机驱动:
您可以通过校准舵机驱动芯片(PCA9685 chip)来让角度控制更加精准。用一根跳线连接 PWM 引脚3(舵机控制脚的信号脚之一 )和 Grove 引脚 A3,并把线按稳。
您不需要专门的跳线来完成这一步。任何能连通引脚的细金属线都可以,比如拉直的回形针。
程序会测量信号脉宽,在连续三次测量到相同读数后自动校准芯片。校准修正值会被存入控制板并在下次启动时生效。然后您可以继续进行下一步。
如果机器人的某个舵机停止转动,但将电池断电重启后又能转动,很可能就是因为舵机驱动信号不准,这一步就不可跳过。
此行代码 #define MAIN_SKETCH 取消注释,并保存修改以使其处于激活状态。 编译、上传程序固件后,机器人将运行主要功能的正常程序。
请在上传完主要功能程序后,再进行校准舵机。
默认程序是标准模式。如果您有一些扩展模块,可以将这些模块的宏定义语句取消注释。这样会禁用陀螺仪的代码节省出一些编程空间,并激活这些扩展模块的演示代码。
官方模块的代码是在 src/里的单独头文件里定义的。您可以在OpenCat/src/io.h -> readSignal()找到它们对应的函数。 OTHER_MODULES(其他模块)的行为在OpenCat/OpenCat.ino -> otherModule()定义。您可以参考示例代码写出自己的功能。
在某些情形下,您也许需要更改机器人的“关节-引脚”映射,它可以在OpenCat/src/OpenCat.h中修改。注意要按照 OpenCat.ino 开头的主板版本来修改相应的代码段落。修改后记得保存,并重复从第2步开始的上传步骤。
连接 USB 适配器到主板,并选择正确的串行端口,请具体步骤可参考USB上载模块中连接NyBoard部分。
您可以在“工具”菜单栏中选择“串口监视器”,或者单击右上角的按钮打开串口监视器窗口,如下图所示:
当使用NyBoard V1_ *主板时,请在串口监视器中设置为“没有结束符”,并将波特率设置为115200。如下图所示:
具体步骤可参考双模蓝牙模块中连接NyBoard部分。
然后您可以在 Arduino IDE 的 “工具” -> “端口” 下选择它,使用方法与上述USB适配器相同。
在 Mac 电脑上,蓝牙模块可能会在多次上传程序后断开连接。 在这种情况下,请先在系统蓝牙设置界面删除设备,再重新添加蓝牙设备,配对并连接以恢复功能。
在矽递及其代理渠道销售的版本中不包含蓝牙模块,请向support@petoi.com咨询购买方式。
这样您就可以使用与 NyBoard 通信并更改其上的每个字节的终极接口 —— 串口监视器(基于串口协议向机器人发送指令)了。
我们预先定义了一套串口通信协议,具体指令和参数表如下:
所有的命令都是以单个ASCII字符开头,并区分大小写。通常指令为小写。
有的指令,如“c”和“m”是复合命令:
比如:连续命令如:“ m8 40”,“ m8 -35”,“ m 0 50”可以写为“ m8 40 8 -35 0 50”。您可以在代码中更改最大长度限制,但是串口缓冲区可能会有系统的限制。
您可以在串口监视器中尝试输入以下命令,查看实际效果:
“ksit”
“m0 30”
“m0 -30”
“kbalance”
“kwkF”
“ktrL”
“d”
引号 “ ” 只是表示它们是字符串。 请不要在串口监视器中输入引号。
src/OpenCat.h 中包含完整的真正有效的指令类型:
更多可用技能命令如下表所示:
实际生效的技能定义在InstinctBittle.h 或 InstinctNybble.h个表:
可以在所有技能的名称前加“k”并删除后缀来调用。比如,表中有一个"sitI" 的技能。可以发送"ksit" 来调用坐下(sit)。如果一个技能名有 "F" 或 "L" 的后缀,就是一个步态,表示向前或向左走。向右走是向左走的镜像,可以用"kwkR"调用。类似地,还有跑步("tr")、爬行("cr")、踏步("vt")等步态。
如果您熟悉Petoi编码积木块提供的API接口,可以直接用Python语言来编写程序代码,您可以在Mind+中切换到Code模式,如下图所示:
代码模式其实是一个Python3语言的开发环境。 您可以在其中使用Python3语言编写任意代码,并且可以调用Mind+导入的PetoiRobot库中的所有API接口。
您可以在以下目录中找到PetoiRobot库,其中包含所有与Petoi机器人相关的API接口定义:
Windows C:\Users\{username}\AppData\Local\DFScratch\extensions\petoi-robot-thirdex\python\libraries\PetoiRobot.py
MacOS /Users/{username}/Library/DFScratch/extensions/petoi-robot-thirdex/python/libraries/PetoiRobot.py
以下是PetoiRobot库中支持的常用API接口函数。 您可以参考模块模式下自动生成的Python代码来了解其调用格式。
示例代码:
您也可以在模块模式下的自动生成区域中复制代码,在代码模式下将其粘贴到代码文件中。 然后您可以编辑并运行代码程序。
校准舵机对于机器人的正常运行至关重要。
预组装版本的机器人应该已经正确安装了腿,但没有进行微调校准。
校准舵机前请确保您已经上传了OpenCat主程序固件 。
在校准之前,通电前我们不知道舵机将指向哪里。 所以如果躯干连接上腿部部件,腿会旋转到随机角度,并可能与机器人的身体或其他腿碰撞并被堵转。 如果一个舵机堵转了很长时间,它可能会损坏。
Nybble 和 Bittle 的校准原理相同。
进入校准模式需要做好以下准备:
1. 全部舵机线路与主板连接好
2. 电池电量充足
3. 连接好USB适配器并能正常通信
如果您使用未组装的套件构建机器人,请在校准之前不要安装头,腿组件。 您还需要安装电池并长按电池上的按钮为机器人供电。
校准分为三个步骤:
进入校准模式,使舵机自由转动到中位;
安装各个肢体到校准位;
通过串口监视器微调关节修正量。
检查所有舵机接头插入的位置和方向,您必须把舵机和外接电池都插上NyBoard后才可以正确校准。 在我们安装腿部组件之前,舵机的输出轴应该处于零状态(转到中位然后停下)。
在串口监视器输入c
来进入校准模式,舵机应该迅速地依次转到中位然后停下,同时齿轮箱会发出一些声响。由于舵机的起始位置各不相同,有些舵机的转角会大一些。在串口监视器会打印出一列表:
第一行是关节序号,第二行是它们的修正量,第三行是刚刚输入的校准指令。
初始的关节修正量是 “-1” 或 “0”,需要测定后修改。
模型舵机用电位器作为位置环反馈的传感器。在保持某目标角度时,可能会有轻微抖动。舵机厂可以通过调整PID参数来抑制这种抖动,但随着电位器触点的磨损,这种“帕金森”症状会加重,但主要影响静态姿势的保持,在动态中并不明显。高端舵机可能会用贵上10倍的成本来解决这个问题,对我们而言,更换老化的舵机是更加经济的方案。
输入‘c’指令后,所有舵机都转到了中位,就可以安装之前组装好的舵机关联部件了。它们基本上按照相互垂直的角度互相连接,校准姿势如下图所示:
如果您使用未组装的套件搭建机器人,请按照上方图片安装舵机相关部件,并尽量保证它们相互垂直(大腿垂直于躯干, 小腿垂直于大腿)。 详细请参考用户手册中的相关章节:
Nybble
Bittle
把舵机关联部件直插到舵机输出轴上,这过程中不要转动舵机输出轴。
关节角使用本体极坐标系,以逆时针转动为正。从机身左侧看,关节逆时针转动定义为正方向。
对于Nybble头的俯仰关节例外,因为我们习惯说“抬头”,直觉上是正方向,但从左侧看是顺时针转动。
但从机身右侧看,转动方向的正负性刚好相反。
如果我们仔细观察舵机输出轴,可以发现它上面有一定数量的齿,这些齿可以防止输出轴在转动时相对摇臂滑动。在我们的舵机上,输出轴的圆周被分隔成25个齿,每个齿间隔14.4度(偏移 -7.2~7.2 度)。这意味着我们安装关节时不可能绝对垂直,只能尽可能地接近垂直。
校准的指令格式(参考串口协议)是cIndex Offset
,Index是舵机编号, Offset是校准修正量。注意Index和Offset之间有空格。 机器人舵机编号如下图所示:
比如:
c8 6
表示给8号舵机+6度的修正量。对于每个舵机都需要进行这样的校准以使各部位转动到校准位。
c0 -4 表示给0号舵机-4度的修正量。
修正量的分辨率是1度,不要使小数。
如果您发现需要的修正量的绝对值大于9度,那说明您在安装肢体时不够靠近校准位,这会导致该关节的有效行程不对称,在某一侧的可到达角度范围变小。把这个肢体取下来,转一个齿的角度重新安装,就可以得到一个方向相反,但是绝对值更小的修正量。
比如,如果您必须使用 -9 作为校准值,请将肢体取下,旋转一颗牙齿,然后再装回去。 新的校准值应该在 5 左右,即它们的绝对值总和为 14。在重新安装时,避免旋转舵机的输出轴。
找到可以使肢体达到零状态的最佳偏移量。 这是一个反复试验的过程。
校准后,记得要输入s
来保存修正量,否则程序重启后它们就失效了。您甚至可以每校准一个舵机就保存一次。
实际测量时,我们的观测会由于透视关系而产生偏差,这也是为什么我们在读直尺的刻度时要尽量在尺的上方平视。
在校准机器人的关节时,保持平视也特别重要,所以我提供了“L”形的关节校准器辅助参考。按先调4个肩关节(8~11)后调4个膝关节(12~15)的顺序依次校准,目标是使校准器的三个尖角同时对准舵机螺丝或脚尖孔洞的圆心。在校准每个关节时,要从圆心-尖角的延长线上平视观察,校准器的三角窗口边应该和小腿上的三角窗口边平行。
校准后,可在串口监视器输入d
或kbalance
验证效果。机器人会在对应的休息和站立姿势间切换,它的四肢应该是前后、左右对称的。
您可能需要进行几轮校准才能达到最佳状态。
试着了解机器从如何在步行过程中保持平衡。如果要向机器人身体上添加新部件,请尽最大努力在脊柱周围对称分布其重量。也可以前后滑动电池座,以找到最佳的平衡位置。由于电池的前半部分较重,必要时您也可以反向插入电池,以使重心更多地向后移动。
如果重心发生变化,您可能需要重新校准。
请不要强行为机器人增加过重的物品,可能导致舵机扫齿或卡住。
在完成烧录MicroPython固件后,我们就可以使用它了。
我们直接在解释器中输入python语句即可执行。
NyBoard WiFi模块使用了ESP8266的IO2与一个红色LED连接,用来指示连接状态。这个LED是可编程的。 写一个简单的python blink
程序:
按下工具栏上绿色的开始运行
按钮,程序会通过串口发送到WiFi模块上, 由ESP8266内置的MicroPython解释器解释后运行。 因为案例程序是死循环,需要停止时,按下红色的停止
键即可完成程序中断和复位。
我们点击View -> File
打开文件工具栏, Thonny左侧显示了文件。上部为本机的目录,下部为MicroPython设备中存储的文件。 默认情况下只有一个boot.py
文件,这个文件请不要删除,是MicroPython设备的启动文件。
我们将刚刚的点灯程序保存为blink.py
保存在本机后,右键点击文件,选择Upload to /
:
在弹出窗口选择MicroPython device
:
在设备上就有了一个blink.py
的文件。这样文件就保存在设备上。
WiFi模块通过串口向NyBoard发送指令进行控制。我们只需要写一个简单的串口发送程序,向NyBoard发送一系列串口指令, 就可以让机器狗执行序列动作。
当我们执行actSeq()
函数时,就可以通过串口输出一系列指令。使用串口监视器我们可以进行调试。 使用串口监视器监控输出如下(为了方便阅读我使用了串口调试器的自动断帧,实际上是没有自动换行的)
当我们调试完序列动作后,将WiFi模块拔下,插上NyBoard后,机器狗没有任何反应,因为actSeq()
函数并没有运行。 我们希望上电自动运行程序,有以下2种方法:
请将文件名更改成“main.py”并存到设备(这个是最简单的)
修改boot.py
启动文件
如何使用python脚本与机器人(Nybble😼 / Bittle🐶)开心玩耍?
安装python 3.6以上版本 (比如Anaconda3-5.2.0-Windows-x86_64.exe)
安装pyserial库(version: 3.5)
一般情况下,使用连接机器人时,只有一个串口端口号:
使用蓝牙模块时,有两个串口端口号:
打开 Terminal ( 比如Anaconda Prompt),进入脚本文件所在路径(***\serialMaster),可以使用以下命令运行脚本,脚本在最开始运行时会自动识别口串口端口号,并完成连接。
方式一:运行 ardSerial.py 脚本程序
当然也您可以不带任何参数运行此脚本
当系统识别有多个串口端口号,脚本在最开始运行时会自动识别出所有与机器人已正常建立连接所有串口端口号(可以同时给多个机器人发送串口命令),并打印出以下提示信息:
程序正式开始运行时,打印出以下提示信息:
您可以键入'quit'或'q'命令退出程序。
接下来,您就可以在 Terminal 中输入串口命令来控制机器人做各种有意思的动作了😃 比如:
方式二:运行自定义脚本程序,比如 example.py
example.py中的列表 testSchedule 用来测试各种串口命令,运行以下脚本代码,可以看到 list 中每条串口命令的执行效果:
您也可以参考列表 stepUpSchedule 的内容(在 ***\serialMaster\demos\stepup.py 中),按照自己的实际需要编写行为列表,实现自己的创意。🤩
注意:运行 ***\serialMaster\demos\ 路径下的脚本程序时,一定要先使用 cd demos 命令进入到脚本程序所在路径(***\serialMaster\demos),再使用 python3 命令运行脚本程序
(比如:python3 stepup.py)
列表 testSchedule 中的串口命令说明:
['kbalance', 2]
kbalance 控制Bittle正常站立指令
2 指令执行完成后的延时时间,单位是秒
['d', 2]
d 机器人变换到休息姿势并关闭舵机的命令
2 指令执行完成后的延时时间,单位是秒
['c', 2]
c 进入校准模式的命令
2 表示执行完命令后延时时间,单位是秒。 运动命令完成后,会延时 2 秒后执行下一条命令。
['c', [0, -9], 2]
c 进入校准模式的命令
0 关节舵机序号
-9 旋转角度值(此数值表示相对于校准后采用的参考0值),单位是度
2 指令执行完成后的延时时间,单位是秒
本例含义:序号为0的关节舵机旋转-9度。 这些运动命令完成后,会延迟 2 秒后执行下一条命令。
使用此格式,可以进入校准模式,校准某个关节舵机的角度。
注意:如果要使该命令中的校正值生效,需要在执行该命令后输入“s”命令。
['m', [0, -20], 1.5]
m 控制关节舵机转动指令
0 关节舵机序号
-20 旋转角度值(此数值表示相对于校准后采用的参考0值),单位是度
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 关节舵机序号
50, 50, 50, 50, 0 旋转角度值(这个角度是绝对值,而不是相对值),单位是度
3 表示执行完命令后延时时间,单位秒
['l', [20, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 36, 36, 36, 36], 5]
I 控制所有关节舵机同时旋转的命令(目前该命令支持16个自由度,即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 控制蜂鸣器发声指令
10 音调
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 控制蜂鸣器发声指令
0、14、14、21…… 音乐的音调
1,8,8,8…… duration的长度,对应1/duration秒
3 发送指令后延时时间,单位秒
使用这种格式,可以一次发出多个音调的发音命令,播放一段简单的旋律。
本例含义:播放一段简单的旋律,音乐旋律播放后延时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'表示实时发送给机器人的技能数据
技能数组被发送到移动中的机器人并在机器人本地执行
您可以将技能数组内容以这种格式插入技能库或 InstinctX.h文件中
祝您玩得开心!😍
使用NyBoard WiFi 模块作为 MicroPython 控制器教程
NyBoard USB上载模块(CH340C)
NyBoard WiFi模块
将WiFi模块插入USB上载器的模块配置接口上,在windows设备管理器找到对应的COM口。
下载最新版本的Thonny,Thonny是一个开箱即用的Python编辑器,原生提供了MicroPython的支持。
将MicroPython固件烧录至WiFi模块有两种方法:
使用ESPtool下载工具,可以更加精确控制Flash的分区和使用
使用Thonny自带工具,比较方便
为了方便我们使用Thonny自带的烧录工具。 具体步骤如下:
打开Thonny软件,主界面如下图。Thonny默认配置使用安装目录下的Python解释器。
打开Tools -> Options(选项)
,进入选项页面。在第一个General
界面,我们可以选择需要的语言 (需要重新启动Thonny)。
打开第二个选项卡Interpreter(解释器)
,我们将默认的Python3解释器更换为MicroPython(ESP8266)
后, 选择对应的端口。
此时我们的WiFi模块还未烧录MicroPython固件,点击上图右下角的Install or update firmware
使用内置的烧录程序更新固件。
选择WiFi模块所在的端口(COMx),选择下载的MicroPython固件(bin文件)所在的位置。 勾选下载模式(flash mode)为:from image file(keep)
(速度会比较慢,但是只需要烧录一次且不容易出错), 勾选全片擦除(Erase flash before installing)
。按下安装(install)
键。
界面的左下角会显示进度,先擦除Flash,再写入固件。当出现完成(Done)
字样的时候,表示已经烧录完成了。
软件准备工作到此结束,关闭下载界面会出现如下显示。红字乱码是因为ESP8266启动时会打印一串非115200波特率的代码,这段代码无法被MicroPython Shell识别。 当出现Python标志性的>>>
符号时,表示固件烧录成功。
机器人的基本运动功能是不需要连接树莓派的,只有当您安装了树莓派时才需要阅读本章节。
如果想和树莓派的串口通信,就需要拔出NyBoard上的串口适配器。
您可以在 NyBoard 上焊接一个 2x5 插座以插入 Raspberry Pi。 Pi 3A+ 最适合 NyBoard 的尺寸。
注意:焊上了2x5的插座后,Bittle背上的盖子就盖不上了。
Ascii: 2个字节的char '6' and '5'
Binary: 一个Byte的char,‘A’
值 -113 如何处理? 它需要四个字节作为 Ascii 字符串,但在二进制编码中仍然只需要一个字节,尽管内容将不再可作为字符打印。
在树莓派的终端输入sudo raspi-config
在Interface选项下找到 Serial,禁用串口登陆,开放串口界面(Disabled the serial login shell and enable the serial interface):
使用 sudo 权限命令运行 raspi-config:sudo raspi-config
找到 Interface Options-> SerialPort
选项 Would you like a login shell to be accessible over serial? 选择
No
选项 Would you like the serial port hardware to be enabled? 选择
Yes
退出 raspi-config 并重新启动机器人(关闭、打开电池电源)以使更改生效。
只要把树莓派和NyBoard通过可选的2x5插座相连,它们的串口就自动连接起来了,逻辑电平是3.3V。如果您连接的是其他AI芯片,就要注意Rx和Tx的连接,以及它们的逻辑电平。外接板上的Rx要连接NyBoard的Tx,外接板上的Tx要连接NyBoard的Rx,还需要连接NyBoard的参考电平输入和外接板的逻辑电压。
注意:如果您在树莓派上安装了 Ubuntu 操作系统,请进行如下配置:
在 /boot/config.txt 添加 enable_uart=1
在 Ubuntu系统的文件 /boot/firmware/cmdline.txt中删除
console=serial0,115200(类似于在树莓派系统中文件/boot/cmdline.txt)
运行以下命令关闭串行控制台:
sudo systemctl stop serial-getty@ttyS0.service && sudo systemctl disable serial-getty@ttyS0.service
请确保您已安装python 串行库 pyserial,而不是来自 apt 的 python-serial。
创建 udev file (/etc/udev/rules.d/50-tty.rules
),并添加以下内容:
运行以下命令重载 udev 规则:
sudo udevadm control --reload-rules && sudo udevadm trigger
运行以下命令更改新的串口设备的用户组:
sudo chgrp -h tty /dev/serial0
sudo chgrp -h tty /dev/serial1
这些设备现在位于 tty 组下。 运行以下命令将用户添加到 tty 组和dialout 组:
sudo adduser $USER tty
sudo adduser $USER dialout
运行以下命令更新设备上组读取的权限:
sudo chmod g+r /dev/ttyS0
sudo chmod g+r /dev/ttyAMA0
重启树莓派(关闭、打开机器人电池电源)
或者创建一个自动执行这些操作的脚本。
如果您想在bash里运行ardSerial.py,您还需要为它添加可执行权限:
chmod +x ardSerial.py
同时您可能需要把文件第一行的Python安装路径#!/user/bin/python
改成您电脑上的设置。
在树莓派的终端输入./ardSerial.py <args>
就相当于之前在Arduino串口监视器里输入 <args> 。比如,./ardSerial.py kcr
表示“执行 skill crawl”。
Python脚本ardSerial.py 和Nybble.ino里对应的解析代码都比较简略,需要逐渐完善。
对于Nybble:
连接到 Pi 时可能会降低运动能力! 需要更强的电池。
某些快速的步态,比如小跑(trot,指令是ktr
),可能会导致系统重启。目前系统由两节14500电池串联供电,您可以升级供电方案,比如模型专用的锂聚合物动力电池。
在改装过程中需要综合考虑软硬件的协作。对于Nybble小巧的身躯而言,最好是把它作为一个编程平台来研究系统整合与决策树,而不是作为一台遥控赛车。
实现远程调试与上传程序
之前的教程通过离线编辑Python代码实现了NyBoard执行序列动作的功能。 但是这样很不方便,每当需要修改代码, 我们需要拔下WiFi模块进行修改,也不能在执行过程中灵活的暂停、修改参数。 究其原因,ESP8266只有一个串口,我们需要使用它与NyBoard进行通信。 好在MicroPython利用ESP提供的WiFi功能实现远程无线Python调试-WebREPL。
我们在官方文档的基础上,结合模块的特点,撰写了以下教程:
连接设备后,在shell界面输入import webrepl_setup
,根据指南输入
启动时启用webREPL: E
设置密码:你自己的密码(演示为:1234)
重复密码
重启8266模块:y
我们使用下面的demo程序,注意将SSID和密码换成您身边使用的网络信息。
启动程序后,会不停连接WiFi网络,一旦连接上,会自动启动设备的WebREPL服务。
记住这个IP地址(路由器DHCP自动分配的),配置WebREPL时有用。
我们通过WebREPL来调试Python,原先的串口用来和NyBoard通讯。 所以在选项
中,将原先的USB-COMx
接口修改成WebREPL
。
然后我们填入WebREPL的IP地址、端口及密码,点击OK
。
完成后会连接,当显示WebREPL Connected
表示连接成功了。
我们可以试着运行一些简单的程序,如blink
。
WebREPL节约了串口,并支持无线调试。缺点是速度较慢(因为存在网络延迟),软件复位等待时间比较久。
现在我们可以使用webREPL来调式程序了,但是我们打开串口监视器会发现,每当我们运行程序,串口会发出一系列的调试内容: 这些海量的字符串会导致我们的NyBoard来不及处理而宕机,如下图所示:
我们希望在调试程序的时候,串口只输出我们希望输出的指令,而不是这些Debug信息。 打开设备上的boot.py
文件,将uos.dupterm(None, 1)
这行代码取消注释并保存,解除串口和REPL debug的绑定。 再次重启模块,串口调试助手就不再打印debug信息了。
作为补充,我们可以通过print()
指令输出debug信息,这些信息会通过WiFi显示在Shell上。
至此,大家可以方便的使用WiFi模块通过webREPL调试Bittle进行基于MicroPython的动作序列编辑。
电脑安装Thonny,方便进行8266模块的MicroPython的调试。 使用ESP-NOW协议时,需要特殊的MicroPython固件(见)。因为普通版本的8266-MicroPython固件会提示找不到库。
如果烧录完ESP-NOW固件后,在shelll界面未出现Python标志性的>>>
符号,表示固件烧录失败。可以尝试使用Flash烧录工具 ,烧录配置如下图所示:
再次打开串口监视器,当串口监视器打印“Ready!”时,恭喜:机器人已准备好接受您的下一条指令!
参数:kbalance 是一条控制机器人运动的
更多串口命令说明,请参考章节。
MicroPython官方网站上提供了已经编译好的ESP8266固件,因为我们的为4MB, 请选择ESP8266 with 2MiB+ flash
名称的最新固件,下载bin文件即可。
红色的可以3D打印。
如所示,Arduino IDE的串口监视器支持的命令参数全部编码为AscII码字符串,主机(例如RasPi)支持额外的命令,大多数命令都编码为二进制字符串以进行有效编码。例如,当编码角度为65度时:
显然,二进制编码比Ascii字符串有效得多。但是,传输的消息将不会直接被人类读取。在OpenCat存储库中,有一个简单的Python脚本,它可以处理NyBoard和Pi之间的串行通信。
你还需要禁用Pi的防止Pi的GPIO 4不断地发送重启信号。
树莓派官方网站上有一个很好的。
如果是通用的Linux系统,将上载器连接到计算机后,您将在串行端口列表中看到“ ttyUSB#”。但是上传时,您仍然可能会遇到串行端口错误。您将需要授予串行端口权限。请转到此链接并按照说明进行操作
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
ROS 接口
ROS 安装包可以供开发人员轻松连接到 ROS 环境。 建议将 ROS 与 Raspberry Pi 一起使用。
目前建议使用docker安装ROS
在树莓派上安装 docker (详情参考文档)
准备工作环境
运行容器
源文件和并在容器内构建
运行例程 (更多参考示例)
Ros 在设计时考虑了分布式计算。 这是一个关于如何在不同机器上运行节点的简单示例。
在主机上(通常比 Raspberry Pi 更强大)
在树莓派上运行服务节点
从主机发送指令
使用 serial 库
使用 ROS 服务
操作BiBoard的GPIO
BiBoard没有单独的GPIO,但是复用的串口2(16,17脚)或没有使用的PWM舵机接口的PWM脚可以用作GPIO。BiBoard的GPIO使用也相对简单,配置输入输出模式后和UNO的用法完全相同。您可以使用任何Arduino UNO的IO控制控制程序,更改IO号即可。
BiBoard是一款Petoi制作的一款基于ESP32的机器人控制器,主要面向社区开发者和极客发烧友。相比基础的NyBoard,配备了高性能的处理器,更大的内存和存储空间,蓝牙和WiFi连接,还配置了音频电路以满足更多的开发需求。
BiBoard功能模块分区图如下所示:
电路的功能框图如下图所示:
主板的供电方式有2种:通过USB接口供电和电池插座供电。
当使用USB供电时,主板上的舵机和外置5V电源接口没有供电。主板芯片和其他外设工作正常。
当使用电池插座供电时,最大的建议电压为7.4V(最大为8.4V)。此时舵机将获得供电,同时5V开关电源(TPS565201)输出5V电压,可以为树莓派供电。线性稳压器得到5V电压后输出3.3V为主板上的传感器和ESP32主芯片供电。
注意:
Arduino IDE 2.0 版本目前无法增加 large_spiffs_16MB (4.5MB APP with OTA/6.93MB SPIFFS)配置选项。
Arduino IDE 1.8.* 中SPIFFS文件上传插件是用 Java 编写的。 而 Arduino IDE 2.0 是用不同的语言编写的(TypeScript + Golang),因此之前的上传插件不能在Arduino IDE 2.0 中使用。目前还没有支持Arduino IDE 2.0 SPIFFS文件上传插件。
因此建议您暂时安装使用 Arduino IDE 1.8.* 版本集成开发环境。
打开Arduino的“首选项”,添加ESP32开发板的地址:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
保存后退出。
打开“开发板管理器...”,搜索 "esp32" 并安装开发板支持库:
当前最新可用版本是2.0.12,安装2.0.13及以上版本可能导致主板无法正常启动。
当显示“INSTALLED”时,BiBoard的支持库就安装好了。
因为ESP32不带USB电路,我们使用了官方推荐的CP2102 USB转串口桥接芯片,最大下载波特率为921600bps。桥接芯片连接了ESP32的第一串口。
USB使用了最新的TypeC接口,在CC1和CC2脚位上加入了识别电阻。原理图如下图所示:
我们参考了ESP32官方推荐的下载电路以及NodeMCU的下载电路,均不能完美工作。根据ESP32的下载时序我们设计了电路,增加了第三个三极管并修改了EN脚对地电容的阻值,问题解决。
三极管电路接受标准的Modem信号RTS和DTR后产生组合时序控制ESP32进入下载状态并复位。具体原理图如下,若有更好的改进意见也请反馈给我们!
陀螺仪使用的是经典的MPU6050,I2C地址为0x68,数字运动处理器(DMP)的中断脚连接的是IO26。
借助Jrowberg的I2Cdev和MPU6050DMP库,不熟悉姿态融合算法的新手也可以轻松获得动作状态。ESP32如果直接使用MPU6050库需要做一些修改,主要是AVR的8位数据类型以及PGMSpace的问题。增加ESP32的宏定义即可解决,我们也提供修改好的库,直接替换掉原来的文件即可(记得备份)。替换过之后AVR也可以使用。
BiBoard上有64Kbit的EEPROM,这样可以直接使用UNO的EEPROM操作程序存储陀螺仪校准的数值,操作也比较方便。
请注意ESP32中有一个名为EEPROM的示例程序,这个程序并不是操作EEPROM的,而是使用ESP32模块的Flash模拟EEPROM操作。
为了让Bittle的声音更加好听,Biboard使用了DAC输出,并连接了一个单声道D类功放(PAM8302A)。您可以使用以下3种方法驱动音频模块,记得连接扬声器并调节合适的音量大小。
使用系统自带的Tone()函数,即标准的无源蜂鸣器的方法。
使用ESP库函数,dacWrite(). 用法类似analogWrite(),但是精度会比通过PWM调节的analogWrite()精度更高。
使用MP3解码库,使用XTronical开发的ESP32音频库,在Biboard库文件中我们已经为您封装好,需要注意的是ESP32的MP3播放需要文件系统(SPIFFS或者FAT)的支持,以及Flash分区和上传数据的操作。
URL:https://www.xtronical.com/basics/audio/dacs-on-esp32/
Biboard的红外模块和Nyboard型号相同,使用的库也相同(IRremote)。因为Biboard的Flash容量非常大,所以不再需要注释掉IRremote.h中非NEC_DECODE的解码配置,所以可以适配更多的遥控器了。
BiBoard一共设置了12个PWM舵机接口。每个PWM接口对应的IO号被标注在正面的焊盘旁边。
由于ESP32模块体积较大,所以变更了排针的方向。请接线后再装入Bittle。
BiBoard一共有3个扩展接口,对应的丝印号为P15、P16和P17。
该接口用于模拟输入扩展,可以作为脚底压敏传感器接口。
该接口用于板载ESP32的总线扩展。
此接口与树莓派通信,但是无法直接将树莓派安装到BiBoard上,请使用飞线或中间转接板连接。
到目前为止,我们已有3个版本的 NyBoard:NyBoard V1_0,NyBoard V1_1 和 NyBoard V1_2。
NyBoard V1_1 和 NyBoard V1_2 只有一些细小差别:
V1_2加回了一个 Neo Pixel在 D10脚上。
V1_2的主芯片焊盘支持 ATmega328P AU(大)和 MU(小) 的封装。
NyBoard V1是综合了大家对NyBoard V0的反馈的升级版本。它与以前的版本兼容,但有一些新设计,使其更易于使用。
它仍然使用Atmel ATMega328P作为主控,但是采用16MHz而不是20MHz。现在该开发板与Arduino Uno完全兼容,对于使用Arduino的新用户来说要容易得多。
依然使用PCA9685驱动16个PWM通道,为了方便布线而改变了引脚顺序。但是您不需要读取板上的索引,因为引脚映射是在软件内处理的。
六轴数字运动传感器(MPU6050)被焊接在了PCB上,而不是一个独立的模块。内置运动融合处理器(DMP)进行姿态解算。
8KB的EEPROM依然被使用来保存常数和动作。
优化了电源系统,更可靠且增加了更多的保护措施。
2021年我们新增了官方的蓝牙和WiFi模块。通过尾部的6针串口连接,默认波特率为115200。
Reset按键位于正面,方便使用。
我们增加了4个Grove接口用于连接Seeed Studio的扩展模块,同时我们保留了2.54排针并增加了供电。
我们增加了7个WS2812串行RGB LED。
增加了电池/电源防反接保护。
The configuration of NyBoard V1_0 is shown as below:
NyBoard V1_0使用Atmel ATMega328P-MUR作为主控制器。我们采用其较小封装的版本(QFN32)以获得更好的布局,并且它与常规TQFP32几乎相同。
ATMega328P在5V电源下工作于16MHz。它具有2KB SRAM,32KB闪存和1KB片上EEPROM。使用和Arduino Uno相同的启动引导程序,您可以通过串行端口上传工程。
主控工作于5V但其他外设工作于3.3V的逻辑电平。我们使用PCA9306将I2C的电压转换至3.3V。同时我们为I2C设置了开关。通过将其拨到“ Arduino”或“ Raspberry Pi”,您可以更改板载外围设备的I2C主从配置。
MPU6050广泛用于许多DIY项目中,以获取设备的运动状态。它检测3个加速度和3个角速度。它还包括一个姿态融合处理器,可直接解算运动状态,而无需使用主控制器的计算资源。
在NyBoard V1_0上,其I2C地址为0x68。中断引脚连接到ATMega328P的PD2端口(或Arduino Uno的D2引脚)。
有很多可用的MPU6050库,我们正在使用I2CDev / 6050DMP。您还可以使用其他版本:
PCA9685通过I2C接口转换16个12位的PWM输出,其地址设置为0x40。 PCB上印有16个PWM的编号,实际上您不需要读取它们,因为引脚映射是在软件中完成的。舵机的物理连接与先前的电路板相同。舵机具有3个引脚,分别为PWM信号,电源(2S)和接地(GND)的引脚。
舵机的电源同电池电源直接相连,请勿连接类似SG90这样的6V标压舵机。
我们使用PCA9685的Adafruit PWM舵机驱动程序库。
我们通过一个8KB的板载I2C EEPROM AT24C64来保存运动技能。它的I2C地址是0x54。技能查找表保存在ATMega328P的1KB片上EEPROM中。它使用。在开发新代码时,您需要注意它们之间的差异。
无源蜂鸣器由PD5(或Arduino UNO的D5)驱动,板载放大电路。
我们使用VS1838B作为红外接收器,连接到PD4(或Arduino Uno上的D4)。它由Arduino的IRremote库驱动,遥控器以38KHz的NEC格式编码。您可以通过禁用IRremote.h中的其他协议以节约Flash(大约10%!)
Petoi徽标中的两个LED指示NyBoard的电源状态。左眼为蓝色,显示芯片供电。右眼为黄色,表示舵机电源。当NyBoard连接到电池时,两个LED均应点亮。当NyBoard由USB下载器供电时,只有蓝色LED会点亮。
电池有一个物理防反向插座,同时也内置了防反接电路。电池的输出连接到ADC7(或Arduino Uno的A7)。 ADC7通过分压电路检测电压,实际电压约为读数的2倍。
You should charge the battery in time when the battery is lower than 7.4V.
我们在NyBoard上添加了7个WS2812 RGB LED(Adafruit 称为 NeoPixel)。引脚号为D10。它们由Raspberry Pi的5V DC-DC电源芯片供电,并且独立于ATMega328P的5V网络。因此,您需要插入电池才能为LED供电。
我们新增了Grove插座以方便传感器和模块的。插座有三种类型:
We adopted the Grove sockets for convenient plug-and-play connections. There are three types of socket:
主芯片由低压降(LDO)线性稳压器供电,以消除噪声并提高稳定性。我们使用LM1117-5V和XC6206P-3.3V为5V和3.3V芯片供电。 3.3V LDO在5V LDO之后串联连接,以提高效率。
电池和LM1117-5V之间串联了一个二极管,以防止错误连接造成损坏。 USB上传器上有一个自恢复保险丝(6V 500mA),以限制电流并保护USB端口。
Raspberry Pi消耗的功率很多,因此我们选择TPS565201 DC-DC提供5V 3A输出。峰值输出可以为5A,并具有高温/电流/电压保护。当芯片持续输出> 4A并超过100摄氏度时,将切断电源,直到温度降至正常水平。 WS2812 RGB LED也由该DC-DC电源供电。
舵机直接由2S锂离子电池供电。注意不要短接电源或NyBoard上的任何引脚。
最后更新: 2021-4-19
该版本主要用于解决V1_0中 ATMEGA328P-MU芯片的缺货问题
替换主控ATMEGA328P-MU(QFN32封装)为ATMEGA328P-AU(TQFP32封装)
取消了WS2812灯带RGB LED,因为芯片体积变大更换位置,无法容纳LED。
D10口增加绿色LED,带PWM功能。
所有接口的位置、定义完全相同,配置文件和Bootloader也无需变更
NyBoard V1是综合了大家对NyBoard V0的反馈的升级版本。它与以前的版本兼容,但有一些新设计,使其更易于使用。
它仍然使用Atmel ATMega328P作为主控,但是采用16MHz而不是20MHz。现在该开发板与Arduino Uno完全兼容,对于使用Arduino的新用户来说要容易得多。
依然使用PCA9685驱动16个PWM通道,为了方便布线而改变了引脚顺序。但是您不需要读取板上的索引,因为引脚映射是在软件内处理的。
六轴数字运动传感器(MPU6050)被焊接在了PCB上,而不是一个独立的模块。内置运动融合处理器(DMP)进行姿态解算。
8KB的EEPROM依然被使用来保存常数和动作。
优化了电源系统,更可靠且增加了更多的保护措施。
2021年我们新增了官方的蓝牙和WiFi模块。通过尾部的6针串口连接,默认波特率为115200。
Reset按键位于正面,方便使用。
我们增加了4个Grove接口用于连接Seeed Studio的扩展模块,同时我们保留了2.54排针并增加了供电。
增加了电池/电源防反接保护。
NyBoard V1_1 的功能框图如下所示:
NyBoard V1_1使用Atmel ATMega328P-AU作为主控制器。和Arduino Nano完全相同,兼容UNO。
ATMega328P在5V电源下工作于16MHz。它具有2KB SRAM,32KB闪存和1KB片上EEPROM。使用和Arduino Uno相同的启动引导程序,您可以通过串行端口上传工程。
控制器的D10引脚由WS2812串行RGB LED变更为绿色LED,虽然缺少了绚丽的色彩,但您可以更加方便的配置LED来显示Bittle的状态。
主控工作于5V但其他外设工作于3.3V的逻辑电平。我们使用PCA9306将I2C的电压转换至3.3V。同时我们为I2C设置了开关。通过将其拨到“ Arduino”或“ Raspberry Pi”,您可以更改板载外围设备的I2C主从配置。
MPU6050广泛用于许多DIY项目中,以获取设备的运动状态。它检测3个加速度和3个角速度。它还包括一个姿态融合处理器,可直接解算运动状态,而无需使用主控制器的计算资源。
在NyBoard V1_1上,其I2C地址为0x68。中断引脚连接到ATMega328P的PD2端口(或Arduino Uno的D2引脚)。
有很多可用的MPU6050库,我们正在使用I2CDev / 6050DMP。您还可以使用其他版本:
PCA9685通过I2C接口转换16个12位的PWM输出,其地址设置为0x40。 PCB上印有16个PWM的编号,实际上您不需要读取它们,因为引脚映射是在软件中完成的。舵机的物理连接与先前的电路板相同。舵机具有3个引脚,分别为PWM信号,电源(2S)和接地(GND)的引脚。
舵机的电源同电池电源直接相连,请勿连接类似SG90这样的6V标压舵机。
我们使用PCA9685的Adafruit PWM舵机驱动程序库。
我们通过一个8KB的板载I2C EEPROM AT24C64来保存运动技能。它的I2C地址是0x54。技能查找表保存在ATMega328P的1KB片上EEPROM中。它使用。在开发新代码时,您需要注意它们之间的差异。
无源蜂鸣器由PD5(或Arduino UNO的D5)驱动,板载放大电路。
我们使用VS1838B作为红外接收器,连接到PD4(或Arduino Uno上的D4)。它由Arduino的IRremote库驱动,遥控器以38KHz的NEC格式编码。您可以通过禁用IRremote.h中的其他协议以节约Flash(大约10%!)
Petoi徽标中的两个LED指示NyBoard的电源状态。左眼为蓝色,显示芯片供电。右眼为黄色,表示舵机电源。当NyBoard连接到电池时,两个LED均应点亮。当NyBoard由USB下载器供电时,只有蓝色LED会点亮。
电池有一个物理防反向插座,同时也内置了防反接电路。电池的输出连接到ADC7(或Arduino Uno的A7)。 ADC7通过分压电路检测电压,实际电压约为读数的2倍。
You should charge the battery in time when the battery is lower than 7.4V.
我们新增了Grove插座以方便传感器和模块的。插座有三种类型:
We adopted the Grove sockets for convenient plug-and-play connections. There are three types of socket:
主芯片由低压降(LDO)线性稳压器供电,以消除噪声并提高稳定性。我们使用LM1117-5V和XC6206P-3.3V为5V和3.3V芯片供电。 3.3V LDO在5V LDO之后串联连接,以提高效率。
电池和LM1117-5V之间串联了一个二极管,以防止错误连接造成损坏。 USB上传器上有一个自恢复保险丝(6V 500mA),以限制电流并保护USB端口。
Raspberry Pi消耗的功率很多,因此我们选择TPS565201 DC-DC提供5V 3A输出。峰值输出可以为5A,并具有高温/电流/电压保护。当芯片持续输出> 4A并超过100摄氏度时,将切断电源,直到温度降至正常水平。
舵机直接由2S锂离子电池供电。注意不要短接电源或NyBoard上的任何引脚。
BiBoard(ESP32)可变增益ADC的应用
BiBoard ADC使用说明
ESP32模块34,35,36和39脚仅支持输入,在BiBoard上我们将其配置成模拟输入端口,方便开发者们连接4个足底传感器。
BiBoard模拟输入模-数转换器(ADC)的用法和基础的Arduino UNO相同,但是精度更高(12位,UNO为10位),同时增加了可编程增益放大器,可以让ADC工作在最佳的范围内。
当输入1V电压信号时,如果按照普通配置为12bit访问,参考电压等于电源电压(3.3V):对应的输出为0~1241,ADC很大一部分量程会被浪费掉,造成数据不精确。当我们配置成可编程增益的时候,就可以让1V的输入信号填满几乎整个ADC量程,精度和分辨率大大提高。
我们的例程使用4个输入,分别配置成:0/2.5/6/11分贝的放大增益,需要注意的是ESP32 Arduino默认配置的是11分贝的放大增益。
我们使用“analogSetPinAttenuation(PIN_NAME, attenuation)”来配置单个输入引脚的增益,也可以使用“analogSetAttenuation(attenuation)”来配置全部模拟输入引脚的增益。
实际测试,当输入1V标准电压时,ADC的数值分别为:3850/2890/2025/1050。在今后的制作中,可以通过改变ADC的增益改变ADC的量程,而不需要麻烦的更换基准电压源了。
MPU6050是使用最广泛的6轴陀螺仪,不仅可以较为精确的测量3轴角速度及3轴加速度,也可以使用内置的数字运动处理器单元(DMP,Digital Motion Processor)来进行基于硬件的姿态融合计算。这样新手也可以很方便的使用。为此我们也采用的MPU6050陀螺仪。
MPU6050在Arduino UNO上的例程很多,最著名的就是jrowberg的I2Cdev和MPU6050DMP库:
但是很不幸,这个库无法直接在基于ESP32的BiBoard上运行。我们找到了Github上移植好的库,方便使用。这个库增加了了ARM和ESP系列的PGMSpace的定义,增加了校准函数,去掉了FIFO溢出的处理函数(有兴趣的朋友可以使用Beyond Compare进行代码对比)。库包含了I2Cdev和MPU6050,地址和压缩包如下:
下载完成后,在文档/Arduino/library下建立一个MPU6050的文件夹,把压缩包里的库文件拷贝进去即可。这个修改过的MPU6050的库也是可以兼容ARM和AVR的,所以如果你的计算机中有原版的I2Cdev和MPU6050库,可以删除。
我们使用官方的MPU6050_DMP6示例即可。
DAC的用法
DAC的用途和ADC正好相反,DAC是将数字信号转换成模拟信号输出。
还记得NyBoard开机的那一段音乐?那是使用PWM发出的,PWM采用高速开关调节占空比来输出电压。
相比PWM,DAC会直接输出电压而无需计算占空比。ESP32集成了1个2路8位DAC,数值为 0 - 255。电压范围是 0 - 3.3V。所以DAC的输出电压计算公式如下:
例程如下:
BiBoard有2个串口,分别位于2个2个扩展插座(P16,P17)上。
P16上的串口1同时连接着USB下载器,请勿同时使用下载器和外接串口设备,会因为串口电压分压而导致通讯错误。
在Arduino例程中,串口0为Serial,串口1为Serial1。将Serial和Serial1的数据互相转发。
BiBoard配置了红外传感器,连接在第23引脚。红外的使用和基于AVR的UNO完全一样。
首先下载2.6.1版本的IRremote库,需要手工选择2.6.1版本。因为之后的版本红外编码有变化,如果使用3.X版本,指令会无法被翻译。为了同我们之前的产品兼容,测试后决定使用2.6.1版本。
在使用NyBoard的时候,为了保证代码可以顺利编译,我们需要给IRremote库进行“瘦身”,即去掉我们用不到的编码/解码器,只保留NEC_DECODER即NEC格式的38KHz信号解码器。
在Flash巨大的BiBoard上,我们无需进行“瘦身”。
最后附上例程,接受红外信号并串口打印,也可以使用官方的例程进行测试。
EEPROM的用法同Arduino UNO一样,分为读和写两种操作。
读取操作:
EEPROM存储器的I2C地址
EEPROM内部地址(存储数据的地址)
读取数值
写入操作:
EEPROM存储器的I2C地址
EEPROM内部地址(存储数据的地址)
写入数值
在BiBoard的例程中,我们的EEPROM在I2C总线上的地址是0x54,容量为8192Bytes(64Kbit)。我们往EEPROM里从第一个地址开始顺序写入0到15一共16个数值,然后再读出来进行对比。理论上EEPROM写入的数值和对应的地址应该相同。
在NyBoard出厂测试中,我们也是使用这种方法,只不过更复杂一些。我们会使用固定列表填满EEPROM再读取出来进行对比。
最后一点需要注意,EEPROM的操作,尤其是写入操作一般不会放入loop()循环当中。虽然EEPROM很耐擦写(10万次),但如果在loop循环中频繁写入某一个块,会导致EEPROM出故障的。
区域 | 编号 | 模块 | 功能简介 |
---|---|---|---|
电源区
1
电池接口
接入 Bittle 的电池或外接 8.4V 供电
2
电源指示灯
左蓝色为 5V/3.3V 供电,右橙色为舵机 8.4V 供电
3
供电电路
提供 5V 以及 3.3V 供电
板载模块区
4
USB 下载电路
用于下载程序和软复位控制器
5
陀螺仪
MPU6050 6 轴陀螺仪, 地址 0x68, 中断连接 1026
6
EEPROM
64Kbit I2C EEPROM, 地址 0x51
7
DAC 功放
单声道功放, 连接 1025
8
红外模块
红外接收器, 连接 1023
扩展接口
9
PWM 舵机接口
12 路 ESP32 直出的 PWM 引脚
10
3路扩展接口
4 路模拟输入, 2 个串口, 1 个 I2C, 5V 电源
按键
11
Boot模式键及
Reset复位键
经常使用的是复位键,重启程序。按键边有丝印。
库名称
作者
特点
I2Cdev
jrowberg
内置DMP处理器调用和校准
Adafruit MPU6050
Adafruit
标准MPU6050库
Kalman Filter
TKJ Electronics
含Kalman滤波器
编号
引脚名称(不含电源)
功能
G1
I2C: SCL, SDA
I2C ( 3.3V电平)
G2
A2, A3
模拟输入; 0-5V
G3
PD8, PD9
数字 I/O; 0-5V
G4
PD6, PD7
数字 I/O; 0-5V
库名称
作者
特点
I2Cdev
jrowberg
内置DMP处理器调用和校准
Adafruit MPU6050
Adafruit
标准MPU6050库
Kalman Filter
TKJ Electronics
含Kalman滤波器
编号
引脚名称(不含电源)
功能
G1
I2C: SCL, SDA
I2C ( 3.3V电平)
G2
A2, A3
模拟输入; 0-5V
G3
PD8, PD9
数字 I/O; 0-5V
G4
PD6, PD7
数字 I/O; 0-5V
示例代码主要演示了蓝牙串口和串口之间相互转发信息,来源于ESP32的官方例程,简单易懂。所以说明中主要解释代码中出现的概念。
目前主要的蓝牙协议分为2类,基于RFCOMM的传统蓝牙(HS/BR/EDR)和基于GATT的蓝牙低功耗(BLE)。
传统蓝牙速度较快,具体应用协议多,如面向音频的A2DP,蓝牙串口SPP等。但功耗较高,且接入苹果设备需要MFi(Made For iOS)的芯片及认证。
蓝牙低功耗(BLE,Bluetooth Low Energy)可以自行定义各种GATT的Profile,自身也配置了常用的Profile(如设备信息、电池等),功耗低用途广,可以用在苹果设备上,缺点是比起传统蓝牙速度比较慢。蓝牙低功耗多用于手环/智能手表/信标等数据量低但是对功耗敏感的设备上。
本示例使用的是基于传统蓝牙的SPP协议,自带全部的串口协议。当计算机或安卓手机连接配对后会在系统自动生成一个串口号进行通讯,使用体验和普通有线串口没有太大区别。
蓝牙低功耗串口将在下一章演示,本质上是配置了一个串口的Profile, 需要主机软件支持。
蓝牙低功耗(BLE, Bluetooth Low Energy)串口透传使用较为广泛。在苹果的iOS平台,经典蓝牙需要有MFi认证才可以和苹果的iOS设备进行连接。而蓝牙低功耗设备并没有这个限制。
蓝牙低功耗的协议栈和原理这里就不再赘述了,相关的文章和视频较多。简单的来说就是蓝牙服务以Profile的方式提供,每个服务的Profile下有N个具有独立ID(UUID)的character。每个character有不同的权限(read,write,notify,indicate)。用户定义character并且和权限组合后,就可以提供完整的服务了。
BLE透传的实际上是建立了一个BLE的Service,这个Profile下有2个character。
一个用于TX(发送数据),一个用于RX(接收数据)。为此他们有不同的权限。下面的代码是新建service和character的:
接下来是2个回调函数,分别在有连接时,以及有write RX character时进行的操作:
最后主循环是连接的控制,判断是否又连接,是否断开连接。
完整的代码见官方库的示例:ble_uart,调试工具可以使用LightBlue。
在/ModuleTests文件目录中有一个名为testMP3的示例程序,该程序主要功能是播放存储在SPIFFS文件系统中的.mp3文件。用户可以通过在串口监视器中输入0~6数字(.mp3文件序号)来选择播放不同的.mp3文件。
在编译程序之前,请先 (, 开发板 esp32 2.0*, 库 , )。
编译完成后,使用最新的SPIFFS文件上传插件,上传.mp3文件到BiBoard的SPIFFS文件系统分区中,具体方法请参考
注意:
Arduino IDE 2.0 版本目前无法增加 large_spiffs_16MB (4.5MB APP with OTA/6.93MB SPIFFS)配置选项。
Arduino IDE 1.8.* 中是用 Java 编写的。 而 Arduino IDE 2.0 是用不同的语言编写的(TypeScript + Golang),因此之前的上传插件不能在Arduino IDE 2.0 中使用。目前还没有支持Arduino IDE 2.0 SPIFFS文件上传插件。
因此建议您暂时安装使用 Arduino IDE 1.8.* 版本软件上传BiBoard程序及.mp3文件。
当然,你也可以使用VS Code + PlatformIO 上传BiBoard程序及.mp3文件,详情请参考以下文档:
在上传程序和.mp3文件之前,请将data文件夹移动到项目根目录下,代码文件存放在src目录下,并在项目根目录下platformio.ini文件中配置分区选项 board_build.partitions,如下图所示:
ESP32板的Flash有16M,用16进制数表示存储地址的范围是:0x0 - 0x01000000 。
这是系统已经配置好的分区表, 如下图:
此分区表文件在电脑中的存储位置:
C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\tools\partitions\large_spiffs_16MB.csv
从上述分区表中可以看出:APP0区和APP1区各4.5M;数据区为SPIFFS,大小为6.9M。
但是在Arduino IDE中,ESP32 Dev Module的硬件分区配置选项中未包含这项配置:
我们要为ESP32 Dev Module加入这个配置。
打开开发板配置文件:C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\boards.txt
定位开发板的名称:esp32.name=ESP32 Dev Module,如下图所示:
在配置文件中ESP32 Dev Module分区配置的此行文字
下面加入以下3行文字:
下面分别解释一下这3行文字的含义:
ESP32 分区配置的名称,命名为BiBoard V0(4.5M APP with OTA /6.9 MB SPIFFS),也可以换成你熟悉的其它名称。
分区配置文件信息,就是large_spiffs_16MB.csv文件。你也可以自己写一个分区文件调整APP和数据区的文件大小。
此行文字指定上传最大的程序大小 4685824 bytes。
下面我们试着编译一个简单的程序,测试以上配置是否设置成功。
重新打开Arduino IDE,我们可以看到刚才配置的BiBoard:
编译程序后,结果如下图所示:
编译完成,使用了213KB的Flash(4%)最大可使用4685824 bytes。
其中4685824 bytes就是刚才增加到配置文件的第三行文字中指定的最大程序上传字节数。
至此您已在Arduino IDE中完成了对拥有最大Flash空间的开发板的配置。
ESP32 文件系统SPIFFS配置指南
在BiBoard(ESP32)中,除了常规的程序区和引导区,我们在Flash分区中使用了文件系统。
独立分区的文件系统作用如下:
在指定的地址保存数据而不会因为重新更新而删除(如校准数据,步态数据)
不用外置的SD卡,节约了硬件资源
;
;
常见的文件系统有Windows的NTFS,exFAT,Linux的日志文件系统Ext和XFS。但是在嵌入式领域,这些大型的文件系统太过庞大。我们使用了轻量级的SPIFFS(SPI Flash File System SPI闪存文件系统),用于SPI NOR flash设备的嵌入式文件系统,支持磨损均衡、文件系统一致性检查等功能。
因为轻量,SPIFFS最大的特点在于不支持树形目录,即全部文件扁平存储于同一层。ESP32提供的SPIFFS有以下特点:
目前,SPIFFS 尚不支持目录,但可以生成扁平结构。如果 SPIFFS 挂载在 /spiffs 下,在 /spiffs/tmp/myfile.txt 路径下创建一个文件则会在 SPIFFS 中生成一个名为 /tmp/myfile.txt 的文件,而不是在 /spiffs/tmp 下生成名为 myfile.txt 的文件;
SPIFFS 并非实时栈,每次写操作耗时不等;
目前,SPIFFS 尚不支持检测或处理已损坏的块。
您可以通过自己的Arduino代码创建/保存以及删除文件,但操作比较繁琐,您需要将数据甚至二进制文件放入Arduino的Sketch并通过运行程序创建文件。
然而有个很好用的工具,可以直接把文件从计算机上传至文件系统,虽然比起“可移动存储”的“拖-放”式拷贝略微麻烦一些,但是无论是MP3音频还是HTML网页文件,都可以很轻松的上传至Flash。下面我们来学习如何使用这个插件。
下载ESP32FS插件的压缩包,地址:
转到“Arduino”目录,然后打开“tools”文件夹
C:\Users\{YourUserName}\Documents\Arduino\tools
将下载的.zip文件夹解压缩到 “tools” 文件夹。您应该具有以下类似的文件目录结构:
C:\Users\{YourUserName}
\Documents\Arduino\tools\ESP32FS\tool\esp32fs.jar
最后,重新启动Arduino IDE。
要检查插件是否已成功安装,请打开Arduino IDE。选择开发板(ESP32 Dev Module),转到“工具”,然后检查是否具有“ ESP32 Sketch Data Upload ”选项。
要将文件上传到ESP32文件系统,请按照以下步骤:
创建一个Arduino项目工程(比如:名称 Test.ino)并保存
打开该工程的目录,可以使用“项目-显示项目文件夹”选项
在该文件夹内,创建一个名为“data”的新文件夹。
在“data” 文件夹中,放入您要保存到SPIFFS文件系统中的文件。例如,创建一个test_example.txt文件,内容如下图所示:
在Arduino IDE中,点击 “工具” - “ESP32 Sketch Data Upload”
当您看到“ SPIFFS Image Uploaded ”提示信息时,文件已成功上传到SPIFFS文件系统中。
文件系统的例程SPIFFS_Test.ino(C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\libraries\SPIFFS\examples\SPIFFS_Test
)来源于ESP32官方未做修改,代码实现了“增删改查”的基本操作,并提供了一个SPI flash的IO测试程序。
如果有需要,建议直接使用例程的代码进行操作。
BiBoard使用的ESP32和UNO用的328P有所不同。ESP32的PWM因为使用了矩阵总线的缘故,可以使用在非特定的引脚上。
ESP32的PWM被称作LED控制器(LEDC),LED PWM 控制器主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制。该控制器有 8个定时器,对应8个高速通道和8个低速通道,合计16通道。
相比UNO直接使用“analogWrite()” 输入0-255之间任意的占空比。BiBoard上ESP32的PWM控制要略麻烦一些。需要控制的参数如下:
人工选择PWM通道(0-15),也提高了引脚的使用灵活性
PWM波形的位数,决定了PWM波形占空比的分辨率,位数越高精度越高。
PWM波形的频率,决定了PWM波形的速度,频率越高速度越快。
PWM波形的频率和位数是相对的,位数越高频率越低。以下例子引用自ESP32编程手册:
比如,PWM 频率为 5 kHz 时,占空比分辨率最大可为 13 位。这意味着占空比可为 0 至 100% 之间的任意值,分辨率为 ~0.012%(2 ** 13 = 8192 LED 亮度的离散电平)。
LED PWM 控制器可用于生成频率较高的信号,足以为数码相机模组等其他设备计时。此时,最大频率可为 40 MHz,占空比分辨率为 1 位。也就是说,占空比固定为 50%,无法调整。
LED PWM 控制器 API 可在设定的频率和占空比分辨率超过 LED PWM 控制器硬件范围时报错。例如,试图将频率设置为 20 MHz、占空比分辨率设置为 3 位时,串行端口监视器上会报错。
如上文所示,我们需要配置通道、频率和位数,同时选择输出引脚。
第一步:配置PWM控制器
第二步:配置PWM输出引脚
第三步:输出PWM波形
例程中我们选择IO2作为输出引脚,连接IO2至一个LED,可以观察到LED呼吸灯的效果。
请安装Arduino IDE(版本号:1.8.*),并且具有Arduino IDE的ESP32支持包(参考)。
BiBoard V1 是一款基于ESP32 MINI 1高性能模组的开发板,模组采用Xtensa双核32位LX6处理器,内置4 MB Flash、2.4 GHz WiFi + 低功耗蓝牙。具备强大的计算能力和多样的扩展接口,可满足不同项目的个性化需求和复杂嵌入式开发。广泛适用于物联网、工业自动化和教育科研等领域。是每位嵌入式开发人员的理想选择。
实时高负载供电
高速串口调试芯片
飞控级六轴运动传感器
12路大扭矩PWM舵机接口
通用型扩展Grove接口
双语多词条离线智能语音识别
高保真音响喇叭
零延迟,高灵敏触摸模块
强大的EMC抗干扰和抗辐射性能
项目 | 规格 |
---|---|
【1】. 开发板默认支持12路PWM舵机,但若需要读取第12路舵机(Pin 27)反馈角度,请将锡桥“JP1”拆掉。此时LED27不可使用。
【2】. 最新固件已通过内置Flash实现了外部 EEPROM 的功能。若有需要, 可自行购买并焊到开发板上,型号:M24C64-FMC6TG。
【3】. 若烧录程序时因外部因素导致烧录中断,可能会引发第二次程序无法烧录,此时需断电后按住BOOT键再给主板上电,使ESP32进入“下载模式”,完成烧录后重新对开发板上电即可。
ESP32的Arduino例程提供了OTA(On The Air upgrade,在线升级)的功能。
我们BiBoard的配置是16MB的Flash,具体分区如下:
OTA主要操作OTAdata区域和APP1,APP2区域。原理是:
BiBoard运行含有OTA功能的固件,此时启动指向APP1区域。
通过WiFi向ESP32发送OTA指令,升级程序的二进制文件被传送到APP2区域。
如果APP2传输完毕并校验成功,OTAdata指向APP2区域,下次则从更新后的固件区域(APP2)启动,APP1数据保留。下次OTA将写入APP1区覆盖掉旧的固件。
如果因为网络传输错误导致APP2未传输完成,由于APP2没有通过校验,OTAdata没有指向APP2区域。复位启动后依然执行APP1区域的程序,损坏的APP2区域将在下次OTA的时候被全部擦写覆盖。
例程中首先配置WiFi,配置WiFi模式为STA(Station,基站模式)。启用WiFi函数并传入账户密码“WiFi.begin(ssid, password); ”
当WiFi顺利连接上时,会在串口打印IP地址;如果连接错误,ESP32会重启。
例程中可以配置端口号,OTA密钥或密钥的哈希,以及OTA的区域及类型(默认注释掉的)。
下面是几个类似回调函数的代码段,用于OTA各个阶段状态的判断。
按照例程配置完之后,在loop中调用“ArduinoOTA.handle();”即可。后面的analogWrite函数是为了区别不同固件更新的效果(通过改变数值)。
第一次使用串口下载,调用的是python工具“esptool”。下载完成后即可使用OTA。在端口选项中会发现多出了一个基于IP地址的端口,这便是OTA的地址。
选择该地址,右下角变成ESP32 Dev Module on 你的BiBoard的IP地址(192.168.1.178)。
同时也会弹出:“Serial monitor is not supported on network ports such as 192.168.1.178 for the ESP32 Dev Module in this release(该版本无法使用基于网络的串口监视器)”的警告。
Arduino的ESP32 OTA仅适用于更新程序,无法完成串口调试工作。如果需要调试BiBoard请连接USB-C接口。
下载程序,如图所示。
蓝牙模块为标准透传模块,将串口数据发送至连接蓝牙的设备上。
您可以通过蓝牙连接方式对机器人进行无线上传程序或控制其运动。 您甚至可以使用我们的智能手机 APP Petoi 控制机器人。 我们在标准机器人套件中已包含了我们的官方蓝牙模块。如下图所示:
蓝牙模块与 NyBoard 的连接如下图所示,您需要将蓝牙模块插入 NyBoard 上的 6 针插座。 注意蓝牙模块的引脚顺序。 将电池连接到 NyBoard 后,长按电池上的按钮为机器人供电。 蓝牙模块上连接指示灯闪烁表示正在等待连接。
您需要在 Petoi App 内连接蓝牙,而不是在手机的系统蓝牙设置中。在某些型号的手机上,您可能需要给 app 蓝牙和位置服务的权限。更详细的配置说明请参阅手机 app 章节。
在系统的蓝牙设置中,搜索以 Petoi 或 Bittle 开头的蓝牙设备名称,然后连接。 配对的默认 PIN 码是“0000”或“1234”(为了方便连接,后续批次默认密码设置为“0000“)。 配对成功后,系统会分配一个串口名称。
在 Mac 上,转到系统偏好设置 -> 蓝牙,找到以 Petoi 或 Bittle 开头的设备名称,然后连接。
在 Windows 上,在系统设置中添加蓝牙设备,具体步骤如下列图示:
对于Windows 10用户,系统会将蓝牙分配“传入”COM口和“传出”COM口,请使用“传出”COM口。具体步骤如下图所示:
然后您可以在 Arduino IDE 的 Tools->Port 下选择它,使用方法与USB上载器相同。打开串口监视器后请选择:没有结束符(No line ending),波特率设置为 115200。
电脑端的蓝牙连接时常会自动断开,打开 Arduino 的串口监视器可以保持连接。但要注意,这也会独占蓝牙串口,使其他应该无法访问它。
如果需要配置蓝牙模块,请参考“JDY-23 AT指令集”。将蓝牙模块插在USB上载器的通信模块调试接口上。如下图所示:
以下列出常用的指令:
打开Arduino IDE中的串口监视器,配置蓝牙模块时请选择:NL and CR(发送新行/回车), 波特率请设置为 115200,否则JDY-23模块将不识别任何指令。
如果想使用BLE功能,请扫描后连接BittleBLE-xxxx(随机数字),可以使用Lightblue软件对BLE进行常规调试。
USB上载模块使用的WCH的CH340C方案,Windows10、Linux及MacOS均为免驱。具体接口如下图所示:
“NyBoard下载接口” : 用来连接NyBoard,给机器人上传程序固件以及与电脑进行串口通信。
“通信模块调试接口” : 用来连接蓝牙或WiFi模块、进行模块程序更新及参数调试。为了避免使用杜邦线连接时的繁琐操作,引脚排序与NyBoard下载接口略有不同——将TX/RX接口进行了对调,将一个GND引脚变成了RTS引脚。通信模块调试接口的具体使用方法请见后续章节。
请勿将USB上载模块的2个接口:“Nyboard下载接口”, “通信模块调试接口” 同时使用,这样会无法进行任何串口通信。
将USB上载模块的Nyboard下载接口(6针插头-H1)按照对应引脚插入NyBoard的引脚座(如上图所示),使用附带的USB数据线一端插入USB上载模块的MicroUSB接口;另一端插入电脑的USB接口。
在Windows系统桌面用鼠标右键点击“此电脑”,然后用鼠标左键点击“管理”(当然您也可以在文件夹浏览器中操作),如下图所示,再在“计算机管理”页面,选择“设备管理器”检查连接成功的串口号:
在电脑中打开Arduino IDE,或桌面应用固件上载界面,选择对应的COM口,即可为NyBoard上传程序固件并使用串口监视器进行通信。
USB上载器具有三个LED,即电源(红色),Tx和Rx。连接后,Tx和Rx应该闪烁一秒钟,指示初始通信,然后变暗。仅电源LED指示灯应保持点亮状态。您可以在 Arduino IDE 中的 “工具”->“端口”下找到一个新端口,名称为:
“ /dev/cu.usbserial-xxxxxxxx” (Mac)
“ COMX ”(Windows,注意一定不是COM1,COM1一般台式机有,RS232串口)
“ttyUSB#” (Linux,注意Arduino是否有读写该设备的权限,如果没有,可以使用 chmod 命令添加对应权限)
特别提一下Linux,将上载器连接到计算机后,您将在串行端口列表中看到“ ttyUSB#”。但是上传时,您仍然可能会遇到串行端口错误。您将需要授予串行端口权限。请转到此链接并按照说明进行操作 https://playground.arduino.cc/Linux/All/#Permission
如果 Tx 和 Rx 一直亮着,说明 USB 通信有问题。 您不会看到新端口。 如果您没有将 NyBoard 与外部电源连接并且所有舵机全部转动一次,则通常是由计算机的过流保护引起的。
理论上Windows 10,Linux 及 MacOS 均为免驱,如需下载驱动,可参考以下链接:
对于 ChromeOS:
下载最新的 Linux 版 Arduino IDE(比如 1.8.19),下载链接如下:https://github.com/arduino/Arduino/releases/download/1.8.19/arduino-1.8.19.tar.xz
可以参考以下教程视频在 Chromebook上安装 Arduino IDE:https://www.youtube.com/watch?v=2cve6n4LZqI
使用数据线连接USB上载器与Chromebook
在 Chromebook的 Linux 虚拟机中设置已识别的USB 串口:
Settings => Advanced => Developers => Linux development environment => Manage USB devices => USB Serial (turn on)
注意: 每次重新连接USB上载器时,都必须重复第 4 步。
Petoi ESP8266 WiFi模块使用指南
本模块使用乐鑫官方基于ESP8266EX的型号ESP-WROOM-02D, 4MB QSPI Flash。模块经过美国FCC, 欧洲CE-RED, 日本TELEC以及韩国KC认证。
用户可以使用该模块的全部功能,而非普通的串口透传模块。
模块包括自动下载电路及通信模块。自动下载电路参照官方建议使用2个S8050三极管,接收来自CH340C下载器的RTS以及DTR信号并触发下载时序。
连接到Nyboard上:
下载程序:
我们使用Arduino下的ESP8266编程环境。
下载地址为:http://arduino.esp8266.com/stable/package_esp8266com_index.json. 将其粘贴至Arduino首选项的附加开发板URL中即可。
随后打开“开发板管理器”,输入ESP8266或8266搜索,如下图所示:
下载ESP8266 by ESP8266 社区这个支持包即可。
下载完成后,我们选择:ESP8266 Board(当前最新版本为2.74)-> Generic ESP8266 Module, 如下图所示。
接着我们来配置以下参数:
这里单独提一下Flash大小和分区。
Arduino UNO使用的ATMega328P内置32KB的Flash和1KB的EEPROM。当使用Arduino的时候,我们是这样划分Flash和EEPROM的:
如果按照我们选的ESP8266 4MB Flash的划分方式,如下图:
相比UNO使用整块的Flash存储Sketch程序,我们使用2个小块来分别存储A程序和B程序,并单独划分了一块数据区。这样的好处是什么呢?为什么叫OTA模式呢?
当您拿到8266模块时,内置程序位于A区,B区域和文件系统区域为空,Boot loader控制程序从A区启动。
当需要无线更新时,我们把新的程序存储至B区域。此时若发生传输中断,下次启动时依然由Boot loader控制程序从A区启动。
当更新并校验数据完毕后,Bootloader启动项默认编程B,下次开机时从B区启动。
数据区相对程序区是独立的,程序可以直接读写数据区的数据,也可以使用客户端直接上传数据。
当擦除程序时,只会擦除程序区,而数据分区默认不会擦除。
配置好后,我们使用Arduino经典的“Blink”程序来测试ESP8266开发板。打开Blink工程,配置好开发板,将模块插在USB下载器的通信模块调试接口上,下载Blink例程。相比UNO编译时间稍长,Linking后会以百分比的形式显示下载进度:
ESP8266的Arduino支持文件较大,Blink使用了257KB的Flash及26.8KB的RAM。
固件地址:https://github.com/PetoiCamp/OpenCat/tree/main/ModuleTests/ESP8266WiFiController
该工程包括4个文件:
ESP8266WiFiController.ino :Arduino项目文件,包含核心代码
mainpage.h:以字符串存储的主页文件
actionpage.h:以字符串存储的动作遥控网页文件
calibrationpage.h:以字符串存储的校准舵机网页文件
请将它们放置于名为”ESP8266WiFiController“的文件夹内,打开ino文件,并下载至ESP8266 WiFi模块上即可。
完成WiFi模块的代码下载后,第一次使用建议连接在下载器上。
打开手机的WiFi并搜索网络,会搜索到一个名为“Bittle-AP”的无加密的无线热点,点击连接。
如果您的手机有自动网络优化功能,因为Bittle的WiFi热点是没有Internet连接的,手机会自动切换至有网络连接的WFi网络或启用数据流量。
连接“Bittle-AP”后,默认浏览器会自动跳转至Bittle无线模块的”WiFiManager“页面。
如果没有跳转,默认网关地址为:192.168.4.1。请打开浏览器手工输入后进入配网页面。点击“Configure WiFi” 配置无线网络。
在WiFiManager页面,Bittle的无线模块会自动搜索附近全部的WiFi SSID并显示。点击您自己的WiFi SSID并输入密码后,Bittle会首选连接到这个网络。
连接成功后,Bittle会打印出DHCP分配的IP地址。如果您是高阶用户,也可以在Arduino中配置固定的IP地址。
在浏览器中输入WiFi模块分配到的IP地址后,即可访问Bittle的控制界面。
示例代码是一个简单的web服务器例子,包含2个HTML页面。2个页面以字符串常量的形式存储在2个头文件中。这样的做的好处是避免了不停调用client.print函数将网页的html弄得比较乱。
首先设置好需要接入的WiFi热点账户和密码,之前的程序我们在Arduino代码中使用字符串配置WiFi账号和密码,当网络环境发生变化的时候需要重新烧录程序,非常不便。
为了方便使用我们使用了WiFiManager库,可以以Web的方式配置WiFi接入点的信息。
新建一个web服务器的对象,配置端口80(常用的HTTP服务器端口)
HTTP响应函数的功能是对传来的HTTP请求作出反馈
这2个handler函数返回200(OK)以及对应的网页HTML代码供客户端显示。
handleActionPage函数略微有一些不同,这是一个带参数传递的http请求处理函数。例如:当参数为“gyro”,调用sendCmd函数,将其转换为机器人可识别的串口指令“g”,(开关陀螺仪)通过WiFi模块的串口发送给机器人,这样我们的机器人就会执行指令。
那么这个“gyro”参数是怎么生成和传递的呢?是因为我们给服务器发送了这样一条带值传递的HTTL request:
服务器通过函数解析其中的actionpage参数,解析出name是gyro。
这条URL,我们可以直接在浏览器中用键盘输入后执行,更常用的方法是在我们的ActionPage网页文件,为 GyroOn/Off 按钮增加一个链接。当按下(onclick)GyroOn/Off 按钮时,会向主机发送上面的URL。完整的GyroOn/Off 按钮配置如下:
执行完name解析后,我们令其返回ActionPage,否则网页就白屏了。
最后我们定位接受到的HTTP请求对应的处理函数
服务器一旦启动将会一直运行,而客户端的HTTP请求会从不停的发送。每次都需要处理:“连接 – 处理请求 – 断开”,所以客户端的请求是主循环。
好在ESP8266的web服务器库已经为我们做好了这一复杂的过程。我们只需要在主循环中调用客户端处理函数,按照我们刚刚设置好的服务器处理策略进行处理。
这样一个最简单的web控制的服务器端就做好了。
相比Nyboard主板的ATMega328P,ESP8266的资源更多,玩法也更多。比如:
基于HTTP的Restful的控制API,并连接物联网平台
MQTT和Node-Red的消息传递;
使用WiFi给模块更新固件;
使用ESP8266强大的CPU作为Nyboard的协处理器,处理运动数据或存储更多动作。
请参考说明文档使用 打开示例程序(ESP8266WiFiController.ino)为ESP8266上传WiFi控制固件。
安装Python3, 并下载控制机器人的
Python 3. 8及以上版本,对于type 的定义,调用语法不同。此脚本对此已做兼容,但需要您根据自己所安装的Python版本,注释、取消注释脚本中几处相应语句,例如以下脚本支持3. 8以下版本的Python:
此脚本既可以单独只控制一个机器人,也可以实现同时控制多个机器人,可以在example.py中修改以下语句实现:
参照WiFi模块(ESP8266)的给ESP8266分配到的IP地址后,将其插在机器人的主板上。机器人正常上电开机后,即可使用python运行脚本example.py对机器人进行无线控制。您 可以根据自己的实际需要修改以下脚本语句(修改列表内容),让机器人做出各种动作:
Petoi 智能视觉传感器可以识别多种物体,内置深度学习算法。 例如,它可以检测色块、球、人体和卡片。 其检测结果可通过UART或I2C接口传输。 MU体积小巧,功耗低,所有算法本地处理,可广泛应用于智能玩具、AI+STEAM课程、创客作品等产品或领域。
目前桌面应用程序只支持产品Bittle,软件版本2.0,模式请选择“摄像头”。
2. 使用最新的 OpenCat 代码完成设置后并上传程序。
如果您已经上传了最新的 OpenCat 程序可以让 Bittle 行走,您只需要删除 OpenCat.ino 中 #define CAMERA 前面的代码注释符号(//), 如上图所示,然后上传程序即可。
上传完成后,切换 MU Vision Sensor 上的拨码开关,并使用电线连接到 NyBoard,如下图所示:
注意左右拨码开关位置(左:下上;右:下下),一定要拨到图示位置。
具体使用时将连接摄像头的一端固定在机器人的头部(含在Bittle的嘴中)。
如果 MU 视觉传感器无法识别目标物体,请先按下MU 视觉传感器上的重置按钮,然后再按下主板上的重置按钮。
功能演示视频如下:
该传感器集成了两个光电阻(依赖光强调整电阻)来检测光强,光电阻是利用光电导效应的一种特殊的电阻,它的电阻和入射光的强弱有直接关系。光强度增加,则电阻减小;光强度减小,则电阻增大。输出信号为模拟值,亮度越亮,值越大。您可以通过判断检测到的光强数值来实现自己想要的功能,比如:机器人追踪光线功能。
使用电线将传感器连接到 NyBoard,如下图所示:
具体使用时可以将连接传感器的一端固定在机器人的头部(含在Bittle的嘴中,或者顶在Nybble的头部),当然您也可以根据实际需要发挥您的创意。
如果您想单独测试光强传感器功能,或者想进一步了解其功能实现原理。您可以使用 Arduino IDE 上传示例程序(doubleLight.ino),如下图所示:
RGB超声波传感器是一款将RGB灯珠和超声波测距模块集成在一起的全新模块。它只需要一个GPIO即可操作超声波收发,另一个GPIO用来调节彩灯颜色。在超声波探头测距的同时,左右探头可以发出7彩炫彩灯光。
之前采用的硬件版本如下:
使用电线连接到 NyBoard,如下图所示:
之前采用的硬件版本如下:
目前只支持产品Nybble,软件版本2.0,模式可选择“超声波”或“随机_超声波”。
请使用最新的 OpenCat 代码完成设置后并上传程序,如下图所示:
如果你已经上传了最新的 OpenCat 程序可以让 Nybble 行走,你只需要删除 OpenCat.ino 中 #define ULTRASONIC
前面的代码注释符号(//), 如上图所示,然后上传程序即可。
超声波模块程序实现功能:根据超声波模块实时监测到的不同距离,超声波模块内部探头亮不同颜色的灯光,Nybble同时会做出不同的动作反应。
功能演示视频如下:
介绍各种扩展模块
Bittle 的嘴部被设计成一个夹子,可以用来固定可扩展的模块。 我们用一些流行的模块编译了一个传感器包,它的内容将来可能会发生一些变化。 基于 Arduino 和 Raspberry Pi 社区的丰富内容,您还可以连接其他附加组件。
您可以在我们的 GitHub 代码仓库中找到这些模块的演示代码。 如果您下载整个 OpenCat 代码仓,它们应该位于 文件夹中。
您也可以选购以下第三方传感器(比如矽递):
手势传感器、OLED显示屏和智能摄像头模块应连接到Grove 插座上的 I2C 端口。
序号 | 模块及功能 |
---|---|
目前支持的技能动作命令请参考代码文件 actions.h(在中)。
您可以使用 Petoi 桌面应用程序中的完成配置并上传主功能程序。如下图所示:
您也可以使用 自由地上传程序和修改代码。
下载 并将其安装到您的 Arduino IDE 中。
如果您不确定,您需要按照上传一遍程序以确保一切配置正确,然后再按照上述步骤上传程序。
如果摄像头模块程序正确上传,Bittle基本保持蹲坐姿势,您可以在 Arduino IDE 的中看到相关打印信息(如下图所示)。 当 MU 视觉传感器识别到目标时,两个 LED 将变为蓝色,Bittle 头部可以追随目标左右摆动。如果未能找到任何目标对象,演示代码将自动在黄色网球和人体之间切换目标。
更多细节,可以参考。
项目代码中目前已经集成了使用此传感器的代码,将 OpenCat.ino 中的#define DOUBLE_LIGHT
行取消注释,如下图所示, 然后使用 将程序上传到机器人主板,可以复现整合了机器人动作的示例功能。
示例程序(doubleLight.ino)实现了在中实时打印出A2, A3两个模拟引脚输出的模拟值,您也可以通过使用串口绘图器更加直观地查看A2, A3两个模拟引脚输出的模拟值沿时间轴生成的波形图。
具体使用时,将超声波传感器。
您可以使用 Petoi 桌面应用程序中的完成配置并上传主功能程序。如下图所示:
您也可以使用 自由地上传程序和修改代码。
如果您不确定,您需要按照上传一遍程序以确保一切配置正确,然后再按照上述步骤上传程序。
如果超声波模块程序正确上传,您可以在 Arduino IDE 的中看到相关打印信息,如下图所示:
项目代码中目前已经集成了使用此传感器的代码,将 OpenCat.ino 中的#define DOUBLE_TOUCH
行取消注释,如下图所示, 然后使用 将程序上传到机器人主板,可以复现整合了机器人动作的示例功能。
如果您想单独测试触摸传感器功能,或者想进一步了解其功能实现原理。您可以使用 上传示例程序(doubleTouch.ino),如下图所示:
示例程序代码(doubleTouch.ino)实现了在中实时打印出D6, D7两个引脚的检测值:
(Bittle X中默认内置)
(适用于狸宝)
响度传感器和亮度传感器模块可以为相应的模拟信号生成,应连接到 Grove 插座上的模拟端口。
触摸传感器、反射式光电传感器、PIR 传感器可以生成数字 1 或 0 作为开关信号。 所以它们应该连接到Grove 插座上的数字端口。 在中,我们使用标有 D6 和 D7 的数字端口连接传感器。
处理器
ESP32-U4WDH
SRAM
520KB
ROM
448KB
Flash
4MB
外置 EEPROM
可自定义
输入电压
7-9V
工作电压
5V
工作电流
0.1-0.2A
串口波特率
115200
蓝牙协议
4.2BR/EDR和低功耗蓝牙标准
WIFI协议
802.11b/g/n
板载Grove扩展接口
UART2, I2C, 4 x 模拟输入
树莓派通信接口
支持树莓派3A+, 4, 5 (需要焊接5-Pin引脚座)
1
可编程LED 【1】
2
DC-DC降压芯片
3
12路PWM舵机接口 【1】
4
MPU6050陀螺仪
5
双语离线语音识别模块
6
外置EEPROM芯片 【2】
7
可扩展Grove接口 (G1: UART2; G2: I2C;G3: 2x模拟输入;G4: 2x模拟输入)
8
喇叭
9
2.54MM电池接口
10
树莓派通信接口
11
ESP32 MINI 1模组
12
CH343P串口芯片
13
BOOT按键 【3】
14
复位按键
15
电池电源指示灯 (黄色LED)
16
5V电源指示灯 (蓝色LED)
17
触摸模块接口
用途
指令
示例
查询蓝牙软件版本
AT+VER
AT+VER
>+VER=JDY-23A-V2.21,Bluetooth V3.0+BLE(版本信息)
查询蓝牙广播名
AT+NAME
AT+NAME
>+NAME=BITTLE
更改蓝牙广播名
AT+NAME(名字)
AT+NAMEPiggy
>+OK
AT+NAME
>+NAME=Piggy
查询串口速率
AT+BAUD
AT+BAUD
>+BAUD=8 (8 = 115200, 7=57600)
更改串口速率
AT+BAUD
AT+BAUD7
>+OK (需要调整串口监视器至57600)
AT+BAUD
>+BAUD=7
1
DTR
串口Modem信号,用于下载完成后复位Nyboard
2
RX
ATMEGA328P的串口RX(接收)信号
3
TX
ATMEGA328P的串口TX(发送)信号
4
5V
板载5V供电电路,为MCU和芯片供电
5
GND
地线
6
GND
地线
参数名称
含义
选择参数
Builtin Led
LED引脚
2
Upload Speed
上传程序速率
921600(115200会比较慢)
CPU Frequency
处理器频率,越高越强
160MHz
Flash Size
闪存空间及分区
4MB即可(单独解释OTA)
Reset Method
复位方法
DTR复位
lwIP variant
轻量IP协议栈选择
V2 Lower memory
Erase Flash
擦除flash的方法
Only sketch(只擦程序区)
Arduino Boot Loader
Sketch(程序区)
EEPROM
1KB
31KB
1KB
ESP Boot loader
Program-A
Program-B
Data area(File system)
In SoC Flash
1019KB
1019KB
2MB
请参照英文版说明:Voice Command Module
Grove Vision AI V2 基于 Arm Cortex-M55 和 Ethos-U55 嵌入式视觉模块。Ethos-U55 具有 64 至 512 GOP/s 的算术能力,可满足日益增长的将机器学习模型下载到边缘进行推理的需求。将Grove Vision AI V2与Petoi机器狗进行协同工作,实现无比强大的人工智能机器人系统。
本章分为三个小节,第一小节为模型训练,讲解如何在本地电脑或者在云端进行模型训练,以及数据集的制作。另外,我们实现了COCO数据集的DIY训练功能,您可以选择任意数量感兴趣的标签来进行模型训练。
第二小节为模型量化,通过模型量化,可以降低模型计算复杂度,更易于在嵌入式系统中进行部署。同样的,我们考虑了本地和云端训练模型两种方式的不同,这两种方式得到的模型都可以进行模型量化。
第三节为模型部署,讲解了如何将模型下载到Grove Vision AI V2上并且实现其与机器狗之间的通信,这样我们就完成了从模型训练到模型部署整个流程的学习。
相信通过本章的细致讲解,您一定可以学会如何在我们的机器狗上部署您喜爱的模型,并为其强大的功能所惊叹。
Grove Vision V2是一款基于 MCU 的视觉 AI 模块,由 Arm Cortex-M55 和 Ethos-U55 提供支持。它支持 TensorFlow 和 PyTorch 框架,并与 Arduino IDE 兼容。借助 SenseCraft AI 算法平台,无需编码即可将训练好的 ML 模型部署到传感器。它具有标准 CSI 接口、板载数字麦克风和 SD 卡插槽,非常适合各种嵌入式 AI 视觉项目。
强大的 AI 处理能力:采用 WiseEye2 HX6538 处理器,配备双核 Arm Cortex-M55 和集成 Arm Ethos-U55 神经网络单元。
多功能 AI 模型支持:轻松部署 SenseCraft AI 的现成或自定义 AI 模型,包括 Mobilenet V1、V2、Efficientnet-lite、Yolo v5 和 v8。支持 TensorFlow 和 PyTorch 框架。
丰富的外设:包括PDM麦克风、SD卡槽、Type-C、Grove接口等外设。
高兼容性:兼容XIAO系列、Arduino、Raspberry Pi、ESP32开发板,方便进一步开发。
完全开源:所有代码、设计文件和原理图均可修改和使用。
【配模块带外壳图片】
【配硬件接线图,及端口接线示意图】
具体使用时将连接摄像头的一端固定在机器人的头部(比如含在Bittle的嘴中)。
您需要引入相关库并执行以下操作。 从 GitHub 存储库下载最新版本的 Seeed_Arduino_SSCMA 库及ArduinoJSON库。 通过选择 Sketch > Include Library > Add .ZIP Library 并选择下载的文件,将该库添加到 Arduino IDE 中。 或者您可以在Arduino IDE的库管理栏目中直接搜索并安装最新版的Seeed_Arduino_SSCMA,ArduinoJSON库文件。如下图所示:
在camera.h 中注释此宏定义
并取消注释下行宏定义
如下图所示:
将程序上传到机器人主板BiBoard中
【配示例功能演示视频】
下面是一个Seeed_Arduino_SSCMA库中的示例程序(inference.ino),您可以将其上传到机器人主板BiBoard中,测试Grove Vision AI V2 的功能是否正常。您也可以参考该函数将模型输出结果用于其他功能:
效果如图:
该传感器具有先进的手势检测、接近检测和数字环境光感应功能。手势检测能准确地感应“上下左右 ”以及更复杂的动作。
使用 Arduino IDE 安装最新版的Arduino_APDS9960库,如下图所示:
OpenCat 项目代码中目前已经集成了使用此传感器的代码,将OpenCat.ino 中的#define GESTURE
行取消注释,如下图所示, 然后使用 Arduino IDE 将程序上传到机器人主板,可以复现整合了机器人动作的示例功能。
如果您想单独测试手势传感器功能,或者想进一步了解其功能实现原理。您可以使用 Arduino IDE 上传示例程序(gesture.ino),如下图所示:
程序上传完成后,使用电线连接到 NyBoard,如下图所示:
具体使用时可以将连接传感器的一端固定在机器人的头部(含在Bittle的嘴中,或者顶在Nybble的头部),当然您也可以根据实际需要发挥您的创意。
示例程序(gesture.ino)实现功能:在串口监视器中实时打印出用户在手势传感器前面做出的各种方向手势动作(上下左右)。
该传感器允许您检测动物的运动,通常是用于检测在其检测范围内人体的运动。 只需将其连接到 NyBoard 并对其进行编程,当任何人在其检测范围内移动时,传感器将在其 SIG 引脚上输出高电位。
使用电线连接到 NyBoard,如下图所示:
具体使用时可以将连接传感器的一端固定在机器人的头部(含在Bittle的嘴中,或者顶在Nybble的头部),当然您也可以根据实际需要发挥您的创意。
OpenCat 项目代码中目前已经集成了使用此传感器的代码,将OpenCat.ino 中的#define PIR
行取消注释,如下图所示, 然后使用 Arduino IDE 将程序上传到机器人主板,可以复现整合了机器人动作的示例功能。
如果您想单独测试人体移动探测器功能,或者想进一步了解其功能实现原理。您可以使用 Arduino IDE 上传示例程序(test_Touch_Reflection_PIR.ino),如下图所示:
示例程序(test_Touch_Reflection_PIR.ino)实现了在串口监视器中实时打印出传感器的检测结果——当任何人在其检测范围内移动时,打印 1 ;否则打印 0 。
示例代码在GitHub网站OpenCat 代码仓库中(具体路径:OpenCat/ModuleTests/test_Touch_Reflection_PIR),您可以访问我们的GitHub代码仓库https://github.com/PetoiCamp/OpenCat下载完整代码,如下图所示:
通过深度学习网络可以从大量数据中学习数据特征,从而应用于各种检测,分割任务。想要使用深度学习解决具体问题,必须了解如何通过已知数据进行网络模型的训练。因此我们首先讲解了如何训练深度学习神经网络。本节的内容如下:
在本地进行模型训练
在云端进行模型训练
制作自己的训练集
本小节介绍如何在个人PC上进行模型训练,您需要拥有以下硬件:
一台带有英伟达显卡的笔记本或台式机,安装Windows系统(如果您的电脑并不含有英伟达显卡,那么我们建议您使用云端进行模型训练。)
请安装Anaconda软件用来管理您的python环境。Anaconda有Windows,Max,Linux三个版本可以选择,请根据您的系统选择对应的版本。
安装VScode作为您的代码编辑软件。
使用anaconda创建我们训练模型要使用的环境:
下面打开Anaconda Propmt
输入以下命令,进入工作命令,激活环境,打开vscode(注意,将工作目录和环境名称替换成你自己的相应的名称)。
在Terminal里输入以下命令:
完成后输入
pip uninstall torch torchvision
卸载后安装GPU适用的torch版本
安装前请查看您显卡所安装的cuda驱动,安装对应cuda版本的pytorch及torchvision。例如,我的cuda版本高于12.1,所以我安装
这时你已经完成了模型训练所需的所有环境配置,下面就可以愉快的训练模型了😊。
训练模型需要执行以下命令:
其中,model为你所需要训练的模型路径,目前的Grove Vision V2只支持yolov8n.pt的部署,所以请选择yolov8n.pt。
data为模型训练所需训练集的路径,在这里我们使用一个很小的数据集作为测试,在本节的后面会讲解如何创建训练集进行训练。另外我们实现了coco数据集的自定义部分标签训练,您可以按照自己的喜好以及用途选择特定标签进行训练,实现更灵活的推理功能。
imgsz为模型输入接受的图像大小,这里必须为192
epochs为训练的次数,一般来说,训练次数越多,模型与数据拟合程度越好。
训练结束后,您可以在命令行显示的模型保存的位置找到您训练后的模型(例如我的模型保存在runs\detect\train3)
如果您的电脑不带有英伟达显卡,那么很可惜您无法在本地进行模型训练,不过您可以在云端进行模型训练,两种训练方法得到的模型效果是相同的。
我们使用ultralytics进行云端模型训练。以下是 Ultralytics HUB 的链接,打开链接,你就可以看到它的介绍和使用教程。
要使用 Ultralytics HUB,你需要一个 github 账户或谷歌账户或苹果账户。
ultralytics hub支持训练用户自己的数据集,如何制作并上传数据集请查看之后章节。
设置高级模型配置(Advanced Model Configuration),如果以后使用 Google Colab 进行模型训练,建议将 Epochs 改为 30,因为虽然 Google Colab 是免费的,但使用有时间限制,30 次训练约为 2 小时,正好在时间限制范围内。如果要在 Grove Vision V2 模块上部署模型,还需要将图像大小改为 192,这更符合我们的实际应用场景。
此外,使用 Google Colab 还需要 Google 邮箱。
如果您想要对开源数据集之外的标签进行检测,那么您需要自己制作数据集。数据集应该包括图像和对应标签。
下面是yolov8指定的数据集格式
我们使用Make Sense在线数据标注工具来完成训练集制作过程:
有关如何使用Make Sense,可以参考:
当您完成了数据集标签的标注,您需要将图像和标签数据合并起来,构成一个完整的数据集。
数据集需要满足以下格式:
您需要把Make Sense生成的标签数据拷贝到相应的位置。比如您标记了用于训练的标签数据,那么训练所需的图像应该位于images/train,而标签数据应该位于labels/train。另外您需要编写一个dataset.yaml文件。该文件需要放在dataset目录下,文件内容为:
(!注意:dataset.yaml命名要与文件夹命名相一致,否则数据集上传到ultralytics时会遇到问题)
names需要和Make Sense标注时的标签相对应。
如果您在本地进行训练,建议您将train,val,test的路径修改为绝对路径,而在云端训练则不需要。
到此步骤您已经可以使用制作好的数据集进行模型训练了,只需要将
中的“data=coco128.yaml”路径改为您制作的数据集中dataset.yaml即可。
如果您在云端进行训练,那么您需要将数据集上传到ultralytics hub上,上传过程非常简单:
这样Ultralytics HUB中就存有了您的数据集,您此时便可以使用您自己的数据集进行模型训练。
在上一节的最后,我们已经得到了能够部署在Grove Vision V2上的模型。这一节我们要学习如何将模型上载到硬件上,并且完成与机器狗的通信。
Grove Vision AI V2可以通过在线网站进行部署,网站本身就有很丰富的模型资源供您选择,所以除了自己训练模型外也可以直接使用网站上的模型。
在该页面顶部,您将看到三个栏目,标题分别为: AI 模型、设备工作区、关于 SenseCraft AI。点击设备工作区,选择 Grove - Vision AI V2。
在 "模型 "区域,您可以选择 SenseCraft AI 提供的模型,也可以上传您自己训练的模型。
上传模型需要一点时间,因此您需要耐心等待。
在预览部分,您可以实时观察摄像机推理后的输出结果,例如,下载宠物检测功能后,Grove Vision AI V2 成功检测到猫。
在 "设备记录器 "部分,设备向计算机发送实时检测数据,在 "方框 "部分的数据为
您可以使用 Arduino IDE 修改我们的开放源代码程序,以使用 Grove Vision AI V2。我们的程序将目标跟踪与 Grove Vision AI V2 集成在一起。您只需修改代码即可启用该功能。
此外,您还可以使用与 SSCMA 库相关的 API 开发更丰富的功能。
在“模型训练”章节,讲解了如何训练一个yolov8模型,但是为了部署在Grove Vision V2上,我们还需要进一步对模型进行量化。本节内容如下:
模型INT8量化
模型图优化
首先,我们要得到pt模型文件,在“模型训练”中,我讲解了可以通过本地训练和云端训练两种方式得到经过训练后的pt模型文件。
利用anaconda新建一个环境(例如可以命令为petoi_convert_local),在新环境中依次执行:
(!注意:我们在模型训练章节的本地训练部分使用anaconda新建了petoi_train_local环境,而本节使用的petoi_convert_local环境和petoi_train_local环境是两个不同的环境,不可使用petoi_train_local进行以下操作。)
下面,我们需要对模型进行量化,执行:
你将会在当前文件夹下看到一个 yolov8n_saved_model
文件夹,其中包含 yolov8n_full_integer_quant.tflite
模型文件。
下面进行图优化。如果您是windows电脑,您需要安装 Microsoft C++ Build Tools。如果您是Mac用户或者Linux用户,则不需要安装。
执行
创建vela_config.ini,将以下内容复制到vela_config.ini
在终端执行
将${Save path of the optimized model}替换为你想要的输出目录
将${The path of the tflite model that needs to be optimized}替换为你刚才得到的经过量化后的模型文件
然后你就会得到以“_vela”结尾的模型,这个模型是可以用于部署在Grove Vision V2上的模型文件。
配备机械臂的Bittle R具有更多功能。它可以执行更复杂的技能,例如抓取物体进行展示或将物体搬运到不同的地方。
当机器臂运动时,请不要将手指放在机器爪中,以免被夹伤。
机械臂组件已经完全组装好了。您只需使用两个M25自攻螺钉将颈部舵机安装在机械臂上的舵机安装槽中即可。如下图所示:
机器人上电后,有两种方法可以进入校准状态:
界面中浅黄色背景区域的舵机滑块不可用。
点击相应的滑块轨道,结合校准姿态来校准机器人的各关节舵机,如下图所示:
机械爪对应的关节序号是2。按下“自动”按钮可以自动校准机械爪。您也可以手动点击对应的滑块轨道,将舵机输出轴上的齿轮调整到上图所示的位置。
"捡起来"
"放下"
"捕猎"
"展示"
"收起来"
"左抛"
"发射"
"鼓掌"
"前抛"
语音指令录入完成后,使用语音指令“结束学习”,关闭自定义语音指令模式。
源代码也需要做相应地修改。示例演示代码正在编写中,敬请期待!
这是一个基于micro:bit的游戏手柄。它包括一个摇杆和四个未定义的按钮。为了增强游戏体验,它还配有一个蜂鸣器和振动电机。它外观小巧,手感舒适,可以用来远程控制Petoi机器人。
micro:bit V1 主板内存较小。因此,下载完整的操控功能程序到micro:bit主板,需要使用micro:bit V2 主板。
您可以下载用于控制Bittle R(带机械臂)的程序文件:
我们建议您使用Chrome浏览器。
使用USB线连接PC和micro:bit V2。
连接成功后,电脑上会识别出一个名为MICROBIT
的盘符。
在弹出窗口选择BBC micro:bit CMSIS-DAP
,然后单击“连接”按钮,至此,我们的micro:bit就已经连接成功。
点击下载程序按钮。
将最新的固件上传到机器人(主板类型:BiBoard)
长按电池上的按钮3秒,开启机器人电源。机器人启动后,自动连接到控制器。如果有多个遥控器和多个机器人,重复执行步骤2,3。连接规则是一对一,先到先得,已完成配对的机器人不会再次与新上电的手柄配对。
只操控手柄左侧的摇杆,可以让机器人向不同的方向运动。
micro:bit主板上的A键,可以通过microbit自带的陀螺仪控制机械臂,操控方法是:在按下A键的同时前后左右倾斜手柄即可控制机械臂运动。
micro:bit主板上的B键,功能是抛射物体。操控方法是:先按下B键不要松开,再推动手柄左侧的摇杆,可以向不同的方向抛出物体。
手柄右侧的 “捡起”,“放下”,“机械臂及身体角度”按钮都是组合操控按钮,需要结合左侧的摇杆一起操控。操控方法与micro:bit主板上的B键类似。比如,需要捡起物体时,先按下“捡起”按钮不要松开,再推动手柄左侧的摇杆,可以捡起机械爪周围不同方向的物体。
手柄右侧下方的“开合爪子”按钮,按下机械爪打开,松开机械爪闭合。可以结合“机械臂及身体角度”按钮操控功能一起使用,可以抓放身体周围不同方位的物体。
本节介绍如何利用Petoi提供的脚本工具,提取COCO数据集部分标签及数据进行训练。
下面是对COCO数据集的简要介绍:
COCO数据集总体约20G,整个数据集数据量大,标签多,能够做到对多达80个标签进行检测,但是相应的,检测的准确度有所下降,为了满足用户在不同场景下对模型识别种类和识别精度的取舍权衡,Petoi实现了对COCO数据集中任意数量的标签进行数据集重新制作。
下面将讲解如何制作属于您自己的COCO数据集。
将下列代码复制为复制为coco_download.py,脚本位于COCO数据集的目标位父目录。
执行:
python .\coco_download.py
如果您在下载的过程中发现由于网络不稳定或者其他原因没有办法完整下载COCO数据集,那么请手动下载COCO数据集并将压缩包解压到相应位置。
保证最后的数据集格式为:
使用下面的脚本对COCO数据集进行提取,可以命名为coco_remake.py
脚本运行前请将src_coco_path修改为COCO2017的路径,将dst_coco_path修改为DIY_COCO数据集的路径。将src_yaml_file修改为COCO2017官方YAML文件的路径,将dst_yaml_file修改为DIY_COCO的YAML文件路径。如果您的数据集是手动下载的,您还需要手动下载COCO.yaml。下载链接如下:
您可以将DIY_COCO的YAML文件写成如下样式,其中标签需要选取COCO数据集里本来就存在的标签。但是标签的顺序不必与COCO数据集相同,只需要从0开始计数即可。
该YAML文件包括了train和val两个目录的路径以及标签顺序和对应标签。对于本地训练,请使用绝对路径。对于云端训练,需要将该YAML文件修改为如下格式:
并且,在云端训练时,一定要遵从下面这种数据集的组织形式:
再结合模型训练部分的步骤,您就可以训练出属于您自己的基于COCO部分数据集的模型啦!
授之以鱼,不如授之以渔。
最简单的创作新技能并生成技能数组的方法是使用。 关闭电源并重新启动后新技能仍可以保留,但是,通过技能编辑器导出的技能只是暂时地存储在EEPROM中,会被后来导出的新技能覆盖,所以您无法在一个程序中方便地调用两个新技能。 本章重点说明 OpenCat 技能相关的代码和数据结构,以便您可以将任意数量的新技能集成到源代码中。
熟悉上传程序固件(参考/用户手册第3章),组装流程(参考/用户手册第4章),校准舵机(参考/用户手册第6章)。 使用红外遥控器验证以下函数是否按预期工作。
按下第 2 行第 2 列的按钮(如下图所示)。 稍后我们将使用 (2, 2) 作为索引。 您也可以连接USB适配器,通过输入串口命令 kbalance
。 机器人站立起来。
按下第 7 行第 3 列的按钮(如下图所示)。 稍后我们将使用 (7, 3) 作为索引。 您也可以连接USB适配器,通过输入串口命令 kzero
。 机器人所有舵机都转动到0度位置,这是程序中的“零”技能(如下图所示)。
机器人的所有技能数组定义在Instinct***.h
文件中。
Nybble: InstinctNybble.h
Bittle: InstinctBittle.h
以下是一个Instinct***.h
文件的缩略示例:
技能数组的数据结构含义如下图所示:
技能数组中第2个元素和第3个元素表示身体方向期望值,即机器人在执行技能动作时身体保持的倾斜角度,分别对应身体的横滚角(Roll)和俯仰角(Pitch)。当机器人在执行技能动作时,如果身体倾斜度偏离了期望值,平衡算法将对相关腿部舵机的角度值做一些调整,以使身体倾斜度尽量保持在期望值附近。
上图所示机器人的俯仰角(Pitch),横滚角(Roll)都处于0度位置。左图中,机器人身体从0度位置绕中心点逆时针旋转,俯仰角为正值;顺时针旋转,俯仰角为负值。右图中,机器人身体从0度位置绕中心点逆时针旋转,横滚角为正值;顺时针旋转,横滚角为负值。
请看以下示例代码,站立:
坐:
数组中第 2 个元素和第 3 个元素表示身体方向期望值(对应身体的横滚角和俯仰角),单位是度。
激活陀螺仪后,轻微旋转 Bittle身体,当机身发生倾斜偏离了身体方向期望值时,平衡算法会以使机身尽量保持该姿势。
舵机序号如下图所示:
关节舵机旋转的角度范围请控制在[-125~125]之间,对于腿部舵机,在机器人的左侧观测,腿部从0度位置绕关节中心点(螺钉固定位置)逆时针旋转,角度为正值;顺时针旋转,角度为负值;在机器人的右侧观测,腿部旋转角度与左侧成镜像对称(从0度位置绕关节中心点顺时针旋转,角度为正值;逆时针旋转,角度为负值)。对于机器人颈部舵机,从机器人头顶向下俯视,颈部从0度位置绕关节中心点(螺钉固定位置)逆时针旋转,角度为正值;顺时针旋转,角度为负值。
对于Nybble头部舵机(1号舵机)在机器人的右侧观测,头部从0度位置绕关节中心点(螺钉固定位置)逆时针旋转,角度为正值;顺时针旋转,角度为负值。
对于Nybble尾部舵机(2号舵机)面对尾部向下俯视,尾部从0度位置绕中心点(螺钉固定位置)逆时针旋转,角度为正值;顺时针旋转,角度为负值。
技能数组中的每个动作帧都包含多个舵机的旋转角度值。
上述数据结构示意图中,休息(rest)动作帧中其中包含有16 个关节舵机角度值,对应舵机序号从0开始从小到大依次排列。
向前爬行(crF )中每个动作帧包含 8 个关节舵机角度值,对应舵机序号从8开始从小到大依次排列。
技能数组中第4个元素表示角度比率。当需要存储超出 -128 到 127 范围内的角度值时,可以增大角度比率值。比如将角度比率设置为 2,技能数组中所有关节舵机的角度值乘以2才是舵机的实际旋转角度。
请看以下示例技能数组 rc(四脚朝天后恢复站立):
数组中第 4 个元素(2)表示角度比率。 这意味着所有关节转动的实际角度值都等于数组中每一个关节角度值(从第8个元素开始)乘以此角度比率。
姿势技能数组只包含一个动作帧。以Bittle为例,在InstinctBittle.h
中找到 zero数组:
修改其中一些关节舵机角度值:
保存修改,将主功能程序OpenCat.ino上传到Bittle主板上。上传完成后,点击红外遥控器上的按钮 (7, 3) 即可看到修改过的零技能,新的姿势如下图所示:
数组中第一个元素(1)表示该技能的总帧数,1表示是姿势技能。
数组中第 4 个元素 (1) 表示角度比。 这意味着以下所有索引关节角度都是实际角度(因为它们中的每一个都乘以 1)。
数组中从第 5 到第 20 个元素分别代表 16 个关节在当前帧中各自对应的角度值。
对于 Bittle,数组中第 5 个元素(70,对应舵机序号0)表示 Bittle 颈部的舵机逆时针旋转 70度。 Bittle 的头转向机身左侧。
数组中第 13 个元素(-60,对应舵机序号8)表示 Bittle 的左前大腿围绕关节中心点顺时针旋转 60度。
数组中第 17 个元素(60,对应舵机序号12)表示 Bittle 的左前小腿绕关节中心点逆时针旋转 60度。
其他关节角度保持 0度不变。
步态技能数组包含多个连贯的动作帧,而且这些动作帧按照顺序循环不断重复执行,除非机器人收到新的技能命令,才会停止执行。例如后退(bk)步态技能数组定义如下所示:
数组中第一个元素 (35) 表示此技能有 35 个动作帧。 从第二行数据开始,每行是一个动作帧,其中包含了8 个关节舵机的角度值,对应舵机序号从8开始从小到大依次排列(共 35 行)。
对于步态技能,未来每个动作帧可能包含 12 个关节舵机角度值,对应舵机序号将从4开始从小到大依次排列,这取决于参与运动的腿部舵机数量。
行为技能数组同样包含了多个连贯的动作帧,而且所有动作帧按照顺序只执行一轮,但其中一部分连续动作帧可以循环执行多次。例如俯卧撑(pu)行为技能数组定义如下所示:
此数据结构包含了比姿势和步态更多的信息:
第1行的4个元素含义如前所述,其中第一个元素(总帧数)为负数,表明此技能是一个行为。
第2行的3个元素表示这个行为中包含的循环结构:开始帧,结束帧,循环次数。
示例中的 6, 7, 3 表示这个行为从第 7 帧到第 8 帧循环执行 3 次(帧序号从 0 开始)。 整个行为的动作序列只执行一轮,而不会像步态那样不断循环执行。
每个动作帧包含20个元素。前 16 个元素如前所述表示关节舵机的角度,对应舵机序号从0开始从小到大依次排列。后 4 个元素含义分别如下:
第一个表示速度因子。默认的速度因子是 4,它可以更改为从 1(慢)到 127(快)的整数。 单位是每步的度数。 如果设置为 0,舵机将以最大速度(约 0.07 秒/60 度)旋转到目标角度。 除非您了解风险,否则不建议使用大于 10 的值。
第二个表示延迟时间。默认延迟为 0。可设置范围为 0 到 127,单位为 50 毫秒(如设置为2,则实际延迟 100 毫秒)。
第三个表示触发轴。用来设置机器人触发下一帧动作时的身体旋转方向,有以下5个设置选项
0 表示无触发轴,解发角条件设置
1 表示正俯仰,机器人身体向前俯下方向旋转
-1 表示负俯仰,机器人身体向后仰起方向旋转
2 表示正横滚,机器人身体向自身左侧翻滚
-2 表示负横滚,机器人身体向自身右侧翻滚
注意:
触发轴与触发角度需搭配使用:只有当机器人在完成此帧动作后,并按照设置的身体旋转方向旋转越过触发角度时,才会触发下一帧动作。如果触发轴设置为0时,触发角度大小则无意义。所以触发轴设置为0时,触发角度一般也随之设置为0。
如果动作帧中还设置了延迟时间,那么机器人在运行此动作帧时,不但要满足触发轴,触发角设置的触发条件,还要达到延时设置时长,才会触发执行下一帧动作。
EEPROM 的擦写次数有限(1,000,000次),为了尽量减少写入操作,定义两种技能:本能(Instinct)和 新技(Newbility)。它们的索引地址都作为查找表保存在芯片(ATmega328P)内置的EEPROM(1KB)里,但主体的数据却存在不同的存储单元:
I2C EEPROM (8KB) 存储本能(Instinct) 本能是指固定技能(或偶尔需要微调),可以把它们理解成“肌肉记忆”。
Flash (与Arduino程序代码分享32KB存储空间) 存储新技(Newbility) 新技是指用户自定义技能(可能修改增删)。它们并不会被写入静态的EERPOM,而是与Arduino程序代码一起上传至闪存(Flash)中。它们的索引地址由代码执行时实时分配,只要技能总数(包括所有本能和新技能)不变,该值很少改变。
具体示例代码如下:
在字符指针数组skillNameWithType中给每个技能数组名称加了一个后缀,“N”表示是新技,“I”表示是本能。
const char* progmemPointer[] = {crF, pu, rest, zero, };
这部分代码在上传主板配置程序时处于激活动状态。 它包含所有技能的数据和指针。
const char* progmemPointer[] = {zero};
这部分代码在上传主要功能程序时处于激活状态。 由于本能已经保存在外部I2C EEPROM 中,因此此处省略了它们的数据以节省空间。 如果只是对已有新技能(比如zero
)做动作调整,就无需重新上传主板配置程序了。
在创作或调试技能动作时可以采用以下两种方法:
新增以 I 结尾的新技(testI)数组,需要在示例代码宏判断第1个分支中加入技能数组变量名(test),具体代码修改如下所示:
新增以 N 结尾的新技(testN)数组,需要在示例代码宏判断两个分支中都加入技能数组变量名(test),具体代码修改如下所示:
完成程序代码修改后,请将程序上传到主板上进行验证:
使用Arduino IDE上传主板配置程序后,打开串口监视器,当串口提示以下内容时:
具体使用详情,请参考:
在 中选择 产品型号Bittle R,然后单击固件上传按钮上传带机械臂功能的机器人固件。
机械臂必须经过精细校准,才能使其在执行技能动作时更加精确到位,并防止控制机器爪开合的舵机出现堵转过热问题。 您可以使用 进行校准。
您必须通过USB数据线或无线将主板连接到计算机。然后安装电池,长按电池上的按钮为机器人供电。
当您单击“关节校准”按钮时,它将自动进入校准状态。
点击校准界面中的“校准位”按钮。 BiBoard_V1_*
BiBoard_V0_*
机器人程序默认是工作在语音模式下的。在使用语音指令控制机器臂之前,您需要通过语音指令“开始学习”,开启自定义语音指令模式,然后根据语音提示,按照以下顺序,以调用预定义的技能动作:
您可以使用中的“执行机器臂技能”积木块来执行一些预定义的技能动作。例如:
通过USB type-C数据线或将主板连接到计算机后,您可以在Arduino IDE中使用以下串口命令,调用机械臂机器人的相关技能动作。
您可以使用Petoi桌面应用程序中的为机器臂机器人创建新的技能动作,并将其到手机App,,甚至是中。
该机器臂可以与其他传感器结合使用。安装方法如下图所示。例如添加摄像头模块:
将程序导入编程平台,如下所示:
点击左下角的,选择Connect Device
。
点击。
点击
为遥控器安装2 x 7号 AAA电池,并将micro:bit V2插入遥控器。 然后打开遥控器开关,如下图所示:
技能数组中第1个元素表示技能所包含所有动作帧的总数量,数值前如果有负号(-)表示此技能是一种。
上述数据结构示意图中,休息(rest) 是一种。它只有1个动作帧(1行数据)。
向前爬行(crF) 是一种。 它包含 36 个动作帧(36行数据)。
第四个表示是触发角度。角度值正负含义与相同。 触发角设置范围:-125 ~ 125 之间的整数值。
通过运行Python脚本控制机器人做动作,详情请参考。
使用桌面应用程序中的控制机器人做动作,然后利用“”功能,可以把调试好技能数组内容拷贝,粘贴到在Instinct***.h
文件使用。具体格式请参考。
如果你想创作一个定制的步态,这个 是一个很好的起点。 如果想进行一些反向运动学计算,可以使用以下关键尺寸来构建Bittle模型:
Github中的是OpenCat 机器人可以执行的新技能的集合,可以供您参考,使用。也欢迎您通过向此文件夹发送合并请求来分享您的新技能。
另一个方向是为Bittle建立模型及模拟环境,然后在现实中测试模型。您可以使用Bittle的并设置NVIDIA Omniverse进行模拟训练。
NyBoard:
BiBoard:
输入‘Y’ 或者 ‘n’ 后,所有本能数组将一次性存储在I2C EEPROM里,同时所有技能的索引地址也会被生成并存储在芯片内置的EERPOM里,之后再上传主要功能程序。具体操作流程请参考为NyBoard上传程序中。
验证技能动作时,可以打开,通过串口指令 ‘k’ 口令召唤。比如,ksit
可以Bittle变换到坐的姿势。
通过添加一些(比如手势传感器),可以帮助机器人更好地感知环境甚至做出决策。 通过积累这些自动的行为,并设计决策树最终实现机器人的全自动智能运行!
你来做,我来学。
Demo: https://www.bilibili.com/video/BV16d4y1t7nF/
在本教程中,我们将介绍如何使用 python 语言中的 ailia,来实现OpenCat机器人模仿人类的各种肢体动作。
使用以下命令克隆代码:
请使用python 3.6及以上的版本
建议安装Anaconda3 开发环境,具体安装方法请参考以下链接: https://docs.anaconda.com/anaconda/install/
打开 Anacconda Prompt(Windows),或者 Terminal (Linux / macOS)输入以下命令创建并激活虚拟环境(环境名称为 venv, 也可以自定义为其他名称):
conda create --name venv
conda activate venv
按照指南安装 ailia SDK,它将用于姿势检测。指南中主要包括以下步骤:下载并安装 ailia SDK, 以及安装相关的 python 库文件。
下载 ailia SDK时,需要输入正确的邮箱地址,用来接收下载链接地址和证书文件。
将下载的证书文件(AILIA.lic
)移动到bootstrap.py
文件所在的目录(ailia_sdk/python
)中之后,再按照步骤继续安装 ailia SDK。
将此页面(https://github.com/axinc-ai/ailia-models)中的requirements.txt
下载到bootstrap.py
文件所在的目录,然后再运行以下命令:
使用USB上载器或蓝牙模块连接机器人并上电,电脑端需要连接摄像头设备。
运行以下命令,即可开启姿势模仿程序:
您也可以在OpenCat-Imitation/ 路径下直接用 Shell运行run.sh,它基本上就是给上述指令打了个包。
您可以在 Jetson Nano 上运行这个 demo 来实验一些 GPU 的加速。
Jetson Nano 开发板使用 microSD 卡作为启动设备和主存储。 拥有一张足够快、足够大的卡来满足您的项目非常重要; 最低要求是 32GB UHS-1 卡。由于只有 2GB 物理内存,许多使用 Jetson Nano 2GB 开发人员套件的项目将利用 microSD 卡上的交换空间。 因此,我们建议使用高耐力的 64GB 或更大的 microSD 卡。
请参考使用指南将系统镜像文件(JetPack 4.6)煤录到microSD 卡中,并完成系统初始化。
使用指南(https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-2gb-devkit#write)中的系统镜像文件链接指向是 JetPack 4.6.1, 下载烧录到microSD 卡后,插入Jetson Nano启动时可能无法进行系统初始化。所以我们建议使用稍早的一个版本:JetPack 4.6。
2. 使用网线连接Jetson Nano 开发板与路由器或者其他电脑主机,使其能够正常上网。
连接其他电脑主机联网时,需要将电脑主机中已有的网络连接设为共享状态。还有一些其他联网方法,请参考相关技术文档。
3. 从GitHub 代码仓库克隆或下载姿势模仿程序代码(命令如上所述),并按照指南安装 ailia SDK,具体方法与在电脑主机上运行姿势模仿程序的第3步相同,但是不需要执行语句:pip install -r requirements.txt
4. 使用以下命令安装相关的python库文件
5. 连接摄像头,参考相关指南完成摄像头配置。如果您使用USB 摄像头,请参考相关技术文档完成设置。连接USB上载器,需要使用以下命令 sudo usermod -a -G dialout $USER
增加用户权限。
6. 开启姿势模仿程序请参照在电脑主机上运行姿势模仿程序的第4和第5步。
至此姿势模仿程序就可以在Jetson Nano开发板上正常运行了。您可以参考其他相关技术文档进一步提升程序的性能,比如使opencv支持CUDA加速。
可以使用 Arduino IDE 以 C 风格语言进行编码。
Bittle 可以使用类似 Scratch 的基于 Web 的 IDE Codecraft 来进行编程。您也可以了解一下相关的补充材料:在线帮助 和 课程。
注意: Codecraft只支持OpenCat 1.0,所以你需要上传OpenCat 1.0固件到Bittle主板。
OpenCatWeb - 控制基于 Opencat 架构机器人的 Web 界面
需要挂载树莓派
leukipp 的讨论主题
Code & Robots (Andriod / iOS) 应用程序可以控制一些开源机器人,包括 Bittle。 请查看以下视频以了解支持控制 Bittle 的应用程序配置:
在上传程序时出现的错误如下图所示:
这里的“not in sync”表示您的计算机和机器人之间的连接不良。 有如下只种可能:
您的USB上载器和机器人之间的物理连接错误
您的电脑没有上传器的驱动程序
您在按下上传按钮之前没有选择正确的串口端口号
USB上载器有缺陷。 在这种情况下,您可以向我们 support@petoi.com 请求更换
当然您也可以参考 Arduino技术论坛里的解决方法:
两个校准环节针对的是不同的组件。
由于机器人主板资源有限,我们将程序分为两个阶段:
第一阶段,我们将程序和大量数据上传到板载 EEPROM(硬盘),并使用剩余的编程空间来校准 IMU(这是一种测量身体方向的传感器)。 在 (IMU) 校准期间,电路板应保持水平且未触及。
第二阶段,我们上传标准的功能代码。 对于首次组装配置机器人,我们需要进入(关节)校准状态并将腿部组件安装在正确的方向上。
如果您使用 Arduino IDE 来设置主板,您将明确处理这些阶段。 Petoi Desktop App 可以在后台完成两次程序固件上传。 智能手机应用程序只能与已配置好的主板一起使用。 它的(关节)校准仅用于连接腿部组件进行关节校准。
可以尝试在手机APP中关闭陀螺仪开关,如下图:
可以尝试在手机APP中开启陀螺仪开关,如下图:
您仍然需要使用桌面应用程序,或者智能手机应用程序,或者 Arduino IDE 来微调校准。
我们的主板是专为我们的机器人设计的。 代码可在 GitHub 上免费下载。
您可以使用python脚本控制机器人。 控制脚本可以在您的计算机上运行,并通过有线或无线方式连接到机器人。
机器人通过红外线遥控器、智能手机应用程序或桌面应用程序遵循您的指示做动作。 如果您上传随机模式,它也可以自己执行随机行为。 最重要的是,该程序在 GitHub 上是开源的,您可以参考相关技术文档为机器人创作新的技能动作。
这是由于 python Tk 库与新 MacOS 不兼容。 临时解决办法是:在按下按钮的同时拖动指针。
请查看讨论使用各种工具安装弹簧的论坛帖子。
脚套用于需要更多摩擦力的特殊实验。 常规运行过程中一般不需要它们。 我们最近已将它们从标准套件中移除,您可以将它们作为可选附件订购。
您可以通过电子邮件联系 support@petoi.com, 展示碎片的图片并解释它们是如何破碎的。 您也可以在我们的GitHub网站上找到相应的3D 打印文件或直接从我们这里获得替换件。
请参考Bittle说明书总装章节中的头部安装。
Bittle 组装套件和预组装版 Bittle 都包含一个带内置充电电路的锂电池。 您可以添加更多备用电池。
您可以在主板上焊接附带的 2x5 插座,并将 Rasberry Pi 通过插座插在主板上。
更多详情请参考https://docs.petoi.com/v/chinese/api/tong-guo-shu-mei-pai-kong-zhi-ji-qi-ren
Bittle 可以使用类似 Scratch 并基于 Web 技术的 集成开发环境 Codecraft 进行编程。 您可以参考一些补充材料:在线帮助和课程。 请注意,CodeCraft 尚未为我们的 2.0 版本提供支持。 但是您可以在 CodeCraft 中或通过我们的桌面应用程序回滚到受支持的版本。 您无需购买附加组件即可使用 Codecraft 中的基本功能。 但是,一些扩展功能需要附加组件。 如果您习惯于使用 Arduino 进行编码,您可以选择更多的第三方组件。
您可以使用Arduino IDE配置NyBoard并为之上传程序。
以下视频展示了如何使用Arduino IDE 对 Bittle 进行配置。 这些步骤与 Nybble 相同,您只需要将 OpenCat.h 中的产品定义更改为 Nybble。
在 NyBoard 上找到主板的版本信息。如下图所示:
相应的规格文档:NyBoard V0_1、NyBoard V0_2、NyBoard V1_0 或 NyBoard V1_1(轻度修订)。
相应的规格文档:NyBoard V1_0 或 NyBoard V1_1。
以 NyBoard V1_0 为例,如下图所示:
错误的操作可能会损坏您的 NyBoard!
滑动开关用于选择Nyboard上板载I2C设备(陀螺仪/I2C PWM控制器以及EEPROM)的连接属性。
当开关位于“Arduino”端的时候,这些I2C设备将同ATMega328P通信,Arduino可以访问这些设备
当开关位于“Pi”端的时候,这些I2C设备将断开和ATMega328P的连接,主板上的 树莓派接口 和 Grove I2C 接口上的设备将成为主设备。
有时,如果您无法启动,则可能是您不小心将开关拨到了“Pi”端。
以下部分保留用于 NyBoard 旧版本 (V0系统):
从NyBoard V0_2开始,我们在板上添加了一个跳线帽选择开关,可以绕过降压芯片电路直接给舵机供电。如果您使用的是Nybble套件中的金属齿舵机,可以跳过这一小节。
高电压可以提升舵机的转矩,使Nybbles运动更迅速。代价是它同时会增大电流、缩短电池寿命,降低电路的稳定性,以及加速舵机的磨损。据我们测试,5.5V的电压可以得到一个比较平衡的性能表现。
在最初组装时,先不要把NyBoard的螺丝拧紧,因为可能还要调节电位器。在微调校准之前 ,确保所有舵机可以在当前电压设置下正常、稳定地转动。
在设计NyBoard时我考虑了两种使用场景:作为Nybble配套的驱动板,和DIY用户的开发板。
板载的降压电路可在5~8V输出之间调节,峰值电流不能超过5A。Nybble套件中的金属齿舵机可以承受高压,功率大,通过NyBoard的降压电路会有过载保护的问题,最好由电池直接供电。而DIY用户往往选用更便宜的塑料齿舵机,但它们不能承受高压,必须降压到5.5V左右才能使用。好在塑料齿舵机的工作电流更低,也不会触发降压电路的过载保护了。
所以如果使用的是配套的金属齿舵机,推荐直接由电池供电。对于初版NyBoard_V0_1,这需要一些焊接工作,可见论坛帖子。对于更新NyBoard_V0_2,可以更方便地把跳线帽SW3接在BATT和V_S之间(出厂时SW3默认接在V_S和V+之间,以免烧坏塑料齿舵机)。
V_S 表示舵机供电。跳线帽可以选择到底是由降压电路(V+)还是电池组(BATT)供电,所以BATT和V+永远不应该短接。
事实证明,当直接使用 BATT 而不是 V+ 为金属齿舵机供电时,NyBoard 的工作更稳定。 但是,如果您使用 NyBoard 驱动您自己的塑料齿轮伺服系统,则需要使用降压电路。
NyBoard用7.2V电池直接为金属舵机供电,电池充满电时为8.4V。您不能使用NyBoard直接驱动自己的塑料舵机(比如SG系列)。
您将需要配置Arduino集成开发环境,且最好是最新的版本,旧版本往往会编译出可能超出内存限制十六进制文件。Arduino的版本更新不会覆盖掉您之前的库和工程。
如果您先前已添加其他库并看到错误消息``XXX库已安装'',我建议您先删除它们。
由于Arduino IDE安装的配置不同,如果您在以后的编译过程中看到有关缺少库的任何错误消息,只需用baidu他们(google也可以)并将其安装到IDE中即可。
如果您在 2022 年 1 月 3 日之后从 GitHub 下载了最新的 OpenCat 代码,则可以跳过以下库安装步骤。
在Arduino的库管理器(操作指南 : https://www.arduino.cc/en/Guide/Libraries)中,搜素并安装以下的库:
Adafruit PWM Servo Driver
QList(非必须)
IRremote
IRremote库在近期有更新,甚至更改了按键的编码。你可以安装2.6.1版本实现对我们代码的兼容。
为节省编程空间,你可以禁用IRremote.h中没用到的解码器,这样可以省出10%的flash空间!
在Mac上,找到Documents/Arduino/libraries/IRremote/src/IRremote.h,并把没用到的解码器置0:
使用被广泛使用的I2Cdev库和MPU6050库,传送门:jrowberg/i2cdevlib: I2C device library collection for AVR/Arduino or other C++-based MCUs
我相信你们的git用的很好,下载下来就OK。无论是用git clone或者download zip。注意选一下是Arduino下的,主要要红色箭头指示的2个库,I2Cdev是负责I2C通信的;MPU6050是启用DMP(数字融合处理器,做姿态解算的),当然也可以全部下载下来。
在IDE里点击:项目 -> 加载库 -> 添加.zip库,把刚刚下的ZIP直接导入即可
服务到位给您下载好了:
对于V1版本的Nyboard (NyBoard V1_*) 完全兼容UNO,选UNO即可。
以下部分适用于旧版本 (V0)
如果你手上的是NyBoard V0_*,因为它超频到了20MHz,你需要按下列步骤添加配置文件:
感谢A-Ron对这一节的贡献!
打开Arduino首选项面板。
在附加开发板管理器网址处,添加: https://raw.githubusercontent.com/PetoiCamp/OpenCat/main/Resources/NyBoard/boardManager/package_petoi_nyboard_index.json。如果里面已经有其他网址了,可以用逗号或者换行来分隔它们。
点击“好”关闭首选项面板(需要先关闭之前的网址编辑器)。
从工具 -> 开发板: XXXX -> 开发板管理器... 打开 开发板管理器。
搜索“nyboard”。
安装NyBoard。
关闭开发板管理器。
从 工具 -> 开发板 选择 开发板 ATmega328P (5V, 20 MHz) NyBoard XXXX (NyBoardV0_1 和 NyBoardV0_2 选用同样的开发板)。
只有当以上方法无效时使用!
找到开发板配置文件 boards.txt
苹果系统:
/Users/UserName/Library/Arduino15/packages/arduino/hardware/avr/version#/
或
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr
右键点击Arduino.app图标显示程序包内容。
Windows系统:
C:\Program Files(x86)\Arduino\hardware\arduino\avr\
通过Microsoft商店安装的程序可能会安装在隐藏目录,可以直接从Arduino官网下载IDE并手动选择安装位置。
Linux
从终端命令行下载到的也许不是最新版本,可以从Arduino官网下载IDE然后解压安装:
sudo install.sh
boards.txt 的位置可能随Linux版本有不同:
Fedora:
/etc
Arch:
/usr/share/arduino/hardware/archlinix-arduino/avr/
Mint:
location_of_installation/arduino/hardware/arduino/avr
Ubuntu (on 18.04 when installing with `apt-get install arduino`):
/usr/share/arduino/hardware/arduino/boards.txt
找到 boards.txt 后:
备份 boards.txt 便于回滚操作
新建一份 boards.txt
您可以下载我修改后的boards.txt,或者自行修改您原来的boards.txt,可能需要管理员权限。
用文本编辑器打开boards.txt,找到pro.name=Arduino Pro or Pro Mini
的代码段,插入
如下图:
保存并退出编辑器。
下载 ATmega328_20MHz.hex 并保存到Arduino文件夹 ./bootloaders/atmega/。 在该文件夹中应该还有其他开发板的后缀为.Hex的文件。
重启Arduino IDE。在工具->开发板中,选择Arduino Pro or Pro Mini。在子目录里会出现 ATmega328P (5V, 20 MHz) NyBoard。
如果完成以上操作后仍找不到NyBoard,可能是您的Arduino IDE的有效配置文件存在其他位置。在电脑的所有位置搜索boards.txt,看看是不是有新的发现。
只有当引导程序崩溃时才需要进行下列操作!
每块NyBoard在出厂时都经过了功能性测试,这意味着它们已经预先烧录了引导程序。但是,在极个别情况下,引导程序可能会崩溃并导致无法上传Arduino代码。
当然,不能上传代码往往是由其他原因造成的,而不是因为引导程序崩溃:
有时USB驱动可能会检测到一个USB设备的电流过大而主动禁用该设备。这时需要更换USB端口甚至重启电脑来再次激活USB端口;
需要安装FTDI USB到UART上传器的驱动;
在Arduino IDE中没有选对串口;
接触不良;
运气不好 ☯️ 过两天可能又好了。
如果您确实需要重新烧录引导程序:
如果你手上的是NyBoard V1_*,在Arduino IDE的Tool下选用Arduino Uno
如果你手上的是NyBoard V0_* ,就需要选用NyBoard (ATmega328P 5V, 20MHz)
选择您的烧录工具。上面的截图突出显示了两种常用的编程器,高亮的 USBtinyISP是一种小巧便宜的专门的编程器,打勾的Arduino as ISP是用另一块Arduino板作为编程器
把编程器接到NyBoard的2x6的SPI端口,注意接插方向和良好接触
点击烧录引导程序进行烧录。如果这是您第一次尝试烧录,请耐心多等一会儿,直到看见进度条达到100%并不再有新进度条或新信息跳出为止。
此步骤不需要将Nyboard安装在机器人身上。
下图显示了之前套件中的两个 FTDI 板。
红色上传器上有电平选择跳线帽,拔到5V。在连接上传器和NyBoard的6针母座时要注意方向,可以用地线GND作为参考。
先用 miniUSB-USB 线缆连接电脑和FTDI上传器。红色款上传器有三个LED灯,电源,Tx和Rx,蓝色款上传器没有电源灯。在接通电脑USB的瞬间,Tx和Rx灯会闪一下然后会熄灭,表明有初始的信息传输。然后您可以在Arduino IDE的工具->端口找到对应的串口 “/dev/cu.usbserial-xxxxxxxx”(苹果系统) 或 “COM#” (Windows系统)。
通过USB到micro-USB电缆将您的计算机与USB上载器连接。
USB上载器具有三个LED,即电源(红色),Tx和Rx。连接后,Tx和Rx应该闪烁一秒钟,指示初始通信,然后变暗。仅电源LED指示灯应保持点亮状态。您可以在“工具”->“端口”下找到一个新端口,名称为:
“ /dev/cu.usbserial-xxxxxxxx” (Mac)
“ COMX ”(Windows,注意一定不是COM1,COM1一般台式机有,RS232串口)
“ttyUSB” (Linux,注意Arduino是否有读写该设备的权限,没有就chmod)
如果Tx和Rx灯常亮,也不闪烁,则串口通讯可能存在问题,这时串口也不会显示在串口列表里。这往往是由于NyBoard在驱动舵机时没有外接电源,USB端口被过流保护禁用导致的。
特别提一下Linux,将上载器连接到计算机后,您将在串行端口列表中看到“ ttyUSB#”。但是上传时,您仍然可能会遇到串行端口错误。您将需要授予串行端口权限。请转到此链接并按照说明进行操作 https://playground.arduino.cc/Linux/All/#Permission
驱动程序在这里,理论上Win10免驱
连接蓝牙模块, 您可以使用智能手机 APP 或 Web API 控制机器人。
在标准机器人套件中包含我们的官方蓝牙模块。 波特率请设置为 115200。
您需要像使用蓝牙 AirPod 一样将其连接到计算机。 默认密码为 0000 或 1234。然后您可以在 Arduino IDE 的 Tools->Port 下选择它,使用方法与USB上载器相同。
具体连接方法请参考双模蓝牙模块相应章节。
如果您使用的是NyBoard V0_* 主板,您需要将其波特率设置为 57600 。
在 Mac 上,蓝牙可能会在多次上传后断开连接。 在这种情况下,请删除连接再重新连接。
在矽递及其代理渠道销售的版本中不包含蓝牙模块,请向support@petoi.com咨询购买方式。
从 GitHub 下载 1.0 OpenCat 存储库:https://github.com/PetoiCamp/OpenCat/tree/1.0
如果下载代码的Zip文件,则解压缩后将获得一个OpenCat-1.0文件夹。您需要在打开OpenCat.ino之前将其重命名为OpenCat(Arduino规定代码必须放在同名文件夹之下)。
无论您将文件夹保存在何处,文件结构都应为:
ModuleTests文件夹中有几个名为testX(X代表外设,比如蜂鸣器陀螺仪).ino的代码。您可以上传它们以分别测试某些模块。打开任何带有前缀“ test”的testX.ino的工程。 (我建议您使用testBuzzer.ino作为第一个测试项目)。
打开串行监视器并设置波特率:
使用NyBoard V1_ *,将开发板选为Arduino Uno,然后在代码和串口监视器中将波特率设置为115200。
使用NyBoard V0_*,将开发板选为NyBoard (ATmega328P 5V, 20MHz),然后在代码和串行监视器中将波特率设置为 57600。
编译代码,应该没有错误提示。如果有请根据提示查找问题,一般问题为缺少某些库,根据需要安装即可。随后上传到您的开发板上,您应该看到Tx和Rx LED快速闪烁。一旦它们停止闪烁,消息应出现在串口监视器上。
在输入命令之前,请确保串口监视器设置为“没有结束符” (No line ending)。否则,不可见的' \n'或' \r'字符将使解析函数失效。
对于Linux计算机,您初次编译时可能会看到错误消息,例如“ permission denied(权限被拒绝)”。
您将需要向avr-gcc添加执行特权才能编译Arduino程序:
sudo chmod +x filePathToTheBinFolder/bin/avr-gcc
此外,您需要为/ bin中的所有文件添加执行权限,因此命令为:
sudo chmod -R +x /filePathToTheBinFolder/bin
通过连接NyBoard和Arduino IDE的USB上载器 /蓝牙模块,就可以和Nyboard直接通信了。
我们预先定义了一些指令,指令和参数表如下:
所有的命令都是以单个ASCII字符开头,并区分大小写。通常指令为小写。
有的指令,如“c”和“m”是复合命令:
比如:连续命令如:“ m8 40”,“ m8 -35”,“ m 0 50”可以写为“ m8 40 8 -35 0 50”。您最多可以组合四个相同类型的命令。确切地说,字符串的长度应小于30个字符。您可以在代码中更改限制,但是串行缓冲区可能会有系统的限制。
一些命令尚未实现,例如“h”。 命令“i”和“l”在软件版本 1.0 中仍然存在一些错误。
机器人的运动是不需要树莓派的,树莓派是机器人的主控上位机。
您需要断开USB上载器才能与 Pi 的串行端口进行通信。
您可以在NyBoard上焊接2x5插座,就可以连接Raspberry Pi。 Pi 3A +最适合Bittle的型号。
焊上了2x5的插座后,Bittle的盖子就盖不上了。
红色的树莓派卡扣可以3D打印。
如串行协议所示,Arduino IDE的串口监视器支持的命令参数全部编码为AscII码字符串,主机(例如RasPi)支持额外的命令,大多数命令都编码为二进制字符串以进行有效编码。例如,当编码角度为65度时:
Ascii码字符串: 2个字节的char,'6' 和 '5'
二进制字符串: 1个字节的char,‘A’
值 -113 如何处理? 它需要四个字节作为 AscII码字符串,但在二进制编码中仍然只需要一个字节,尽管内容将不再可作为字符打印。
显然,二进制编码比AscII码字符串有效得多。但是,传输的消息将不会直接被人类读取。在OpenCat存储库中,有一个简单的Python脚本ardSerial.py,它可以处理NyBoard和Pi之间的串行通信。
打开树莓派的终端,输入 sudo raspi-config
在 Interface(接口)选项,选择 Serial(串行接口)选项以启用串口。禁用串行登录 shell 并启用串行接口以使用主 UART:
使用 sudo 权限命令运行 raspi-config:sudo raspi-config
找到 Interface Options-> SerialPort
选项 Would you like a login shell to be accessible over serial? 选择
No
选项 Would you like the serial port hardware to be enabled? 选择
Yes
退出 raspi-config 并重新启动机器人(关闭、打开电池电源)以使更改生效。
你还需要禁用Pi的1-wire接口防止Pi的GPIO 4不断地发送重启信号。
树莓派官方网站上有一个很好的教程。
只要把树莓派和NyBoard通过可选的2x5插座相连,它们的串口就自动连接起来了,逻辑电平是3.3V。如果您连接的是其他AI芯片,就要注意Rx和Tx的连接,以及它们的逻辑电平。外接板上的Rx要连接NyBoard的Tx,外接板上的Tx要连接NyBoard的Rx,还需要连接NyBoard的参考电平输入和外接板的逻辑电压。
注意:如果您在树莓派上安装了 Ubuntu 操作系统,请进行如下配置:
在 /boot/config.txt 添加 enable_uart=1
在 Ubuntu系统的文件 /boot/firmware/cmdline.txt中删除
console=serial0,115200(类似于在树莓派系统中文件/boot/cmdline.txt)
运行以下命令关闭串行控制台:
sudo systemctl stop serial-getty@ttyS0.service && sudo systemctl disable serial-getty@ttyS0.service
请确保您已安装python 串行库 pyserial,而不是来自 apt 的 python-serial。
创建 udev file (/etc/udev/rules.d/50-tty.rules
),并添加以下内容:
运行以下命令重载 udev 规则:
sudo udevadm control --reload-rules && sudo udevadm trigger
运行以下命令更改新的串口设备的用户组:
sudo chgrp -h tty /dev/serial0
sudo chgrp -h tty /dev/serial1
这些设备现在位于 tty 组下。 运行以下命令将用户添加到 tty 组和dialout 组:
sudo adduser $USER tty
sudo adduser $USER dialout
运行以下命令更新设备上组读取的权限:
sudo chmod g+r /dev/ttyS0
sudo chmod g+r /dev/ttyAMA0
重启树莓派(关闭、打开机器人电池电源)
或者创建一个自动执行这些操作的脚本。
如果您想在bash里运行ardSerial.py,您还需要为它添加可执行权限:
chmod +x ardSerial.py
同时您可能需要把文件第一行的Python安装路径#!/user/bin/python
改成您电脑上的设置。
NyBoard 只有一个串口。 如果你想用树莓派的串口控制机器人,你需要拔掉USB上载器。
在树莓派的终端输入./ardSerial.py <args>
就相当于之前在Arduino串口监视器里输入 <args> 。比如,./ardSerial.py kcr
表示“执行 skill crawl”。
Python脚本ardSerial.py 和Nybble.ino里对应的解析代码都比较简略,需要逐渐完善。
对于Nybble:
连接到树莓派时可能会降低运动能力! 需要更强的电池。
某些快速的步态,比如小跑(trot,指令是ktr
),可能会导致系统重启。目前系统由两节14500电池串联供电,您可以升级供电方案,比如模型专用的锂聚合物动力电池。
在改装过程中需要综合考虑软硬件的协作。对于Nybble小巧的身躯而言,最好是把它作为一个编程平台来研究系统整合与决策树,而不是作为一台遥控赛车。
尽管通过USB上载器供电是可以给Nyboard上传程序的,但是仅使用USB上载器为 NyBoard 供电时,舵机存在明显的充电和放电现象,并导致黄色 LED 闪烁。USB 数据线的电流不足以维持舵机正常工作。 因此,舵机必须由外部电池供电才能正常工作。
NyBoard需要7.4〜8.4V外部电源来驱动舵机。我们在Bittle套件中包括了带有内置充电和保护电路的定制锂电池。短按电池按钮将显示其状态。蓝灯表示有电,红灯表示电量低。
连接电源时,请注意极性。 NyBoard上的插座具有防呆功能(防止反向插座),因此您将无法以错误的方向插入。详情请看这里(请不要 大 力 出 奇 迹!)
长按按钮3秒钟以打开/关闭电池。
反接电池有可能会损坏Nyboard!虽然我们也设计了简单的防反接电路~
电池寿命因使用情况而异
如果您主要是编码和测试姿势,则可以持续几个小时,如果保持Bittle的运行,则可以持续不到30分钟。
电量不足时,电池指示灯将变为红色。电源将自动切断。
请使用输出为5V-1A 的 USB充电器为电池充电。我们不建议使用快速充电器。电池在充电过程中无法供电。充电时请注意电池安全。
完全充电大约需要1.5至2小时,为确保安全,防止将其置于无人处持续充电。
请记住长按电池上电源键2.5秒以上关闭电源。建议您最好在关闭电源后把电池从NyBoard板上拔下来。
NyBoard需要7.4~9V 外接强力电源来驱动舵机。在调试狸宝时,我们用的是8V电源,通常可以通过串联两节锂离子或锂聚合物电池来获得。一节电池充满电是4.2V,在3.6V以上都可以正常工作,串联后就是8.4~7.2V的电压区间。如前所述,驱动套件配送的舵机最好采用电池直连,也就是把跳线帽SW3连接在BATT和V_S之间。
在购买电池时,搜索关键词“14500 3.7V 锂离子电池”,最好再加上“无保护板”。我注意到有些有过载保护的电池可能会过早地触发断电保护(<2.5A),导致狸宝不能正常工作,比如重启或死机。电池的放电能力越大越好,比如能稳定以2A放电,或2C以上。
我们的用户在论坛上对各国能买到的电池品牌作了汇总。
套件中的电池盒适用于14500锂离子电池,14表示直径为14mm,50表示电池长度,有时会差±2mm,但仍可适用。这个尺寸和常见的5号AA干电池一样,但是同尺寸的锂电池电压更高。
注意不要和普通5号电池混淆而误装到其他设备上!
另外,要选购正极有按钮状突起的电池。如果您在美国,可以在沃尔玛网购“EBL 14500 Li-ion”电池;在中国,可以在淘宝上试试运气。不要买标榜900mAh以上的电池,至少它们在容量上就不诚实。
您也可以自己设计电池盒来安装其他的电源方案,尤其是当您想添加树莓派做一些严肃的开发 ,或者纯粹想让狸宝跑得更快的时候。
接线时要注意极性,确保您能清楚地区分NyBoard电源接线端子和电池上的正负号(+/-)。
电源反接几乎必然会损坏NyBoard!
把NyBoard电源端子的螺丝拧松,插入电池盒引出的电源线,然后拧紧螺丝。闭合开关后,蓝光(主控)和黄光(舵机供电)LED都会点亮。
1月1日之后发货的套件中,端子更换为防反接插座,这样您就不会插错方向了。
续航时间取决于使用场景。如果您主要是用狸宝编程和测试一些动作,电池可以支持几个小时。如果您一直让狸宝跑来跑去,那就玩不到一个小时,大约四十分钟左右。
当电量不足时,黄色LED可能会不稳定地抖动。这时NyBoard仍可驱动一两个舵机,但更多舵机的负载的叠加会使电路极不稳定,导致持续重启或舵机的异常转动。在极个别情况下,电压波动会恰好翻转EEPROM中的关键常数,那就需要重新上传代码来恢复数据了。
最好使用与电池配套的锂电池智能充电器,比如“充电器+4节电池”的套装。在充电期间最好在场以防发生意外 。
使用后,记得把电池从电池盒中取出,以防无意中接通开关导致电池过度放电。
可以同时连接FTDI上载器和外接电源。事实上,如果在不接外接电源时命令舵机转动,会使USB端口负载过量电流,导致USB端口被禁用。在电池电量不足时,多个舵机的负载的叠加会波及逻辑电路,导致输出乱码、重启或死机。
声音类型 | 场合 | 解释 |
---|---|---|
骨头包含在摄像模块包装盒内,不单独销售。 您可以在以下网址下载其 3D 打印文件:
短旋律
上电或者重启
程序成功启动
短鸣
使用过程中
收到一条指令
重复短旋律
使用过程中动作会发生卡顿
电池电量不足或者未连接电池