WAVE ROVER

来自Waveshare Wiki
跳转至: 导航搜索
UGV02
{{{name2}}}
{{{name3}}}
功能简介
特性 WAVE ROVER移动机器人四驱底盘
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 TTL总线舵机控制接口 I2C UART

产品介绍

WAVE ROVER产品是一款具备强悍的越野通过能力和抗震能力的全金属框架框架移动机器人四驱底盘,其代码是全部开源的,且可二次开发。支持扩展多种上位机(树莓派、Jetson Nano、Jetson Orin Nano等),上位机通过串口与ESP32下位机进行通信。

内置3S 18650锂电池UPS供电模块(3节18650锂电池串联),为机器人提供持续能量来源的同时支持边充电边放电。内置多功能机器人驱动板,可扩展总线舵机、PWM输出、SD卡等功能,驱动板基于ESP32,板载WiFi和蓝牙。

它搭载了使用高质量波箱的N20减速电机,动力强劲,同时采用了柔软的橡胶车轮,极大减少了复杂地形冲击,使其轻松满足高速行驶、避震、越野等要求;并配有扩展平台,可用于安装上位机(树莓派 4B、Jetson nano等)、LD19/STL-27L激光雷达和云台模块,为二次开发提供了更多的可行性。


产品特性

  • 搭载了使用高质量波箱的N20减速电机,使产品能以 1.25m/s 的运行速度高速行驶;
  • 采用柔软的橡胶轮胎,大幅度减少复杂地形对产品的冲击;
  • 搭载交互设备 0.91inch OLED 屏幕;
  • 带有充电接口和自动下载电路,可以边充电边使用;
  • UPS 供电模块板载 INA219 采集芯片,方便实时监控电池电压,充电电流;
  • UPS 供电模块三节串联 18650 电池,7800mAh 大容量,输出电流更大,电机动力更强;
  • UPS 供电模块还提供输出 5V 和 3.3V 用于扩展其它设备;
  • UPS 供电模块板载锂电池保护电路,具有防过充、防过放、防过流和短路保护功能;
  • 例程代码使用 Arduino IDE 开发,不需要手动配置编译环境,ESP32 开机自动建立 WIFI 热点,可使用手机(Android/iOS)或电脑(Linux/Windows/Mac)连接并登录到控制页面,只需安装基于Chromium 的浏览器即可,不需要下载 app;
  • 下位机 ESP32 可用于驱动直流电机、总线舵机,板载 OLED 屏幕接口、TF 卡槽、九轴 IMU 模块、WiFi 和蓝牙,即使不安装上位机也可以单独使用;
  • 可扩展多种上位机,使用串口来传输 JSON 格式的数据来控制;
  • 全部代码开源并提供丰富的开发文档和教程;
  • 开源扩展平面图纸和底盘结构图纸,包括 3D 模型,方便进行二次开发;
  • JSON 指令可通过串口、USB、HTTP、ESP-NOW 等方式下达;
  • 绝大部分配置设置可由 JSON 指令实现,例如不需要连接 USB 线即可为产品配置 WIFI 连接。


产品固件更新

  • 如果你的机器人开机时 OLED 屏幕上显示 Version:0.9 ,说明机器人产品上的驱动程序已经是新版的程序了,就不需要再执行本部分内容给产品进行更新了。
  • 如果你的机器人开机时 OLED 屏幕上没有显示 Version:0.9,说明此时机器人产品上的驱动程序依旧是老版的程序,则需要执行本部分内容给产品进行更新;如果需要恢复出厂设置,也可以通过本部分内容进行。

我们提供 WAVE ROVER 的 ESP32 下载工具,使用这款工具,用户可以快速给产品更新固件或还原至出厂程序。

1. 首先,使用 USB 线连接机器人和你的电脑。(此步骤需要拆开机器人才能完成,拆开机器人后连接机器人驱动板中间那个的 USB 接口)。

2. 下载 WAVE ROVER 的 ESP32 下载工具:WAVE ROVER 的 ESP32 下载工具,下载后解压缩,双击打开“flash_download_tool_3.9.5.exe”程序。打开后,会弹出两个窗口,我们需要操作的是下载工具的UI界面,而另一个窗口作为终端来显示下载工具的工作状态。

3. 在“DOWNLOAD TOOL MODE”这个界面,Chip Type 选择为 ESP32,WorkMode 选择为 Factory,使用 Factory,调用二进制文件时才会使用相对路径,就不需要用户手动输入二进制文件路径,选择好后点击OK。

WAVEROVER下载工具.png

4. 在这个软件界面中,保持“LockSettings”的勾选,右边代表的是可以同时给 8 个 WAVE ROVER 上传程序。点击“COM”,选择新出现的 COM(我这里新出现的 COM 为 COM3);BAUD 是用于设置下载速度,越高速度越快,ESP32 最高可以使用 921600。

WAVEROVER下载工具1.png

5. 选择好后,点击 START 开始上传程序,上传完成后,“IDLE 等待”会变成“FINISH 完成”,完成后可以断开驱动板与电脑的 USB 连接,打开机器人产品的开关,通电后即可控制机器人。

WAVEROVER下载工具2.png


产品使用教程

注意:购买海外版的客户需要自行购买安装3个18650锂电池才可以正常使用,推荐使用高放电倍率的电池。首次接上电池需注意LED灯是否亮,如果LED灯亮则表示电池的正负极接反,请检查并确保电池未接反。电池接反的情况下禁止充电,否则有几率引起爆炸。

基本使用

  1. 打开机器人产品上的电源开关,通电后即可控制机器人。机器人内部电源没电后,需要使用配套的 12.6V 2A 电源插入机器人产品上的电源接口给其进行充电,支持边充边放。
  2. 机器人开机后 OLED 屏幕上显示内容含义如下:
    • 第一行内容表示此时 WiFi 处于 AP 模式下,WiFi 热点名为 UGV;
    • 第二行表示 STA 模式处于关闭状态,当 WiFi 处于 STA 模式时,路由器会分配一个 IP 地址并显示出来;
    • 第三行的内容为本设备的 MAC 地址,该地址是唯一的,用于 ESP-NOW 通信。
    • 第四行表示机器人产品的电源电压。
  3. 开机后使用手机或电脑连接机器人的 WiFi:UGV,密码是 12345678,连接 WiFi 后打开谷歌浏览器,在网址栏中输入 192.168.4.1 打开Web端使用界面。接下来你就可以使用 Web 端的功能来控制机器人了,可以在这个页面上向机器人发送 JSON 指令。

WR-web界面.png

  • 这个 Web 端界面会实时显示机器人的电压、STA 模式下的 WIFI 信号强度、航向角、IP和MAC地址等信息。
  • 通过方向按键可以控制机器人运动,方向按键下面的SLOW、MIDDLE、FAST按键用来选择机器人的移动速度。
  • 在 FEEDBACK INFOMATION 这个窗口可以给机器人发送 JSON 指令,下面就是具体的 JSON 指令。
  • 网页端包含了“心跳检测”,打开网页端控制界面后,Web端应用会与机器人进行连续通信,如果在机器人的运动过程中断开连接,机器人在短时间内会自动停止运动,避免危险。
  • 此 Web 端应用是完全开源的,你可以通过更改开源程序里的 WebPage.h 来更改 Web 端应用的界面和功能。


连接到已知WIFI

  • 在 Web 端界面下面的 JSON 指令列表找到一条名称为 CMD_WIFI_APSTA 的指令。可以点击这条指令下方的 INPUT 按钮,这条指令会被自动填写在 JSON 指令输入窗口中;

WR-APSTA.png

  • 在 JSON 指令输入窗口中会显示该指令的具体内容为:{"T":404,"ap_ssid":"UGV","ap_password":"12345678","sta_ssid":"your_ssid","sta_password":"password"}
    • 该指令中的 your_ssid 替换为您已知 WIFI 的名称;password 替换为您已知 WIFI 的密码。注意不要删除双引号。
    • 更改好后,点击 SEND,等待机器人进行连接。如果机器人连接该已知 WIFI 成功,OLED 屏幕上 ST 这行会显示路由器分配给机器人的 IP 地址。
    • 一旦连接成功后,机器人会自动保存这个 WIFI 配置,后续除了要更换连接的已知 WIFI,否则不需要再进行以上的步骤进行设置。机器人在开机后会自动连接到该已知 WIFI。
  • 可以在同一局域网内的其它设备上打开谷歌浏览器来访问 ST 模式的 IP 地址来访问机器人的 Web 端控制页面;也可以通过简单的 Python 脚本发送 http 请求通过 JSON 指令来控制机器人。


JSON 指令使用教程

什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换。同时也易于机器解析和生成。

为什么使用 JSON 指令与机器人进行交互?

由于机器人驱动板的板载资源比较多、例程功能丰富、同时兼顾方便扩展上位机,让上位机对于机器人的控制功能更加丰富和方便,所以我们使用 JSON 指令通信来与机器人进行交互,同样的,你也可以基于现有的框架对这些功能进行二次开发,让机器人的功能更适合你的使用需求。

JSON 指令的通信方式

  • 你可以使用下面的例程来通过不同的方法发送 JSON 指令控制机器人的各项功能
  • 机器人内置心跳函数:当3秒钟内没有新的移动控制指令下达,机器人会自动停止移动,所以当你通过上位机来控制机器人时,需要定时重复下达移动指令来让机器人连续移动

使用 Web 应用下达 JSON 指令

  • 开机后使用手机或电脑连接机器人的 WiFi:UGV,密码是 12345678,连接 WiFi 后打开谷歌浏览器,在网址栏中输入 192.168.4.1 打开Web端使用界面。
  • 在 FEEDBACK INFOMATION 这个窗口可以给机器人发送 JSON 指令,窗口下面就是具体的 JSON 指令,关于指令的具体解释可以参考下方的 【JSON 指令集】

使用 Python 脚本通过 HTTP 下达 JSON 指令

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屏幕上获得该机械臂的 IP 地址。

使用以下命令来运行 HTTP 请求通信程序。命令中的 IP 地址要更改为您机器人的 IP 地址。

python http_simple_ctrl.py 192.168.4.1

注意:无论是哪一种模式下,机器人需要与该脚本运行的设备处于同一个局域网内。


使用 ESP-NOW 下达 JSON 指令

  • 你可以控制机器人驱动板,让它通过 ESP-NOW 来向其它驱动板发送指令,ESP-NOW 具有免连接低延迟的特点,支持单播、组播和广播通信。
  • 为方便测试,产品开机后的默认 ESP-NOW 模式即可接收 ESP-NOW 指令,如果你不希望产品被其它设备通过设备来控制可以使用 {"T":301,"mode":0} 指令来关闭 ESP-NOW 接收功能,后续也可以使用 {"T":301,"mode":3} 来恢复。
  • 如果你需要产品每次开机自动设置为 {"T":301,"mode":0},可以将该指令写入 boot.mission 文件,这样产品每次开机会自动关闭 ESP-NOW 指令接收功能,你可以使用这条命令将 {"T":301,"mode":0} 添加到 boot.mission:{"T":222,"name":"boot","step":"{\"T\":301,\"mode\":0}"},后续如果你想取消这一设置可以直接删除 boot.mission 文件(删除后在下次开机时会自动新建):{"T":203,"name":"boot.mission"}。

ESP-NOW 使用准备工作

  • 以下使用 ESP-NOW 的教程中,接收端接收 JSON 指令的前提是你已经开启了 ESP-NOW 的指令接收功能(新产品的默认状态即可)。
  • 以下功能涉及到的硬件为 General Driver for Robots 或 ROS Driver for Robots 等运行我们的下位机程序的 ESP32 设备。

单播控制

单播控制是点对点的控制方式,你可以通过一台设备来控制另一台设备。

  • 用户需要获得被控制端的MAC地址,该地址通常会在OLED屏幕上有显示。
  • 用户通过本教程介绍的方法,向控制端发送JSON指令,将被控制端的MAC地址添加到peer,例如:{"T":303,"mac":"CC:DB:A7:5C:1C:40"},你需要将 mac 的值替换为你的从动端的 mac 地址。
  • 如果你需要从peer中删除某个mac地址,可以使用 {"T":304,"mac":"CC:DB:A7:5C:1C:40"} 指令。
  • 向被控制端发送 JSON 指令:{"T":306,"mac":"CC:DB:A7:5C:1C:40","dev":0,"b":0,"s":0,"e":0,"h":0,"cmd":1,"megs":"{"T":114,"led":255}"}
  • 你可以将上面的 megs 中的 JSON 指令替换为其它指令,将 mac 的值替换为你的被控制端的 mac 地址,其余的值不要改动,那些值是用于其它功能的。

广播控制

广播控制是一对多的控制方式,你可以通过一台设备来同时控制多台设备。

  • 用户不需要获得被控制端的MAC地址,该模式会向一定范围内的全部设备发送指令,广播控制的方法与单播控制的方法相同,只需要将单播控制中的 mac 值替换为广播地址即可:“FF:FF:FF:FF:FF:FF”
  • 用户通过本教程介绍的方法,向控制端发送JSON指令,将广播地址添加到peer:{"T":303,"mac":"FF:FF:FF:FF:FF:FF"}
  • 如果你需要从peer中删除广播mac地址,可以使用 {"T":304,"mac":"FF:FF:FF:FF:FF:FF"} 指令。
  • 广播发送 JSON 指令:{"T":306,"mac":"FF:FF:FF:FF:FF:FF","dev":0,"b":0,"s":0,"e":0,"h":0,"cmd":1,"megs":"{"T":114,"led":255}"}
    • 你可以将上面的 megs 中的 JSON 指令替换为其它指令,其余的值不要改动,那些值是用于其它功能的。

组播控制

组播控制是一对多的控制方式,你可以通过一台设备来同时控制多台设备,与广播控制的区别是组播控制可以选择被控制的设备。

  • 用户需要获得被控制端的MAC地址,该地址通常会在OLED屏幕上有显示。
  • 用户通过本教程介绍的方法,向控制端发送JSON指令,将被控制端的MAC地址添加到peer,例如:{"T":303,"mac":"CC:DB:A7:5C:1C:40"},{"T":304,"mac":"CC:DB:A7:5C:E5:FC"},你需要将 mac 的值替换为你的从动端的 mac 地址,你可以添加多个被控制端的 mac 地址,但是建议不超过20个。
  • 但是不要将广播地址“FF:FF:FF:FF:FF:FF”添加进去。
  • 如果你需要从peer中删除广播mac地址,可以使用 {"T":304,"mac":"FF:FF:FF:FF:FF:FF"} 指令。
  • 组播发送 JSON 指令:{"T":305,"dev":0,"b":0,"s":0,"e":1.57,"h":1.57,"cmd":1,"megs":"{"T":114,"led":255}"}
  • 你可以将上面的 megs 中的 JSON 指令替换为其它指令,其余的值不要改动,那些值是用于其它功能的。


使用 GPIO 或 USB 串口下达 JSON 指令

你可以使用 PC、树莓派、Jeston Nano、Jetson Orin Nano 等上位机通过串口与 ESP32 下位机进行通信。串口连接有以下两种方法:

  • 通过 40PIN 的 UART 接口将机器人与 树莓派、Jeston Nano、Jetson Orin Nano 进行连接
  • 通过 USB 线将机器人的下位机驱动板的 USB接口与上位机进行连接(此方法需要拆卸小车)
  • 点击串口通信的 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 中新插入的串口设备端口号,如果您使用的是树莓派、Jeston Orin Nano等设备,也要更改为相对应的端口名称。

python http_simple_ctrl.py COM20

运行完成后,在这个界面中可以发送 JSON 格式的指令,也可以获取机器人的反馈信息,从而与机器人进行通信。


JSON 指令集

底盘移动

左右轮速度控制 - CMD_SPEED_CTRL

{"T":1,"L":0.5,"R":0.5}
  • L 为左侧轮速度,R 为右侧轮速度,速度取值范围为 -0.5 ~ +0.5,正值前进,负值后退
    • 该产品型号为 WAVE ROVER,采用的电机是没有编码器的,速度 0.5 代表该侧电机 100% 的 PWM,0.25 代表该侧电机 50% 的 PWM
  • 推荐使用该指令对产品进行控制。

左右侧电机PWM控制 - CMD_PWM_INPUT

{"T":11,"L":164,"R":164}
  • L 为左侧电机 PWM 值,R 为右侧电机 PWM 值,PWM 值取值范围为 -255 ~ +255, 正值前进,负值后退
  • 由于直流减速电机的低速特性比较差,所以当 PWM 的绝对值过小时,电机可能不会转动
  • 该指令仅用于调试使用,控制产品移动请使用上面的 CMD_SPEED_CTRL

ROS控制 - CMD_ROS_CTRL

{"T":13,"X":0.1,"Z":0.3}
  • X 值为移动线速度,单位 m/s,Z 值为转向角速度,单位为 rad/s
  • 注意:该指令只适用于带编码器的 UGV01 和 UGV02

设置电机 PID

{"T":2,"P":200,"I":2500,"D":0,"L":255}
  • P、I、D 三个值分别对应比例、积分、微分系数,L 值为 Windup Limits 预留接口,目前 UGV01 中使用的默认 PID 控制器用不到该参数,我们预留了该接口方便用户更换其它的 PID 控制器
  • 注意:该指令不适用于无编码器的 WAVE ROVER

OLED 屏幕设置

OLED 屏幕控制

{"T":3,"lineNum":0,"Text":"putYourTextHere"}
  • OLED屏幕显示内容设置,lineNum参数为行设置,可以为:0、1、2、3,共可以显示4行内容。每次设置一行内容,新的内容不会影响到其它行显示的内容,但是会替换掉这一行之前原有的内容。
  • Text参数为内容设置,你可以在这里输入文字,文字会显示在对应行上
  • 当使用这条命令后,OLED屏幕将不会再显示机器人的信息,而是会显示指令让他显示的内容

OLED 屏幕恢复

{"T":-3}
  • 指令类型为-3时,会将OLED屏幕重置为初始状态,显示机器人的信息

产品信息获取

获取 IMU 数据

{"T":126}
  • 用于获取IMU信息,包括航向角、地磁场、加速度、姿态、温度等信息

获取底盘信息反馈 - CMD_BASE_FEEDBACK

{"T":130}

串口连续反馈

//关闭(默认)
{"T":131,"cmd":0}
//开启
{"T":131,"cmd":1}
  • 不开启该功能时,底盘信息反馈通过一问一答的方式来实现,用过上面的 CMD_BASE_FEEDBACK 之类来获取底盘信息反馈
  • 开启该功能时,底盘会连续反馈信息,不要上位机发指令去问,适用于ROS系统

串口回声开关

//关闭(默认)
{"T":143,"cmd":0}
//开启
{"T":143,"cmd":1}
  • 开启后,你所有发送给下位机的指令都会出现在串口反馈中

串口回声开关

//关闭(默认)
{"T":143,"cmd":0}
//开启
{"T":143,"cmd":1}
  • 开启后,你所有发送给下位机的指令都会出现在串口反馈中

IO4 IO5 控制

{"T":132,"IO4":255,"IO5":255}
  • 用于设置 IO4 IO5的 PWM

外接模块扩展

设置外接模块类型

{"T":4,"cmd":0}
  • 0: Null - 1: RoArm-M2机械臂 - 3: Gimbal云台

云台基础控制

{"T":133,"X":45,"Y":45,"SPD":0,"ACC":0}
  • 如果产品安装有云台,可通过这条指令进行控制,X 值为水平角度,正值向左,负值向右,Y 值为垂直角度,正值向上负值向下

机械臂 JSON 指令控制

如果产品安装有机械臂,可以通过参考 RoArm-M2-S_JSON 指令含义来对机械臂进行控制。

上位机使用教程

树莓派上位机

本章节使用树莓派5和树莓派4B测试

  • 树莓派的USB接口连接USB摄像头,推荐 IMX335 5MP USB Camera (B)
  • 将树莓派安装到底盘上
  • 制作镜像,下载上位机程序到树莓派中
  • cd ugv_rpi/
  • 为安装脚本添加可执行权限 sudo chmod +x setup.sh
  • 为配置开机自动运行的脚本添加可执行权限 sudo chmod +x autorun.sh
  • 国际用户:sudo ./setup.sh
  • 国内用户:sudo ./setup.sh -i
  • 等待安装完成后,配置开机自动运行:./autorun.sh (注意该指令不可以使用 sudo 运行)
  • 配置 WIFI 相关功能(无网络时自动切换热点): cd ugv_rpi/AccessPopup/
  • 安装 AccessPopup,为安装脚本添加可执行权限:sudo chmod +x installconfig.sh
  • 运行安装脚本: sudo ./installconfig.sh
  • 输入1,安装 AccessPopup,然后按任意键退出,输入9,回车,退出安装脚本
  • 重启设备后,树莓派会自动运行产品上位机主程序

产品硬件介绍

驱动板General Driver for Robots各模块使用

电机参数

  • 型号:GF12-N20电机 12V200转 进口波箱
  • 额定电压:12V
  • 额定电流:0.055A
  • 堵转电流:0.45A
  • 额定转矩:0.09kg.cm
  • 堵转转矩:0.7kg.cm
  • 额定输出功率:1.5W
  • 空载转速:66±10%RPM
  • 电机尺寸:34*12mm
  • 输出轴尺寸:4*10mm


资料

开源例程

机器人尺寸图纸和扩展平台图纸

机器人模型

配置清单

WAVE-ROVER-details-pack.jpg



技术支持


联系人:方工
EMAIL:2355742825@qq.com
QQ:2355742825
微信:扫下方二维码添加
QRCode YijunFang.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证