UGV01

来自Waveshare Wiki
跳转至: 导航搜索
UGV01
{{{name2}}}
{{{name3}}}
功能简介
特性 UGV01履带机器人
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 TTL总线舵机控制接口 IIC UART

产品介绍

UGV01产品是一款具备超强的越野通过能力和抗震性能、开源全部代码可二次开发的移动机器人履带底盘。支持扩展多种上位机(树莓派、Jetson Nano、地平线旭日X3等),上位机通过串口与ESP32下位机进行通信,电机带有编码器可以获得速度反馈来进行速度闭环控制。

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

它采用了多独立悬挂系统,极大减少了复杂地形冲击,并配有两条1020欧标型材扩展导轨,使其轻松满足重载、避震、越野等要求,为二次开发提供了更多的可行性。


产品特性

  • 采用多独立悬挂系统,每侧配有四个独立悬挂,大幅度减少复杂地形冲击。
  • 重负载爬坡时,悬挂收缩,后轮会提供格外支撑,拥有优秀的爬坡能力。
  • 电机带有编码器,可以获得速度反馈来进行速度闭环控制。
  • 搭载交互设备0.96inch 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 指令可通过串口、USB、HTTP、ESP-NOW 等方式下达;
  • 绝大部分配置设置可由 JSON 指令实现,例如不需要连接 USB 线即可为产品配置 WIFI 连接。


产品固件更新

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

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

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

2. 下载 UGV01 的 ESP32 下载工具:UGV01 的 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 个 UGV01 上传程序。点击“COM”,选择新出现的 COM(我这里新出现的 COM 为 COM3);BAUD 是用于设置下载速度,越高速度越快,ESP32 最高可以使用 921600。

UGV01下载工具1.png

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

UGV01下载工具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 192.168.4.1

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


JSON 指令集

底盘移动

左右轮速度控制 - CMD_SPEED_CTRL

{"T":1,"L":0.5,"R":0.5}
  • L 为左侧轮速度,R 为右侧轮速度,速度取值范围为 -0.5 ~ +0.5,正值前进,负值后退
    • 该产品型号为 UGV01,采用的电机是有编码器的,速度值单位为 m/s(闭环速度控制)
  • 推荐使用该指令对产品进行控制。

左右侧电机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各模块使用

资料

开源例程

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

机器人模型




技术支持


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

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