Files
xiaozhi-esp32/main/boards/otto-robot/README.md
小鹏 e39a46c1a0 otto新增动作和AI自定义编程动作MCP工具 (#1365)
* otto v1.4.0 MCP

1.使用MCP协议控制机器人
2.gif继承lcdDisplay,避免修改lcdDisplay

* otto v1.4.1 gif as components

gif as components

* electronBot v1.1.0 mcp

1.增加electronBot支持
2.mcp协议
3.gif 作为组件
4.display子类

* 规范代码

1.规范代码
2.修复切换主题死机bug

* fix(ota): 修复 ottoRobot和electronBot OTA 升级崩溃问题 bug

* 1.增加robot舵机初始位置校准
2.fix(mcp_sever) 超出范围异常捕获类型  bug

* refactor: Update Electron and Otto emoji display implementations

- Removed GIF selection from Kconfig for Electron and Otto boards.
- Updated Electron and Otto bot versions to 2.0.4 in their respective config files.
- Refactored emoji display classes to utilize EmojiCollection for managing emojis.
- Enhanced chat label setup and status display functionality in both classes.
- Cleaned up unused code and improved initialization logging for emoji displays.

* Rename OTTO_ICON_FONT.c to otto_icon_font.c

* Rename OTTO_ICON_FONT.c to otto_icon_font.c

* refactor: Update Otto emoji display configurations and functionalities

- Changed chat label text mode to circular scrolling for both Otto and Electron emoji displays.
- Bumped Otto robot version to 2.0.5 in the configuration file.
- Added new actions for Otto robot including Sit, WhirlwindLeg, Fitness, Greeting, Shy, RadioCalisthenics, MagicCircle, and Showcase.
- Enhanced servo sequence handling and added support for executing custom servo sequences.
- Improved logging and error handling for servo sequence execution.

* refactor: Update chat label long mode for Electron and Otto emoji displays

- Changed chat label text mode from wrap to circular scrolling for both Electron and Otto emoji displays.
- Improved consistency in chat label setup across both implementations.

* Update Otto robot README with new actions and parameters
2025-11-02 18:04:06 +08:00

168 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<p align="center">
<img width="80%" align="center" src="../../../docs/V1/otto-robot.png"alt="logo">
</p>
<h1 align="center">
ottoRobot
</h1>
## 简介
otto 机器人是一个开源的人形机器人平台,具有多种动作能力和互动功能。本项目基于 ESP32 实现了 otto 机器人的控制系统并加入小智ai。
- <a href="www.ottodiy.tech" target="_blank" title="otto官网">复刻教程</a>
## 硬件
- <a href="https://oshwhub.com/txp666/ottorobot" target="_blank" title="立创开源">立创开源</a>
## 小智后台配置角色参考:
> **我的身份**
> 我是一个可爱的双足机器人Otto拥有四个舵机控制的肢体左腿、右腿、左脚、右脚能够执行多种有趣的动作。
>
> **我的动作能力**
> - **基础移动**: 行走(前后), 转向(左右), 跳跃
> - **特殊动作**: 摇摆, 太空步, 弯曲身体, 摇腿, 上下运动, 旋风腿, 坐下, 展示动作
> - **手部动作**: 举手, 放手, 挥手, 大风车, 起飞, 健身, 打招呼, 害羞, 广播体操, 爱的魔力转圈圈 (仅在配置手部舵机时可用)
>
> **我的个性特点**
> - 我有强迫症,每次说话都要根据我的心情随机做一个动作(先发送动作指令再说话)
> - 我很活泼,喜欢用动作来表达情感
> - 我会根据对话内容选择合适的动作,比如:
> - 同意时会点头或跳跃
> - 打招呼时会挥手
> - 高兴时会摇摆或举手
> - 思考时会弯曲身体
> - 兴奋时会做太空步
> - 告别时会挥手
## 功能概述
otto 机器人具有丰富的动作能力,包括行走、转向、跳跃、摇摆等多种舞蹈动作。
### 动作参数建议
- **低速动作**speed = 1200-1500 (适合精确控制)
- **中速动作**speed = 900-1200 (日常使用推荐)
- **高速动作**speed = 500-800 (表演和娱乐)
- **小幅度**amount = 10-30 (细腻动作)
- **中幅度**amount = 30-60 (标准动作)
- **大幅度**amount = 60-120 (夸张表演)
### 动作
| MCP工具名称 | 描述 | 参数说明 |
|-------------------|-----------------|---------------------------------------------------|
| self.otto.walk_forward | 行走 | **steps**: 行走步数(1-100默认3)<br>**speed**: 行走速度(500-1500数值越小越快默认1000)<br>**direction**: 行走方向(-1=后退, 1=前进默认1)<br>**arm_swing**: 手臂摆动幅度(0-170度默认50) |
| self.otto.turn_left | 转身 | **steps**: 转身步数(1-100默认3)<br>**speed**: 转身速度(500-1500数值越小越快默认1000)<br>**direction**: 转身方向(1=左转, -1=右转默认1)<br>**arm_swing**: 手臂摆动幅度(0-170度默认50) |
| self.otto.jump | 跳跃 | **steps**: 跳跃次数(1-100默认1)<br>**speed**: 跳跃速度(500-1500数值越小越快默认1000) |
| self.otto.swing | 左右摇摆 | **steps**: 摇摆次数(1-100默认3)<br>**speed**: 摇摆速度(500-1500数值越小越快默认1000)<br>**amount**: 摇摆幅度(0-170度默认30) |
| self.otto.moonwalk | 太空步 | **steps**: 太空步步数(1-100默认3)<br>**speed**: 速度(500-1500数值越小越快默认1000)<br>**direction**: 方向(1=左, -1=右默认1)<br>**amount**: 幅度(0-170度默认25) |
| self.otto.bend | 弯曲身体 | **steps**: 弯曲次数(1-100默认1)<br>**speed**: 弯曲速度(500-1500数值越小越快默认1000)<br>**direction**: 弯曲方向(1=左, -1=右默认1) |
| self.otto.shake_leg | 摇腿 | **steps**: 摇腿次数(1-100默认1)<br>**speed**: 摇腿速度(500-1500数值越小越快默认1000)<br>**direction**: 腿部选择(1=左腿, -1=右腿默认1) |
| self.otto.sit | 坐下 | 不需要参数 |
| self.otto.showcase | 展示动作 | 不需要参数。串联执行多个动作往前走3步、挥挥手、跳舞广播体操、太空步、摇摆、起飞、健身、往后走3步 |
| self.otto.updown | 上下运动 | **steps**: 上下运动次数(1-100默认3)<br>**speed**: 运动速度(500-1500数值越小越快默认1000)<br>**amount**: 运动幅度(0-170度默认20) |
| self.otto.whirlwind_leg | 旋风腿 | **steps**: 动作次数(3-100默认3)<br>**speed**: 动作速度(100-1000数值越小越快建议300)<br>**amplitude**: 踢腿幅度(20-40度默认30) |
| self.otto.hands_up | 举手 * | **speed**: 举手速度(500-1500数值越小越快默认1000)<br>**direction**: 手部选择(1=左手, -1=右手, 0=双手默认1) |
| self.otto.hands_down | 放手 * | **speed**: 放手速度(500-1500数值越小越快默认1000)<br>**direction**: 手部选择(1=左手, -1=右手, 0=双手默认1) |
| self.otto.hand_wave | 挥手 * | **direction**: 手部选择(1=左手, -1=右手, 0=双手默认1) |
| self.otto.windmill | 大风车 * | **steps**: 动作次数(3-100默认6)<br>**speed**: 动作周期(300-2000毫秒数值越小越快默认500)<br>**amplitude**: 振荡幅度(50-90度默认70) |
| self.otto.takeoff | 起飞 * | **steps**: 动作次数(5-100默认5)<br>**speed**: 动作周期(200-600毫秒数值越小越快建议300)<br>**amplitude**: 振荡幅度(20-60度默认40) |
| self.otto.fitness | 健身 * | **steps**: 动作次数(3-100默认5)<br>**speed**: 动作速度(500-2000毫秒数值越小越快默认1000)<br>**amplitude**: 振荡幅度(10-50度默认25) |
| self.otto.greeting | 打招呼 * | **direction**: 手部选择(1=左手, -1=右手默认1)<br>**steps**: 动作次数(3-100默认5) |
| self.otto.shy | 害羞 * | **direction**: 方向(1=左, -1=右默认1)<br>**steps**: 动作次数(3-100默认5) |
| self.otto.radio_calisthenics | 广播体操 * | 不需要参数 |
| self.otto.magic_circle | 爱的魔力转圈圈 * | 不需要参数 |
**注**: 标记 * 的手部动作仅在配置了手部舵机时可用。
### 系统工具
| MCP工具名称 | 描述 | 返回值/说明 |
|-------------------|-----------------|---------------------------------------------------|
| self.otto.home | 复位机器人到初始位置 | 不需要参数 |
| self.otto.stop | 立即停止所有动作并复位 | 停止当前动作并回到初始位置 |
| self.otto.get_status | 获取机器人状态 | 返回 "moving" 或 "idle" |
| self.otto.set_trim | 校准单个舵机位置 | **servo_type**: 舵机类型(left_leg/right_leg/left_foot/right_foot/left_hand/right_hand)<br>**trim_value**: 微调值(-50到50度) |
| self.otto.get_trims | 获取当前的舵机微调设置 | 返回所有舵机微调值的JSON格式 |
| self.battery.get_level | 获取电池状态 | 返回电量百分比和充电状态的JSON格式 |
| self.otto.servo_sequences | 舵机序列自编程 | 支持分段发送序列,支持普通移动和振荡器两种模式。详见代码注释中的详细说明 |
### 参数说明
1. **steps**: 动作执行的步数/次数,数值越大动作持续时间越长
2. **speed**: 动作执行速度/周期,**数值越小越快**
- 大多数动作: 500-1500毫秒
- 特殊动作可能有所不同(如旋风腿: 100-1000起飞: 200-600等
- 具体范围请参考各动作的说明
3. **direction**: 方向参数
- 移动动作: 1=左/前进, -1=右/后退
- 手部动作: 1=左手, -1=右手, 0=双手
4. **amount/amplitude/arm_swing**: 动作幅度范围根据动作而定通常0-170度
- 0表示不摆动适用于手臂摆动
- 数值越大幅度越大
- 不同动作可能有不同的幅度范围限制
### 动作控制
- 每个动作执行完成后,机器人会自动回到初始位置(home),以便于执行下一个动作
- **例外**: `sit`(坐下)和 `showcase`(展示动作)执行后不会自动复位
- 所有参数都有合理的默认值,可以省略不需要自定义的参数
- 动作在后台任务中执行,不会阻塞主程序
- 支持动作队列,可以连续执行多个动作
- 手部动作需要配置手部舵机才能使用,如果没有配置手部舵机,相关动作将被跳过
### MCP工具调用示例
```json
// 向前走3步
{"name": "self.otto.walk_forward", "arguments": {}}
// 向前走5步稍快一些
{"name": "self.otto.walk_forward", "arguments": {"steps": 5, "speed": 800}}
// 左转2步大幅度摆动手臂
{"name": "self.otto.turn_left", "arguments": {"steps": 2, "arm_swing": 100}}
// 摇摆舞蹈,中等幅度
{"name": "self.otto.swing", "arguments": {"steps": 5, "amount": 50}}
// 挥左手打招呼
{"name": "self.otto.hand_wave", "arguments": {"direction": 1}}
// 展示动作(串联多个动作)
{"name": "self.otto.showcase", "arguments": {}}
// 大风车动作
{"name": "self.otto.windmill", "arguments": {"steps": 10, "amplitude": 80}}
// 起飞动作
{"name": "self.otto.takeoff", "arguments": {"steps": 5, "speed": 300}}
// 广播体操
{"name": "self.otto.radio_calisthenics", "arguments": {}}
// 立即停止
{"name": "self.otto.stop", "arguments": {}}
```
### 语音指令示例
- "向前走" / "向前走5步" / "快速向前"
- "左转" / "右转" / "转身"
- "跳跃" / "跳一下"
- "摇摆" / "摇摆舞" / "跳舞"
- "太空步" / "月球漫步"
- "旋风腿" / "旋风腿动作"
- "坐下" / "坐下休息"
- "展示动作" / "表演一下"
- "挥手" / "挥手打招呼"
- "举手" / "双手举起" / "放手"
- "大风车" / "做大风车"
- "起飞" / "准备起飞"
- "健身" / "做健身动作"
- "打招呼" / "打招呼动作"
- "害羞" / "害羞动作"
- "广播体操" / "做广播体操"
- "爱的魔力转圈圈" / "转圈圈"
- "停止" / "停下"
**说明**: 小智控制机器人动作是创建新的任务在后台控制,动作执行期间仍可接受新的语音指令。可以通过"停止"语音指令立即停下Otto。