WAVEGO Pro
|
| ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
产品简介
这是一款具有12个自由度的仿生四足机器人,配备了12个2.3kg.cm大扭矩舵机,结构可靠动作灵活,集成了摄像头、9轴运动跟踪器、RGB等设备于一身,并开源了可跨平台使用的Web应用来控制该机器人,手机或电脑只需要安装有浏览器即可访问该机器人的控制界面。以ESP32作为下位机进行连杆逆解和步态生成,为上位机分担算力,也可以安装树莓派作为上位机来进行高阶决策运算。
产品特性
- 12个自由度,动作更加灵活丰富。
- 多连杆腿部结构+逆运动学算法,提升舵机有效扭矩。
- ICM20948 9轴运动跟踪器,可使用自平衡模式。
- 2.3kg.cm大扭矩舵机,堵转扭矩高达5.2kg.cm,可扩展性更强。
- 结构件由5052铝合金和PA12尼龙件组成,全身各关节共使用40套轴承,结构坚固可靠。
- 集成多种交互设备,包括0.96inch OLED屏幕、两颗RGB-LED指示灯,有源蜂鸣器等。
- 例程代码使用Arduino IDE开发,不需要手动配置编译环境,ESP32开机自动建立WIFI热点,可使用手机(Android/iOS)或电脑(Linux/Windows/Mac)连接并登录到控制页面,只需安装基于Chromium的浏览器即可,不需要下载app。
- 带有充电接口和自动下载电路,你可以边充电边使用。
- 板载两节串联18650电池,5200mAh大容量,输出电流更大,舵机动力更强。
- 板载锂电池保护电路,具有防过充、防过放、防过流和短路保护功能。
- 板载INA219采集芯片,方便实时监控电池电压,充电电流。
- 为ESP32的剩余IO和串口预留有2*5P扩展接口,功能包括RGB扩展,RX0,TX0,G21,G15,G12,3V3,5V,GND,可用于与上位机通信或外接其它设备。
- 可以安装树莓派作为上位机通过串口与下位机通信,ESP32作为下位机可以分担很多连杆逆解和步态生成的算力,留给树莓派更多的资源用于高阶功能开发。
- 树莓派套件配有散热风扇和超广角镜头,树莓派的例程包括基于Flask-Streaming开发的Web应用,可使用人脸识别/颜色追踪/运动检测等基于OpenCV开发的功能。
- 全部代码开源并提供丰富的开发文档和教程。
产品使用
首次使用
- 开机后使用手机或电脑连接机器人的 WiFi:WAVEGO,密码是 12345678,连接 WiFi 后打开谷歌浏览器,在网址栏中输入 192.168.4.1 打开 Web 端使用界面。接下来你就可以使用 Web 端的按键来控制机器人了,也可以在 Web 控制界面上向机器人发送 JSON 指令。
下位机 Web 端使用
- 通过方向按键可以控制机器人运动,方向按键下面的 STEADT START 和 STEADT STOP 按键用来打开机器人的自平衡模式。
- Staylow 按键用于控制机器人的下蹲与站立动作;HandShake 按键用于控制机器人的握手动作;Jump 按键用于控制机器人的跳跃动作
- 在 FEEDBACK INFOMATION 这个窗口可以给机器人发送 JSON 指令,输入框以下部分就是具体的 JSON 指令,JSON 指令具体解释也可见JSON指令集。
- 此 Web 端应用是完全开源的,你可以通过更改开源例程里的 WebPage.h 来更改 Web 端应用的界面和功能。
JSON 使用教程
什么是 JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在不同系统之间传输和存储数据。JSON 最初起源于 JavaScript,但已成为一种独立于编程语言的数据格式,因此可以在各种编程语言中使用和解析。
下述内容为针对机器人前进与横移控制功能的 JSON 格式指令案例:
{"T":111,"FB":1,"LR":1}
对于这条指令的解释:
“T”代表该指令的类型,指令类型在下位机程序的头文件 json_cmd.h 中定义。111 代表这条指令为 CMD_BASIC_MOVE 。
我们会在后续【JSON 指令集】中具体介绍每条指令的具体用法和注意事项,当你对每个功能有一定了解后,可参考 JSON 指令集来增加二次开发和使用效率。
为什么使用 JSON 指令与机器人进行交互?
由于机器人驱动板的板载资源比较多、例程功能丰富、同时兼顾方便扩展上位机,让上位机对于机器人的控制功能更加丰富和方便,所以我们使用 JSON 指令通信来与机器人进行交互,同样的,你也可以基于现有的框架对这些功能进行二次开发,让机器人的功能更适合你的使用需求。
支持 JSON 指令的通信方式
机器人可使用多种方式来进行 JSON 格式的指令交互。其中,有线的通信方式可以使用 RX/TX 引脚进行串口通信,或者通过 Type-C 接口接 USB 进行串口通信;无线的通信方式可以使用 HTTP 请求进行通信。你可以通过下面的例程来使用不同的方法发送 对应的 JSON 指令去控制机器人的各项功能。
1. 串口/USB 通信
特性:有线连接,默认波特率@115200,双向通信,稳定、低延时;
用途:方便使用 PC、树莓派等上位机来控制机器人;
连接方式:
- 通过机器人 40PIN 的 UART 接口与 树莓派进行连接
- 使用 USB 线将机器人的下位机驱动板的 USB 接口与上位机进行连接
Python 例程:serial_simple_ctrl.py。具体例程内容如下:
import serial
import argparse
import threading
def read_serial():
while True:
data = ser.readline().decode('utf-8')
if data:
print(f"Received: {data}", end='')
def main():
global ser
parser = argparse.ArgumentParser(description='Serial JSON Communication')
parser.add_argument('port', type=str, help='Serial port name (e.g., COM1 or /dev/ttyUSB0)')
args = parser.parse_args()
ser = serial.Serial(args.port, baudrate=115200, dsrdtr=None)
ser.setRTS(False)
ser.setDTR(False)
serial_recv_thread = threading.Thread(target=read_serial)
serial_recv_thread.daemon = True
serial_recv_thread.start()
try:
while True:
command = input("")
ser.write(command.encode() + b'\n')
except KeyboardInterrupt:
pass
finally:
ser.close()
if __name__ == "__main__":
main()
使用以下命令来运行串口通信程序,注意一定要加上机器人所接入的端口号。将 COM20 更换成机器人在 PC 中新插入的串口设备端口号,如果您使用的是树莓派等设备,也要更改为相对应的端口名称。
python serial_simple_ctrl.py COM20
运行完成后,在这个界面中可以发送 JSON 格式的指令,也可以获取机器人的反馈信息,从而与机器人进行通信。
2. HTTP 请求通信
HTTP(Hypertext Transfer Protocol)是一种用于在 Web 上进行数据通信的协议。
特性:基于 WIFI 模块实现的无线通信,请求-响应模型,灵活、简单。
Python 例程:下载http_simple_ctrl.py HTTP 请求通信例程,具体例程内容如下:
import requests
import argparse
def main():
parser = argparse.ArgumentParser(description='Http JSON Communication')
parser.add_argument('ip', type=str, help='IP address: 192.168.10.104')
args = parser.parse_args()
ip_addr = args.ip
try:
while True:
command = input("input your json cmd: ")
url = "http://" + ip_addr + "/js?json=" + command
response = requests.get(url)
content = response.text
print(content)
except KeyboardInterrupt:
pass
if __name__ == "__main__":
main()
在运行程序前您需要确认机器人的 ip 地址。确认机器人 ip 地址跟机器人所处的 WIFI 模式息息相关。
- 如果机器人 WIFI 模式仅处于 AP 模式,则 IP 地址为 192.168.4.1;
- 如果机器人 WIFI 模式处于 STA 模式,则可以在机器人 OLED 屏幕上的 ST 这行获得该机器人的 IP 地址。
使用以下命令来运行 HTTP 请求通信程序。命令中的 IP 地址要更改为您机器人的 IP 地址。
python http_simple_ctrl.py 192.168.4.1
注意:无论是哪一种模式下,机器人需要与运行该脚本的设备处于同一个局域网内。
JSON 指令集
矢量控制 - CMD_BASIC_MOVE
{"T":111,"FB":1,"LR":1}
- FB为前进或后退,LR 为左移或右移,速度取值范围为 -1 ~ +1,正值前进,负值后退。
- 推荐使用该指令对产品进行控制。
移动到中位 - CMD_JOINT_MIDDLE
{"T":101}
- 所有关节移动到中位511的位置。
扭矩锁控制 - CMD_RELEASE_TORQUEE
{"T":102}
- 所有关节关闭扭矩锁,该指令只在组装模式(将G15引脚接到3.3v进入组装模式)下适用。
舵机控制 - CMD_SINGLE_SERVO_CTRL
{"T":103,"id":21,"goal":511,"time":0,"spd":0}
- id:表示舵机的标识号,各关节对应的 id 号互不相同,具体分布情况请参阅产品组装教程。
- goal:表示舵机的目标位置。
- time:从当前位置到目标位置所需要的时间,速度为0时生效。
- spd:从当前位置到目标位置所需要的速度。
- 该指令只在组装模式(将G15引脚接到3.3v进入组装模式)下适用。
- 由于安装完成后各关节受到结构限制,因此不建议通过该指令实现运动控制,建议优先使用矢量控制指令对产品进行操作。
获取零点位置 - CMD_GET_JOINTS_ZERO
{"T":104}
- 获取机器人零点位置的pos值。
设置零点位置 - CMD_SET_JOINTS_ZERO
{"T":105,"set":[511,511,511,511,511,511,511,511,511,511,511,511]}
- 设置机器人的零点位置。
获取舵机位置 - CMD_GET_CURRENT_POS
{"T":106}
- 获取机器人各关节舵机的pos值。
将当前位置设置为零点位置 - CMD_SET_CURRENT_POS_ZERO
{"T":107}
- 将机器人当前状态下各关节的pos值设置为零点位置。
WAVEGO 教程目录
资料
机器人图纸
开源资料
树莓派学习资料
开发资料
FAQ
答:配2节18650型电池,即直接为18mm,长度为65mm.单节标的电压一般为3.7V,充满电电压一般为4.2V。
答:树莓派系统的默认账号:ws;密码:ws
答:linux系统在输入密码的时候是不打印输入内容,也就是需要盲打。键盘直接输入raspberry然后回车即可。
答:如果舵机无法按照教程指定的方式转动,请检查舵机是否正确安装。在组装模式下,舵机需要按照45度的角度安装白色摆臂。
答:是正常的,由于 RGB-LED 灯颜色更改过,所以现在进入组装模式后 RGB-LED 会呈现绿色的灯。
答:进入网页界面校准时不需要保持短接 G12 和 3V3 在组装模式。
答:请注意,浏览器必须是谷歌浏览器或者Microsoft浏览器。调节PWM时点一下是微调,动静很小,要多点才比较明显。如果无法调节还有可能是安装舵机的时候出错了,回到Q5。
答:如果在运行setup.py时出现错误,请检查源或网络问题是否导致下载失败。安装完成后,请在终端输入python3进入Python环境,并输入import cv2检查是否有错误报告。如果没有错误报告,则安装成功。如果有错误报告,则您可以多次运行setup.py或直接使用已安装好的镜像。
答:首先检查树莓派是否占用了下位机的串口,若下位机连接了树莓派,请断开连接,再重新上传程序。如果程序自动下载失败,请手动进入下载模式。在编译程序后,上传程序时,请长按boot键,并在按一下rst键期间松开boot键。如果无法解决问题,请退回维修。
答:请检查您在烧录镜像时设置的配置。有关详细信息,请参见WAVEGO树莓派Wiki页面的产品安装教程。如果仍无法自行烧录成功,请通过远程登录帮助客户烧录镜像。
答:WAVEGO Pro 的续航时长取决于使用方式和环境等多种因素。一般情况下,单次充电可支持连续使用1到2个小时,连续的高强度运行可使用20-30分钟。但具体的使用时间会因使用方式(例如不同的功率设置、不同的波长)和工作环境(例如温度、湿度)而有所不同。
