探索系列(三):WebSocket API
一、前言
在阅读本文档之前,请先熟悉哮天的相关文档以了解其基础使用方法。HENGBOT 假定您已具备一定的编程开发基础,并且熟悉 Python 语言及接口调用。请注意,本文档不会对专业术语进行详细解释或科普。让我们一起跟随文档的指导,学习如何调试并开发 Sirius 哮天的 API 接口,以实现更多创新和有趣的功能。
二、准备工作
使用前我们需要进行一些准备工作,让我们后续使用更加顺利。
2.1 硬件
- 一只更新至最新镜像哮天(版本:hzwl831-m2dock-20240621)
2.2 软件
- 调试工具
- Webscoket 调试网页:http://wstool.js.org/
- Json 格式在线转换工具:https://www.sojson.com/
- 使用环境
- 哮天:默认是已联网状态并已在屏幕获取 IP 地址(例如“IP:192.168.8.232” )
- API 测试:默认哮天机身进入遥控模式下才可进行 API 测试。
- PC端:已安装 Python 环境
以上环境构建在本文档不会详细说明,如有需要可参考以下资料文档。
开箱使用文档:初识 Sparky:开箱指南
三、注意事项
为了更好的使用 API,您需要了解一些关于哮天的机身物理定义:
示意图 | |
---|---|
![]() | ![]() |
机身物理含义 | ||
---|---|---|
遥控 | move_x | ove_x = 1/-1 时最大前进、后退速率为 0.28m/s |
move_y | move_y = 1/-1 时最大前进、后退速率为 0.3m/s | |
move_w | move_w = 1 时最大z轴旋转速度为 2 弧度每秒 | |
head_pitch | 活动范围为 -1 ~ 1弧度 | |
head_yaw | 活动范围为 -1 ~ 1弧度 | |
tranx | tranx 在-1~1时 活动范围为前后 20mm | |
trany | trany 在-1~1时 活动范围为左右 20mm | |
tranz | tranz 在-1~1时 活动范围为上下 30mm | |
关键帧 | roll、pitch、yaw | 使用弧度制,范围在 -1~1 之间。 |
body | body 中 tran_z 为机身站立高度单位mm | |
足端位置 | 均使用mm单位,使用笛卡尔坐标系。 |
四、API 使用流程
开启 API 使用之前,我们需要了解如何通过两种主要方式来实现 API 功能;分别是浏览器调试和 Python 开发,以下是详细的使用流程,它将会引导您开启 API 体验之旅!
4.1 API 浏览器调试
- 准备阶段:按准备工作完成关于软硬件的用前准备。
- 验证连接:先确定哮天是否可正常被连接。
- 测试遥控步态:测试是否可对哮天发出指令并执行指令。
- 录制播放:体验示教模式下录制功能,是否可播放预置的录制脚本。
- 播放关键帧:体验编辑模式下关键帧功能,是否可播放预置的关键帧。
- 异常状态 Q&A:了解哮天出现异常状态时如何恢复正常使用。
4.2 更多 API 开发资料
- API 开发详细资料解读:涵盖(模式切换与机身姿态重置、遥控模式、示教模式、编辑模式)
- API Python 使用示例
- Mjpeg 图传使用
五、API 浏览器调试
大多数的 API 功能和机器狗的模式相关,而需要在特定模式下才能使用。所以当我们在与机器狗建立连接后需先进行模式切换才能使用具体功能。
5.1 连接哮天
我们已经在准备工作里将哮天联网并获取了 IP 地址做备用,此处以 IP:192.168.8.74 来示例。
注意:如有部分用户开启后显示得是:https://wstool.js.org/
请将 https 改为 http,浏览器安全规范只能建立 wws 链接,而 ws 链接会导致报错。
操作步骤 | 示例图 |
---|---|
第一步:点击进入 Webscoket 调试网页 并输入 ws://<机器狗IP>:10710/getjson 以 IP 为信息的服务地址。例:ws://192.168.8.74:10710/getjson | |
第二步:输入后点击 “开启连接”,此时连接成功哮天后会返回调试信息。接下来接着勾选“收包 JSON 解码”,您就可以在浏览器端开启调试 API 功能啦! | |
第三步:尝试向哮天发出第一条指令,来获取哮天机体的基本状态吧! | {"cmd":"Get_Status"} |
第四步:复制上文指令并粘贴在发送框点击发送,右侧消息框会返回哮天端状态信息。 |
我们可以尝试解读返回的数据代表的是什么意思?数据里包含了电池信息、硬件错误状态、联网信息、状态信息这四大部分。目前可获取的有效信息只有以下三大部分,而硬件状态还未规范。
- 电池信息:
- 电池容量:2340mAh
- 电量:87%
- 电池百分比:93.6%
- 电池状态指示:正在放电
- 充电时间:65535
- 当前电流:-1.62A(表示电池正在放电)
- 瞬时功率:-11.664W(同样表示电池正在放电)
- 温度:36°C
- 电压:7.2V
- 网络信息:
- 客户端IP地址:192.168.8.155
- 设备IP地址:192.168.8.232
- SSID:test
- 反馈信息:获取状态(feedback: "Get_Status" 可能表示这是一个状态更新的反馈)
5.2 测试遥控步态
注意事项:
- 急停模式、步态运动导致哮天进入卸力状态,请在开始前抓握住哮天腰部,避免磕碰或跌落造成损坏。
- 每次模式切换结束后,请先发送重置机身姿态的指令后再使用机器狗。
- 用户可以根据需求使用恢复机身姿态的功能,以将机器狗调整到稳定的 站立状态。
验证哮天机器人可正常连接之后,参考下文开启指令测试,来测试哮天是否能够接收并执行指令。
测试一:切换模式并恢复正常姿态
分别发送进入 遥控模式 -> 急停模式 -> 恢复机身姿态 的代码指令,参考指令发送后效果视频如下。
{"cmd":"Mode_Switch","target":"Remote_Control_Mode"}
{"cmd":"Mode_Switch","target":"Emergency_Stop"}
{"cmd":"Reset_Robot_Position"}
// 切换到遥控模式
{"cmd":"Mode_Switch","target":"Remote_Control_Mode"}
// 进入急停模式,开启前请握住哮天机身防止因电机卸力出现碰撞损坏!!!实验功能
{"cmd":"Mode_Switch","target":"Emergency_Stop"}
/* 恢复机身姿态 */
{"cmd":"Reset_Robot_Position"}
测试二:测试步态运动
开启步态运动的测试之前,首先我们先发送指令确保哮天已进入遥控模式。接下来,请把哮天放置在平整空旷的地面或台面,我们将按照以下步骤进行步态测试。
- 发送全速前进指令,观察哮天在全速前进的姿态,此时记录页会跳出相关参数信息。
- 发送停止指令结束步态运动。
- 测试完成后,发送恢复机身姿态的指令,确保哮天能够安全地恢复到原始姿态。
{"cmd":"Mode_Switch","target":"Remote_Control_Mode"}
{"cmd":"Control_Move","movex":1.0,"movey":0,"movew":0,"moveh":0,"tranx":0,"trany":0,"tranz":0,"roll":0,"pitch":0,"yaw":0,"headpitch":0,"headyaw":0,"speed":"normal"}
{"cmd":"Control_Move","movex":0,"movey":0,"movew":0,"moveh":0,"tranx":0,"trany":0,"tranz":0,"roll":0,"pitch":0,"yaw":0,"headpitch":0,"headyaw":0,"speed":"normal"}
{"cmd":"Reset_Robot_Position"}
// 切换到遥控模式
{"cmd":"Mode_Switch","target":"Remote_Control_Mode"}
// 全速前进,开启前请把哮天放置在平整空旷的地面或台面!!!
{"cmd":"Control_Move","movex":1.0,"movey":0,"movew":0,"moveh":0,"tranx":0,"trany":0,"tranz":0,"roll":0,"pitch":0,"yaw":0,"headpitch":0,"headyaw":0,"speed":"normal"}
// 停止
{"cmd":"Control_Move","movex":0,"movey":0,"movew":0,"moveh":0,"tranx":0,"trany":0,"tranz":0,"roll":0,"pitch":0,"yaw":0,"headpitch":0,"headyaw":0,"speed":"normal"}
/* 恢复机身姿态 */
{"cmd":"Reset_Robot_Position"}
5.3 录制播放
录制播放是示教模式下的亮点功能,在进入 API 开发前我们先体验一下如何播放已录制好的动作帧。
模式切换与机身姿态重置是所有模式功能的前置步骤,开始使用前请认已经切换到示教模式。
{"cmd":"Mode_Switch","target":"Teach_Mode"}
{"cmd":"Start_Play"}
{"AIA":{"BackLeftLeg":{"x":-58.03042221069336,"y":19.174842834472656,"z":-166.43234252929688},"BackRightLeg":{"x":-64.67723846435547,"y":0.9458351135253906,"z":-164.07229614257813},"FrontLeftLeg":{"x":38.319374084472656,"y":-8.239791870117188,"z":-168.74769592285156},"FrontRightLeg":{"x":54.310855865478516,"y":21.319934844970703,"z":-165.0332794189453},"Head":{"pitch":0.3413107395172119,"yaw":0.0007669925689697266}},"cmd":"Playing","time":3000}
{"cmd":"Stop_Play"}
{"cmd":"Reset_Robot_Position"}
// 切换到示教模式
{"cmd":"Mode_Switch","target":"Teach_Mode"}
/* 动作播放 */
// 1、发送动作播放指令
{"cmd":"Start_Play"}
// 2、发送所有需要播放的动作帧,开启前请握住哮天机身防止因电机卸力出现碰撞损坏!!!
// 与录制帧的格式区别是"feedback": "Recording" 替换为 "cmd": "Playing"
{"AIA":{"BackLeftLeg":{"x":-58.03042221069336,"y":19.174842834472656,"z":-166.43234252929688},"BackRightLeg":{"x":-64.67723846435547,"y":0.9458351135253906,"z":-164.07229614257813},"FrontLeftLeg":{"x":38.319374084472656,"y":-8.239791870117188,"z":-168.74769592285156},"FrontRightLeg":{"x":54.310855865478516,"y":21.319934844970703,"z":-165.0332794189453},"Head":{"pitch":0.3413107395172119,"yaw":0.0007669925689697266}},"cmd":"Playing","time":3000}
// 播放过程中会发送反馈信息,代表已经播放的时间
// {"feedback":"Recording""time":3000}
// 3、结束播放
// 发送这段指令停止动作播放计时器
{"cmd":"Stop_Play"}
// 4、恢复到站立姿态
{"cmd":"Reset_Robot_Position"}