# OpenServoRobot **Repository Path**: zhangyangyangyou/open-servo-robot ## Basic Information - **Project Name**: OpenServoRobot - **Description**: 此项目基于Python和micropython环境,提供前端flask/microdot来实现用户对总线舵机的调试与编程 mpy为嵌入式驱动环境,兼容esp32s3、esp32c3、esp32、esp8266/8285等主流可运行micropython的MCU。 在py分支中,提供完整的功能,通常在windows平台运行,用户也可将这个分支迁移到linux平台使用。 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-12 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## OpenServoRobot #### by 洋洋柚 ### 项目简介 此项目基于Python和micropython环境,提供前端flask/microdot来实现用户对总线舵机的调试与编程 mpy为嵌入式驱动环境,兼容esp32s3、esp32c3、esp32、esp8266/8285等主流可运行micropython的MCU。 在py分支中,提供完整的功能,通常在windows平台运行,用户也可将这个分支迁移到linux平台使用。 ### 版本分支 v0.1版本 ``` 2025_8_12在v0.1版本下,主要为了建造一个完整的项目框架和制定各种库的通讯标准和文件格式标准, v0.1版本问题:目前虽然仅支持LX225BusServo总线舵机硬件,但在后续版本中会逐步优化项目。 舵机的每个动作延时不可调,需要手动编辑json的delay参数来实现不同动作组之间的快慢。 ``` ### 关于py分支 py分支是基于python环境的可移植版本,主要用于windows平台,用户也可以在linux平台下使用。 在这个分支中,我们使用python的标准库和模块,但在舵机的驱动程序保持与mpy分支相同的接口以提高通用和兼容性。 在支持完整的python平台的前提下,由于拥有更大的算力资源与内存,因此包含了全部的调试功能。 1.在这个分支模式下,由于设备可能连接多个串口设备,因此在配置程序并没有设定好串口和通讯相关功能,需要在使用时在(打开串口)页面设置串口和通讯波特率,随后点击(确认连接)按钮,连接后点击扫描舵机以加载可用的舵机。 2.调试舵机时,可以让舵机保持锁定然后通过修改舵机角度值来设置舵机的不同位置,然后点击按钮(保存当前位置)保存当前动作到动作列表; 也可以将舵机解锁,随后手动掰机器人的相关部位,在位置合适后进行锁定,并且读取舵机的位置信息,随后点击按钮(保存当前位置)保存当前动作到动作列表。 3.允许用户修改舵机的值后把不同动作保存到动作序列中还允许用户直接加载和导出保存json动作文件。 4.在"读取信息.py"内包含舵机ID重命名方法```bus_servo.rename_servo(0xfe, 0x01)```如果不知道舵机ID,通常接一个舵机并且把广播地址(例如0xfe)设置为你需要的舵机ID(例如0x01),然后运行这个方法,即可设置位置ID舵机的ID(舵机救砖)。 当前此版本主要为了测试动作是否可以运行以及保存多个json动作后,允许用户使用手机或者电脑的浏览器来启动这些动作。 ### 关于mpy分支 mpy分支是基于micropython环境的移植版本,主要用于移植到esp32s3、esp32c3、esp32、esp8266/8285等主流MCU。 在这个分支中,我们使用micropython的标准库和模块,但在舵机的驱动程序保持与py分支相同的接口以提高通用和兼容性。 1.在这个分支模式下,在配置程序预先设定好串口和通讯相关功能,不需要在使用时设置串口和通讯波特率。 2.当前此版本主要为了测试动作是否可以运行以及保存多个json动作后,允许用户使用手机或者电脑的浏览器来启动这些动作。 3.浏览器操作(电脑和手机浏览器同时也可以把json动作文件上传到板卡存储单元内),同时也可以通过任何形式请求 ``` host:port//load_and_run_actions/xxx.json ``` 来执行储存在板卡内的json动作文件。 4.在"读取信息_esp32_mpy.py"内包含舵机ID重命名方法```bus_servo.rename_servo(0xfe, 0x01)```如果不知道舵机ID,通常接一个舵机并且把广播地址(例如0xfe)设置为你需要的舵机ID(例如0x01),然后运行这个方法,即可设置位置ID舵机的ID(舵机救砖)。 考虑到mpy分支并不需要调教动作,因此为了节约嵌入式芯片资源当前版本的功能并未实现动作的手动编辑动作,仅可以通过json动作文件来实现动作的导入和导出。 ### json动作文件格式 ``` { "metadata": { "export_time": "20241023_153045", "total_actions": 2, "controller": "LX225BusServo" }, "actions": [ { "delay": 1000, "servos": [ { "id": 1, "position": 500, "mode": 0 }, { "id": 2, "position": 300, "mode": 0 } ] }, { "delay": 1500, "servos": [ { "id": 1, "position": 800, "mode": 0 }, { "id": 3, "position": 150, "mode": 0 } ] } ] } ``` 根对象:整个JSON数据是一个对象,包含两个主要的键:metadata 和 actions。 metadata对象:这个对象提供了导出信息的基本元数据。 export_time:字符串类型,表示文件导出的时间,格式为 YYYYMMDD_HHMMSS。 total_actions:整数类型,表示动作序列中的总动作数量。 controller:字符串类型,指定控制器的型号。 actions数组:这个数组包含多个动作对象,每个对象代表一个具体的动作。 每个动作对象包含两个键:delay 和 servos。 delay:整数类型,表示执行该动作前的延迟时间,单位为毫秒。 servos:数组类型,包含一个或多个舵机对象,每个对象代表一个要控制的舵机。 servos数组中的舵机对象:每个舵机对象包含三个键:id、position 和 mode。 id:整数类型,每个舵机的唯一标识符。 position:整数类型,舵机所要移动到的目标位置。 mode:整数类型,舵机的工作模式。